On Wed, 24 Apr 2019, Fenghua Yu wrote: > +void handle_split_lock_kernel_mode(void) .... > +dotraplinkage void do_alignment_check(struct pt_regs *regs, long error_code) > +{ > + unsigned int trapnr = X86_TRAP_AC; > + char str[] = "alignment check"; > + int signr = SIGBUS; > + > + RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU"); > + > + if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) == > + NOTIFY_STOP) > + return; > + > + cond_local_irq_enable(regs); > + if (!user_mode(regs) && > + static_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT)) { > + /* > + * Only split lock can generate #AC from kernel at this point. > + * Warn and disable split lock detection on this CPU. The > + * faulting instruction will be executed without generating > + * another #AC fault. > + */ > + return handle_split_lock_kernel_mode(); return fun()? For some reason gcc will not complain about that, but for the reader it's confusing at best. Thanks, tglx