Jan Kiszka <[email protected]> writes:

> From: Philippe Gerum <[email protected]>
>
> Make sure that inband is marked stalled when entering from user mode,
> taking an exception.
>
> This affects x86 which is currently the only arch using generic
> irqentry_enter_from_user_mode on exceptions. It fixes this lockdep
> warning:
>
> DEBUG_LOCKS_WARN_ON(!lockdep_stage_disabled())
> WARNING: CPU: 2 PID: 1477 at ../kernel/locking/lockdep.c:4129 
> lockdep_hardirqs_on_prepare+0x160/0x1a0
>
> Signed-off-by: Philippe Gerum <[email protected]>
> Tested-by: Jan Kiszka <[email protected]>
> ---
>
> Works as it should here. If the wording is fine, please add.
>
>  kernel/entry/common.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/entry/common.c b/kernel/entry/common.c
> index 995123075375..51af58e61cb8 100644
> --- a/kernel/entry/common.c
> +++ b/kernel/entry/common.c
> @@ -343,6 +343,8 @@ __visible noinstr void syscall_exit_to_user_mode(struct 
> pt_regs *regs)
>  
>  noinstr void irqentry_enter_from_user_mode(struct pt_regs *regs)
>  {
> +     WARN_ON_ONCE(irq_pipeline_debug() && irqs_disabled());
> +     stall_inband_nocheck();
>       enter_from_user_mode(regs);
>  }
>  
> @@ -373,8 +375,6 @@ noinstr irqentry_state_t irqentry_enter(struct pt_regs 
> *regs)
>  
>       if (user_mode(regs)) {
>  #ifdef CONFIG_IRQ_PIPELINE
> -             WARN_ON_ONCE(irq_pipeline_debug() && irqs_disabled());
> -             stall_inband_nocheck();
>               ret.stage_info = IRQENTRY_INBAND_UNSTALLED;
>  #endif
>               irqentry_enter_from_user_mode(regs);

Ok, picked it. Thanks.

-- 
Philippe.

Reply via email to