• Fenghua Yu's avatar
    x86/traps: Handle #DB for bus lock · ebb1064e
    Fenghua Yu authored
    Bus locks degrade performance for the whole system, not just for the CPU
    that requested the bus lock. Two CPU features "#AC for split lock" and
    "#DB for bus lock" provide hooks so that the operating system may choose
    one of several mitigation strategies.
    
    #AC for split lock is already implemented. Add code to use the #DB for
    bus lock feature to cover additional situations with new options to
    mitigate.
    
    split_lock_detect=
    		#AC for split lock		#DB for bus lock
    
    off		Do nothing			Do nothing
    
    warn		Kernel OOPs			Warn once per task and
    		Warn once per task and		and continues to run.
    		disable future checking
    	 	When both features are
    		supported, warn in #AC
    
    fatal		Kernel OOPs			Send SIGBUS to user.
    		Send SIGBUS to user
    		When both features are
    		supported, fatal in #AC
    
    ratelimit:N	Do nothing			Limit bus lock rate to
    						N per second in the
    						current non-root user.
    
    Default option is "warn".
    
    Hardware only generates #DB for bus lock detect when CPL>0 to avoid
    nested #DB from multiple bus locks while the first #DB is being handled.
    So no need to handle #DB for bus lock detected in the kernel.
    
    #DB for bus lock is enabled by bus lock detection bit 2 in DEBUGCTL MSR
    while #AC for split lock is enabled by split lock detection bit 29 in
    TEST_CTRL MSR.
    
    Both breakpoint and bus lock in the same instruction can trigger one #DB.
    The bus lock is handled before the breakpoint in the #DB handler.
    
    Delivery of #DB for bus lock in userspace clears DR6[11], which is set by
    the #DB handler right after reading DR6.
    Signed-off-by: default avatarFenghua Yu <fenghua.yu@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarTony Luck <tony.luck@intel.com>
    Link: https://lore.kernel.org/r/20210322135325.682257-3-fenghua.yu@intel.com
    ebb1064e
debugreg.h 3.27 KB