From: Vineet Gupta <vgupta@synopsys.com> To: Peter Zijlstra <peterz@infradead.org> Cc: "gilf@ezchip.com" <gilf@ezchip.com>, "talz@ezchip.com" <talz@ezchip.com>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "cmetcalf@ezchip.com" <cmetcalf@ezchip.com>, Noam Camus <noamc@ezchip.com>, "linux-snps-arc@lists.infradead.org" <linux-snps-arc@lists.infradead.org> Subject: Re: [PATCH v2 16/19] ARC: [plat-eznps] Use dedicated cpu_relax() Date: Mon, 9 Nov 2015 17:57:25 +0530 [thread overview] Message-ID: <5640912D.3010504@synopsys.com> (raw) In-Reply-To: <20151109104533.GT3604@twins.programming.kicks-ass.net> On Monday 09 November 2015 04:15 PM, Peter Zijlstra wrote: > On Mon, Nov 09, 2015 at 10:22:27AM +0000, Vineet Gupta wrote: >> On Monday 09 November 2015 03:35 PM, Peter Zijlstra wrote: >>> On Sat, Nov 07, 2015 at 12:52:34PM +0200, Noam Camus wrote: >>>> diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h >>>> index 7266ede..50f9bae 100644 >>>> --- a/arch/arc/include/asm/processor.h >>>> +++ b/arch/arc/include/asm/processor.h >>>> @@ -58,12 +58,21 @@ struct task_struct; >>>> * get optimised away by gcc >>>> */ >>>> #ifdef CONFIG_SMP >>>> +#ifndef CONFIG_EZNPS_MTM_EXT >>>> #define cpu_relax() __asm__ __volatile__ ("" : : : "memory") >>>> #else >>>> +#define cpu_relax() \ >>>> + __asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory") >>>> +#endif >>>> +#else >>>> #define cpu_relax() do { } while (0) >>> I'm fairly sure this is incorrect. Even on UP we expect cpu_relax() to >>> be a compiler barrier. >> >> We discussed this a while back (why do https:/lkml.org/lkml/<year>/.... links work >> psuedo randomly) >> >> http://marc.info/?l=linux-kernel&m=140350765530113 > > Hurm.. you have a better memory than me ;-) > > So in general we assume cpu_relax() implies a barrier() and I think we > have loops like: > > while (!var) > cpu_relax(); > > where var isn't volatile (or casted using READ_ONCE etc). > > See for instance: kernel/time/timer.c:lock_timer_base() which has: > > for (;;) { > u32 tf = timer->flags; > > if (!(tf & TIMER_MIGRATING)) { > ... > } > > cpu_relax(); > } > > So while TIMER_MIGRATING is set, it will only ever do regular loads, > which GCC is permitted to lift out if cpu_relax() is not a barrier. I'll just bite the bullet and make it a compiler barrier and send Linus way in 4.4. Care to provide an Ack or some such. --------------------> >From e29de8efa621b825891dcc744c84965b38f6b868 Mon Sep 17 00:00:00 2001 From: Vineet Gupta <vgupta@synopsys.com> Date: Mon, 9 Nov 2015 17:48:34 +0530 Subject: [PATCH] ARC: cpu_relax() to be compiler barrier even for UP cpu_relax() on ARC has been barrier only for SMP (and no-op for UP). Per recent discussions, it is safer to make it a compiler barrier unconditionally. Link: http://lkml.kernel.org/r/53A7D3AA.9020100@synopsys.com Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Vineet Gupta <vgupta@synopsys.com> --- arch/arc/include/asm/processor.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h index 44545354e9e8..1d694c1ef6d6 100644 --- a/arch/arc/include/asm/processor.h +++ b/arch/arc/include/asm/processor.h @@ -57,11 +57,7 @@ struct task_struct; * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise * get optimised away by gcc */ -#ifdef CONFIG_SMP #define cpu_relax() __asm__ __volatile__ ("" : : : "memory") -#else -#define cpu_relax() do { } while (0) -#endif #define cpu_relax_lowlatency() cpu_relax() -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: vgupta@synopsys.com (Vineet Gupta) To: linux-snps-arc@lists.infradead.org Subject: [PATCH v2 16/19] ARC: [plat-eznps] Use dedicated cpu_relax() Date: Mon, 9 Nov 2015 17:57:25 +0530 [thread overview] Message-ID: <5640912D.3010504@synopsys.com> (raw) In-Reply-To: <20151109104533.GT3604@twins.programming.kicks-ass.net> On Monday 09 November 2015 04:15 PM, Peter Zijlstra wrote: > On Mon, Nov 09, 2015@10:22:27AM +0000, Vineet Gupta wrote: >> On Monday 09 November 2015 03:35 PM, Peter Zijlstra wrote: >>> On Sat, Nov 07, 2015@12:52:34PM +0200, Noam Camus wrote: >>>> diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h >>>> index 7266ede..50f9bae 100644 >>>> --- a/arch/arc/include/asm/processor.h >>>> +++ b/arch/arc/include/asm/processor.h >>>> @@ -58,12 +58,21 @@ struct task_struct; >>>> * get optimised away by gcc >>>> */ >>>> #ifdef CONFIG_SMP >>>> +#ifndef CONFIG_EZNPS_MTM_EXT >>>> #define cpu_relax() __asm__ __volatile__ ("" : : : "memory") >>>> #else >>>> +#define cpu_relax() \ >>>> + __asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory") >>>> +#endif >>>> +#else >>>> #define cpu_relax() do { } while (0) >>> I'm fairly sure this is incorrect. Even on UP we expect cpu_relax() to >>> be a compiler barrier. >> >> We discussed this a while back (why do https:/lkml.org/lkml/<year>/.... links work >> psuedo randomly) >> >> http://marc.info/?l=linux-kernel&m=140350765530113 > > Hurm.. you have a better memory than me ;-) > > So in general we assume cpu_relax() implies a barrier() and I think we > have loops like: > > while (!var) > cpu_relax(); > > where var isn't volatile (or casted using READ_ONCE etc). > > See for instance: kernel/time/timer.c:lock_timer_base() which has: > > for (;;) { > u32 tf = timer->flags; > > if (!(tf & TIMER_MIGRATING)) { > ... > } > > cpu_relax(); > } > > So while TIMER_MIGRATING is set, it will only ever do regular loads, > which GCC is permitted to lift out if cpu_relax() is not a barrier. I'll just bite the bullet and make it a compiler barrier and send Linus way in 4.4. Care to provide an Ack or some such. --------------------> >From e29de8efa621b825891dcc744c84965b38f6b868 Mon Sep 17 00:00:00 2001 From: Vineet Gupta <vgupta@synopsys.com> Date: Mon, 9 Nov 2015 17:48:34 +0530 Subject: [PATCH] ARC: cpu_relax() to be compiler barrier even for UP cpu_relax() on ARC has been barrier only for SMP (and no-op for UP). Per recent discussions, it is safer to make it a compiler barrier unconditionally. Link: http://lkml.kernel.org/r/53A7D3AA.9020100 at synopsys.com Cc: Peter Zijlstra <peterz at infradead.org> Signed-off-by: Vineet Gupta <vgupta at synopsys.com> --- arch/arc/include/asm/processor.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h index 44545354e9e8..1d694c1ef6d6 100644 --- a/arch/arc/include/asm/processor.h +++ b/arch/arc/include/asm/processor.h @@ -57,11 +57,7 @@ struct task_struct; * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise * get optimised away by gcc */ -#ifdef CONFIG_SMP #define cpu_relax() __asm__ __volatile__ ("" : : : "memory") -#else -#define cpu_relax() do { } while (0) -#endif #define cpu_relax_lowlatency() cpu_relax() -- 1.9.1
next prev parent reply other threads:[~2015-11-09 12:27 UTC|newest] Thread overview: 190+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-10-31 13:15 [PATCH v1 00/20] eznps a new ARC platform Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 01/20] Documentation: Add EZchip vendor to binding list Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 02/20] clocksource: Add NPS400 timers driver Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-01 20:44 ` Daniel Lezcano 2015-11-01 20:44 ` Daniel Lezcano 2015-11-02 7:57 ` Noam Camus 2015-11-02 7:57 ` Noam Camus 2015-11-02 11:03 ` Vineet Gupta 2015-11-02 11:03 ` Vineet Gupta 2015-11-03 15:18 ` Noam Camus 2015-11-03 15:18 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 03/20] irqchip: add nps Internal and external irqchips Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 04/20] ARC: Set vmalloc size from configuration Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 05/20] ARC: rwlock: disable interrupts in !LLSC variant Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 9:16 ` Peter Zijlstra 2015-11-02 9:16 ` Peter Zijlstra 2015-11-02 9:42 ` Vineet Gupta 2015-11-02 9:42 ` Vineet Gupta 2015-11-02 10:03 ` Peter Zijlstra 2015-11-02 10:03 ` Peter Zijlstra 2015-10-31 13:15 ` [PATCH v1 06/20] ARC: Mark cpu online only after it has executed the per cpu init hook Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 07/20] ARC: mm: use generic macros _BITUL() Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 6:23 ` Vineet Gupta 2015-11-02 6:23 ` Vineet Gupta 2015-11-02 6:27 ` Noam Camus 2015-11-02 6:27 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 08/20] ARC: Use res_service as entry point for secondaries Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 6:38 ` Vineet Gupta 2015-11-02 6:38 ` Vineet Gupta 2015-11-02 8:05 ` Noam Camus 2015-11-02 8:05 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 09/20] ARC: add CONFIG_CLKSRC_OF support to time_init() Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 6:32 ` Vineet Gupta 2015-11-02 6:32 ` Vineet Gupta 2015-10-31 13:15 ` [PATCH v1 10/20] ARC: [plat-eznps] Add eznps board defconfig and dts Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 11/20] ARC: [plat-eznps] Add eznps platform Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 10:56 ` Vineet Gupta 2015-11-02 10:56 ` Vineet Gupta 2015-11-03 15:59 ` Noam Camus 2015-11-03 15:59 ` Noam Camus 2015-11-04 12:38 ` Noam Camus 2015-11-04 12:38 ` Noam Camus 2015-11-05 5:09 ` Vineet Gupta 2015-11-05 5:09 ` Vineet Gupta 2015-10-31 13:15 ` [PATCH v1 12/20] ARC: [plat-eznps] Use dedicated user stack top Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 13/20] ARC: [plat-eznps] Use dedicated bitops/atomic/cmpxchg Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 11:56 ` Vineet Gupta 2015-11-02 11:56 ` Vineet Gupta 2015-10-31 13:15 ` [PATCH v1 14/20] ARC: [plat-eznps] Use dedicated SMP barriers Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 8:02 ` Vineet Gupta 2015-11-02 8:02 ` Vineet Gupta 2015-11-02 13:08 ` Noam Camus 2015-11-02 13:08 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 15/20] ARC: [plat-eznps] Use dedicated identity auxiliary register Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 16/20] ARC: [plat-eznps] Use dedicated cpu_relax() Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 7:54 ` Vineet Gupta 2015-11-02 7:54 ` Vineet Gupta 2015-11-02 9:21 ` Peter Zijlstra 2015-11-02 9:21 ` Peter Zijlstra 2015-11-03 14:02 ` Noam Camus 2015-11-03 14:02 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 17/20] ARC: [plat-eznps] Use dedicated COMMAND_LINE_SIZE Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 18/20] ARC: [plat-eznps] define IPI_IRQ Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 7:52 ` Vineet Gupta 2015-11-02 7:52 ` Vineet Gupta 2015-11-02 12:16 ` Noam Camus 2015-11-02 12:16 ` Noam Camus 2015-10-31 13:15 ` [PATCH v1 19/20] ARC: [plat-eznps] replace sync with proper cpu barrier Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 7:48 ` Vineet Gupta 2015-11-02 7:48 ` Vineet Gupta 2015-11-02 9:26 ` Peter Zijlstra 2015-11-02 9:26 ` Peter Zijlstra 2015-11-17 13:48 ` [PATCH] ARC: remove SYNC from __switch_to() Vineet Gupta 2015-11-17 13:48 ` Vineet Gupta 2015-10-31 13:15 ` [PATCH v1 20/20] ARC: Add eznps platform to Kconfig and Makefile Noam Camus 2015-10-31 13:15 ` Noam Camus 2015-11-02 11:06 ` Vineet Gupta 2015-11-02 11:06 ` Vineet Gupta 2015-11-03 15:32 ` Noam Camus 2015-11-03 15:32 ` Noam Camus 2015-11-04 15:35 ` [PATCH v1 00/20] eznps a new ARC platform Vineet Gupta 2015-11-04 15:35 ` Vineet Gupta 2015-11-04 15:53 ` Noam Camus 2015-11-04 15:53 ` Noam Camus 2015-11-04 17:42 ` Vineet Gupta 2015-11-04 17:42 ` Vineet Gupta 2015-11-07 10:52 ` [PATCH v2 00/19] " Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 01/19] Documentation: Add EZchip vendor to binding list Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 02/19] ARC: [plat-eznps] define IPI_IRQ Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 03/19] clocksource: Add NPS400 timers driver Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 11:26 ` Thomas Gleixner 2015-11-07 11:26 ` Thomas Gleixner 2015-11-20 11:59 ` Noam Camus 2015-11-20 11:59 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 04/19] irqchip: add nps Internal and external irqchips Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 11:38 ` Thomas Gleixner 2015-11-07 11:38 ` Thomas Gleixner 2015-11-07 20:52 ` Noam Camus 2015-11-07 20:52 ` Noam Camus 2015-11-07 23:52 ` Thomas Gleixner 2015-11-07 23:52 ` Thomas Gleixner 2015-11-07 10:52 ` [PATCH v2 05/19] ARC: Set vmalloc size from configuration Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 06/19] ARC: rwlock: disable interrupts in !LLSC variant Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 07/19] ARC: rename smp operation init_irq_cpu() to init_per_cpu() Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-17 11:15 ` Vineet Gupta 2015-11-17 11:15 ` Vineet Gupta 2015-11-17 11:38 ` Noam Camus 2015-11-17 11:38 ` Noam Camus 2015-11-17 11:42 ` Vineet Gupta 2015-11-17 11:42 ` Vineet Gupta 2015-11-07 10:52 ` [PATCH v2 08/19] ARC: Mark secondary cpu online only after all HW setup is done Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-17 11:17 ` Vineet Gupta 2015-11-17 11:17 ` Vineet Gupta 2015-11-07 10:52 ` [PATCH v2 09/19] ARC: add CONFIG_CLKSRC_OF support to time_init() Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 10/19] ARC: [plat-eznps] Add eznps board defconfig and dts Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 11/19] ARC: [plat-eznps] Add eznps platform Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 12/19] ARC: [plat-eznps] Use dedicated user stack top Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 13/19] ARC: [plat-eznps] Use dedicated atomic/bitops/cmpxchg Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 14/19] ARC: [plat-eznps] Use dedicated SMP barriers Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 15/19] ARC: [plat-eznps] Use dedicated identity auxiliary register Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 16/19] ARC: [plat-eznps] Use dedicated cpu_relax() Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-09 10:05 ` Peter Zijlstra 2015-11-09 10:05 ` Peter Zijlstra 2015-11-09 10:22 ` Vineet Gupta 2015-11-09 10:22 ` Vineet Gupta 2015-11-09 10:45 ` Peter Zijlstra 2015-11-09 10:45 ` Peter Zijlstra 2015-11-09 12:27 ` Vineet Gupta [this message] 2015-11-09 12:27 ` Vineet Gupta 2015-11-09 12:51 ` Peter Zijlstra 2015-11-09 12:51 ` Peter Zijlstra 2015-11-07 10:52 ` [PATCH v2 17/19] ARC: [plat-eznps] Use dedicated COMMAND_LINE_SIZE Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-07 10:52 ` [PATCH v2 18/19] ARC: [plat-eznps] replace sync with proper cpu barrier Noam Camus 2015-11-07 10:52 ` Noam Camus 2015-11-17 11:12 ` Vineet Gupta 2015-11-17 11:12 ` Vineet Gupta 2015-11-17 11:23 ` Peter Zijlstra 2015-11-17 11:23 ` Peter Zijlstra 2015-11-17 11:37 ` Vineet Gupta 2015-11-17 11:37 ` Vineet Gupta 2015-11-17 12:22 ` Peter Zijlstra 2015-11-17 12:22 ` Peter Zijlstra 2015-11-17 12:37 ` Vineet Gupta 2015-11-17 12:37 ` Vineet Gupta 2015-11-17 12:44 ` Peter Zijlstra 2015-11-17 12:44 ` Peter Zijlstra 2015-11-17 13:32 ` Vineet Gupta 2015-11-17 13:32 ` Vineet Gupta 2015-11-17 13:59 ` Peter Zijlstra 2015-11-17 13:59 ` Peter Zijlstra 2015-11-07 10:52 ` [PATCH v2 19/19] ARC: Add eznps platform to Kconfig and Makefile Noam Camus 2015-11-07 10:52 ` Noam Camus
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=5640912D.3010504@synopsys.com \ --to=vgupta@synopsys.com \ --cc=cmetcalf@ezchip.com \ --cc=gilf@ezchip.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-snps-arc@lists.infradead.org \ --cc=noamc@ezchip.com \ --cc=peterz@infradead.org \ --cc=talz@ezchip.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: linkBe 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.