On Sun, Nov 08, 2020 at 04:29:16AM +0000, Fenghua Yu wrote:
> 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 #DB
> 
> fatal         Kernel OOPs                     Send SIGBUS to user
>               Send SIGBUS to user
>               When both features are
>               supported, fatal in #AC.

> +void handle_bus_lock(struct pt_regs *regs)
> +{
> +     if (!bld)
> +             return;
> +
> +     pr_warn_ratelimited("#DB: %s/%d took a bus_lock trap at address: 
> 0x%lx\n",
> +                         current->comm, current->pid, regs->ip);
> +}

So the Changelog above, and the state_show() below, seem to suggest
there should be SIGBUS code in #DB, but I'm having trouble spotting it.

> +static void sld_state_show(void)
> +{
> +     if (!bld && !sld)
> +             return;
> +
> +     switch (sld_state) {
> +     case sld_off:
> +             pr_info("disabled\n");
> +             break;
> +
> +     case sld_warn:
> +             if (bld)
> +                     pr_info("#DB: warning about user-space bus_locks\n");
> +             else
> +                     pr_info("#AC: crashing the kernel about kernel 
> split_locks and warning about user-space split_locks\n");
> +             break;
> +
> +     case sld_fatal:
> +             if (sld)
> +                     pr_info("#AC: crashing the kernel on kernel split_locks 
> and sending SIGBUS on user-space split_locks\n");
> +             else
> +                     pr_info("#DB: sending SIGBUS on user-space 
> bus_locks\n");
> +             break;
> +     }
> +}

Reply via email to