All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Xu Lu <luxu.kernel@bytedance.com>
Cc: alex@ghiti.fr, paul.walmsley@sifive.com, palmer@dabbelt.com,
	aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: Fix local irq restore when flags indicates irq disabled
Date: Tue, 18 Jun 2024 13:06:39 +0100	[thread overview]
Message-ID: <ZnF4T51VPhJ4C5su@J2N7QTR9R3> (raw)
In-Reply-To: <20240618103803.40578-1-luxu.kernel@bytedance.com>

On Tue, Jun 18, 2024 at 06:38:03PM +0800, Xu Lu wrote:
> When arch_local_irq_restore() is called with flags indicating irqs
> disabled, we need to clear SR_IE bit in CSR_STATUS, whereas current
> implementation based on csr_set() function only sets SR_IE bit of
> CSR_STATUS when SR_IE bit of flags is high and does nothing when
> SR_IE bit of flags is low.

That shouldn't matter; arch_local_irq_restore() should *never* be called
from a context with IRQs enabled, and so arch_local_irq_restore() never
needs to disable IRQs. Either it enables IRQs or it leaves IRQs
disabled, but it never needs to explicitly disable IRQs.

See CONFIG_DEBUG_IRQFLAGS and the commit that introduced it:

  997acaf6b4b59c6a ("lockdep: report broken irq restoration")

I don't believe this patch is necessary.

Mark.

> 
> This commit supplies csr clear operation when calling irq restore
> function with flags indicating irq disabled.
> 
> Fixes: 6d60b6ee0c97 ("RISC-V: Device, timer, IRQs, and the SBI")
> Signed-off-by: Xu Lu <luxu.kernel@bytedance.com>
> ---
>  arch/riscv/include/asm/irqflags.h | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/include/asm/irqflags.h b/arch/riscv/include/asm/irqflags.h
> index 6fd8cbfcfcc7..f3aad7bfadb7 100644
> --- a/arch/riscv/include/asm/irqflags.h
> +++ b/arch/riscv/include/asm/irqflags.h
> @@ -48,7 +48,10 @@ static inline int arch_irqs_disabled(void)
>  /* set interrupt enabled status */
>  static inline void arch_local_irq_restore(unsigned long flags)
>  {
> -	csr_set(CSR_STATUS, flags & SR_IE);
> +	if (flags & SR_IE)
> +		csr_set(CSR_STATUS, SR_IE);
> +	else
> +		csr_clear(CSR_STATUS, SR_IE);
>  }
>  
>  #endif /* _ASM_RISCV_IRQFLAGS_H */
> -- 
> 2.20.1
> 
> 

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: Mark Rutland <mark.rutland@arm.com>
To: Xu Lu <luxu.kernel@bytedance.com>
Cc: alex@ghiti.fr, paul.walmsley@sifive.com, palmer@dabbelt.com,
	aou@eecs.berkeley.edu, linux-riscv@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: Fix local irq restore when flags indicates irq disabled
Date: Tue, 18 Jun 2024 13:06:39 +0100	[thread overview]
Message-ID: <ZnF4T51VPhJ4C5su@J2N7QTR9R3> (raw)
In-Reply-To: <20240618103803.40578-1-luxu.kernel@bytedance.com>

On Tue, Jun 18, 2024 at 06:38:03PM +0800, Xu Lu wrote:
> When arch_local_irq_restore() is called with flags indicating irqs
> disabled, we need to clear SR_IE bit in CSR_STATUS, whereas current
> implementation based on csr_set() function only sets SR_IE bit of
> CSR_STATUS when SR_IE bit of flags is high and does nothing when
> SR_IE bit of flags is low.

That shouldn't matter; arch_local_irq_restore() should *never* be called
from a context with IRQs enabled, and so arch_local_irq_restore() never
needs to disable IRQs. Either it enables IRQs or it leaves IRQs
disabled, but it never needs to explicitly disable IRQs.

See CONFIG_DEBUG_IRQFLAGS and the commit that introduced it:

  997acaf6b4b59c6a ("lockdep: report broken irq restoration")

I don't believe this patch is necessary.

Mark.

> 
> This commit supplies csr clear operation when calling irq restore
> function with flags indicating irq disabled.
> 
> Fixes: 6d60b6ee0c97 ("RISC-V: Device, timer, IRQs, and the SBI")
> Signed-off-by: Xu Lu <luxu.kernel@bytedance.com>
> ---
>  arch/riscv/include/asm/irqflags.h | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/include/asm/irqflags.h b/arch/riscv/include/asm/irqflags.h
> index 6fd8cbfcfcc7..f3aad7bfadb7 100644
> --- a/arch/riscv/include/asm/irqflags.h
> +++ b/arch/riscv/include/asm/irqflags.h
> @@ -48,7 +48,10 @@ static inline int arch_irqs_disabled(void)
>  /* set interrupt enabled status */
>  static inline void arch_local_irq_restore(unsigned long flags)
>  {
> -	csr_set(CSR_STATUS, flags & SR_IE);
> +	if (flags & SR_IE)
> +		csr_set(CSR_STATUS, SR_IE);
> +	else
> +		csr_clear(CSR_STATUS, SR_IE);
>  }
>  
>  #endif /* _ASM_RISCV_IRQFLAGS_H */
> -- 
> 2.20.1
> 
> 

  reply	other threads:[~2024-06-18 12:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-18 10:38 [PATCH] riscv: Fix local irq restore when flags indicates irq disabled Xu Lu
2024-06-18 10:38 ` Xu Lu
2024-06-18 12:06 ` Mark Rutland [this message]
2024-06-18 12:06   ` Mark Rutland
  -- strict thread matches above, loose matches on Subject: below --
2024-06-18 10:36 Xu Lu
2023-07-25  7:05 Xu Lu
2023-07-25  7:05 ` Xu Lu
2023-08-09  6:05 ` Palmer Dabbelt
2023-08-09  6:05   ` Palmer Dabbelt
2023-07-24 13:27 luxu.kernel
2023-07-24 13:27 ` luxu.kernel
2023-07-24 13:42 ` Ben Dooks
2023-07-24 13:42   ` Ben Dooks
2023-07-24 14:03   ` Conor Dooley
2023-07-25  6:25     ` Xu Lu
2023-07-25  6:25       ` Xu Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZnF4T51VPhJ4C5su@J2N7QTR9R3 \
    --to=mark.rutland@arm.com \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=luxu.kernel@bytedance.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.