Message ID | 20250113150933.65121-5-luxu.kernel@bytedance.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | riscv: irqchip: Optimization of interrupt handling | expand |
On Mon, Jan 13, 2025 at 8:39 PM Xu Lu <luxu.kernel@bytedance.com> wrote: > > During an IPI procedure, we need to ensure all previous write operations > are visible to other CPUs before sending a real IPI. We use wmb() barrier > to ensure this as CLINT issues IPI via mmio writes. > > Signed-off-by: Xu Lu <luxu.kernel@bytedance.com> > --- > drivers/clocksource/timer-clint.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/clocksource/timer-clint.c b/drivers/clocksource/timer-clint.c > index 0bdd9d7ec545..8d73b45f9966 100644 > --- a/drivers/clocksource/timer-clint.c > +++ b/drivers/clocksource/timer-clint.c > @@ -48,6 +48,12 @@ EXPORT_SYMBOL(clint_time_val); > #ifdef CONFIG_SMP > static void clint_send_ipi(unsigned int cpu) > { > + /* > + * Ensure that stores to normal memory are visible to the other CPUs > + * before issuing IPI. > + */ > + wmb(); > + Same comment as PATCH3. The clint_send_ipi() is called through ipi_mux_send_mask() which does smp_mb__after_atomic() before calling so no need for any barrier here. Also, barriers need to be in-pair so adding a single barrier at random location is inappropriate. (Refer, https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/kernel/irq/ipi-mux.c?h=v6.13-rc7#n78) Based on the above, this patch is not needed. Regards, Anup
diff --git a/drivers/clocksource/timer-clint.c b/drivers/clocksource/timer-clint.c index 0bdd9d7ec545..8d73b45f9966 100644 --- a/drivers/clocksource/timer-clint.c +++ b/drivers/clocksource/timer-clint.c @@ -48,6 +48,12 @@ EXPORT_SYMBOL(clint_time_val); #ifdef CONFIG_SMP static void clint_send_ipi(unsigned int cpu) { + /* + * Ensure that stores to normal memory are visible to the other CPUs + * before issuing IPI. + */ + wmb(); + writel(1, clint_ipi_base + cpuid_to_hartid_map(cpu)); }
During an IPI procedure, we need to ensure all previous write operations are visible to other CPUs before sending a real IPI. We use wmb() barrier to ensure this as CLINT issues IPI via mmio writes. Signed-off-by: Xu Lu <luxu.kernel@bytedance.com> --- drivers/clocksource/timer-clint.c | 6 ++++++ 1 file changed, 6 insertions(+)