* [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region @ 2011-06-14 23:06 Cliff Wickman 2011-06-15 6:05 ` Rakib Mullick 0 siblings, 1 reply; 9+ messages in thread From: Cliff Wickman @ 2011-06-14 23:06 UTC (permalink / raw) To: linux-kernel; +Cc: mingo From: Cliff Wickman <cpw@sgi.com> Calling smp_processor_id() from within a preemptable region will issue a warning if DEBUG_PREEMPT is set. Diffed against 3.0.0-rc3 Signed-off-by: Cliff Wickman <cpw@sgi.com> --- arch/x86/platform/uv/tlb_uv.c | 2 ++ 1 file changed, 2 insertions(+) Index: linux/arch/x86/platform/uv/tlb_uv.c =================================================================== --- linux.orig/arch/x86/platform/uv/tlb_uv.c +++ linux/arch/x86/platform/uv/tlb_uv.c @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil instr[count] = '\0'; + preempt_disable(); /* avoid DEBUG_PREEMPT warning */ bcp = &per_cpu(bau_control, smp_processor_id()); + preempt_enable_no_resched(); ret = parse_tunables_write(bcp, instr, count); if (ret) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-14 23:06 [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region Cliff Wickman @ 2011-06-15 6:05 ` Rakib Mullick 2011-06-15 13:52 ` Cliff Wickman 0 siblings, 1 reply; 9+ messages in thread From: Rakib Mullick @ 2011-06-15 6:05 UTC (permalink / raw) To: Cliff Wickman; +Cc: linux-kernel, mingo On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > From: Cliff Wickman <cpw@sgi.com> > > Calling smp_processor_id() from within a preemptable region will issue > a warning if DEBUG_PREEMPT is set. > > Diffed against 3.0.0-rc3 > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > --- > arch/x86/platform/uv/tlb_uv.c | 2 ++ > 1 file changed, 2 insertions(+) > > Index: linux/arch/x86/platform/uv/tlb_uv.c > =================================================================== > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > +++ linux/arch/x86/platform/uv/tlb_uv.c > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > instr[count] = '\0'; > > + preempt_disable(); /* avoid DEBUG_PREEMPT warning */ I think above code comment, "avoid DEBUG_PREEMPT warning" should be to something more meaningful. It's a BUG, if smp_processor_id() is called within preemptible context. So, we don't want to hit that BUG. > bcp = &per_cpu(bau_control, smp_processor_id()); > + preempt_enable_no_resched(); > > ret = parse_tunables_write(bcp, instr, count); > if (ret) > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 6:05 ` Rakib Mullick @ 2011-06-15 13:52 ` Cliff Wickman 2011-06-15 15:54 ` Ingo Molnar 0 siblings, 1 reply; 9+ messages in thread From: Cliff Wickman @ 2011-06-15 13:52 UTC (permalink / raw) To: Rakib Mullick; +Cc: linux-kernel, mingo On Wed, Jun 15, 2011 at 12:05:17PM +0600, Rakib Mullick wrote: > On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > > From: Cliff Wickman <cpw@sgi.com> > > > > Calling smp_processor_id() from within a preemptable region will issue > > a warning if DEBUG_PREEMPT is set. > > > > Diffed against 3.0.0-rc3 > > > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > > --- > > ?arch/x86/platform/uv/tlb_uv.c | ? ?2 ++ > > ?1 file changed, 2 insertions(+) > > > > Index: linux/arch/x86/platform/uv/tlb_uv.c > > =================================================================== > > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > > +++ linux/arch/x86/platform/uv/tlb_uv.c > > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > > > ? ? ? ?instr[count] = '\0'; > > > > + ? ? ? preempt_disable(); /* avoid DEBUG_PREEMPT warning */ > > I think above code comment, "avoid DEBUG_PREEMPT warning" should be to > something more meaningful. It's a BUG, if smp_processor_id() is called > within preemptible context. So, we don't want to hit that BUG. I agree that calling smp_processor_id() within a preemptible context is going to produce unpredictable results. In this particular case we just need a valid cpu number so that we can find a per-cpu structure. That structure contains a reasonable (sanity-checking) limit to the value of the tunable that is being written. It is possible that the found per-cpu structure could differ from cpu to cpu. But if this tunable is thus caused to be set too high, a 'throttling' upper bound will not be enforced. No other harm is done. But yes, I should have noted that an ugly DEBUG_PREEMPT warning will be the worst effect. -Cliff > > > ? ? ? ?bcp = &per_cpu(bau_control, smp_processor_id()); > > + ? ? ? preempt_enable_no_resched(); > > > > ? ? ? ?ret = parse_tunables_write(bcp, instr, count); > > ? ? ? ?if (ret) > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at ?http://vger.kernel.org/majordomo-info.html > > Please read the FAQ at ?http://www.tux.org/lkml/ > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Cliff Wickman SGI cpw@sgi.com (651) 683-3824 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 13:52 ` Cliff Wickman @ 2011-06-15 15:54 ` Ingo Molnar 2011-06-15 16:07 ` Cliff Wickman 0 siblings, 1 reply; 9+ messages in thread From: Ingo Molnar @ 2011-06-15 15:54 UTC (permalink / raw) To: Cliff Wickman Cc: Rakib Mullick, linux-kernel, Thomas Gleixner, H. Peter Anvin * Cliff Wickman <cpw@sgi.com> wrote: > On Wed, Jun 15, 2011 at 12:05:17PM +0600, Rakib Mullick wrote: > > On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > > > From: Cliff Wickman <cpw@sgi.com> > > > > > > Calling smp_processor_id() from within a preemptable region will issue > > > a warning if DEBUG_PREEMPT is set. > > > > > > Diffed against 3.0.0-rc3 > > > > > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > > > --- > > > ?arch/x86/platform/uv/tlb_uv.c | ? ?2 ++ > > > ?1 file changed, 2 insertions(+) > > > > > > Index: linux/arch/x86/platform/uv/tlb_uv.c > > > =================================================================== > > > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > > > +++ linux/arch/x86/platform/uv/tlb_uv.c > > > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > > > > > ? ? ? ?instr[count] = '\0'; > > > > > > + ? ? ? preempt_disable(); /* avoid DEBUG_PREEMPT warning */ > > > > I think above code comment, "avoid DEBUG_PREEMPT warning" should be to > > something more meaningful. It's a BUG, if smp_processor_id() is called > > within preemptible context. So, we don't want to hit that BUG. > > I agree that calling smp_processor_id() within a preemptible context is > going to produce unpredictable results. In this particular case we just > need a valid cpu number so that we can find a per-cpu structure. > That structure contains a reasonable (sanity-checking) limit to the value > of the tunable that is being written. So what happens if the code gets preempted away and this CPU is hotplugged away? You'll reference a CPU ID that does not exist anymore. Thanks, Ingo ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 15:54 ` Ingo Molnar @ 2011-06-15 16:07 ` Cliff Wickman 2011-06-15 16:15 ` Ingo Molnar 0 siblings, 1 reply; 9+ messages in thread From: Cliff Wickman @ 2011-06-15 16:07 UTC (permalink / raw) To: Ingo Molnar; +Cc: linux-kernel Hi Ingo, On Wed, Jun 15, 2011 at 05:54:45PM +0200, Ingo Molnar wrote: > > * Cliff Wickman <cpw@sgi.com> wrote: > > > On Wed, Jun 15, 2011 at 12:05:17PM +0600, Rakib Mullick wrote: > > > On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > > > > From: Cliff Wickman <cpw@sgi.com> > > > > > > > > Calling smp_processor_id() from within a preemptable region will issue > > > > a warning if DEBUG_PREEMPT is set. > > > > > > > > Diffed against 3.0.0-rc3 > > > > > > > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > > > > --- > > > > ?arch/x86/platform/uv/tlb_uv.c | ? ?2 ++ > > > > ?1 file changed, 2 insertions(+) > > > > > > > > Index: linux/arch/x86/platform/uv/tlb_uv.c > > > > =================================================================== > > > > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > > > > +++ linux/arch/x86/platform/uv/tlb_uv.c > > > > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > > > > > > > ? ? ? ?instr[count] = '\0'; > > > > > > > > + ? ? ? preempt_disable(); /* avoid DEBUG_PREEMPT warning */ > > > > > > I think above code comment, "avoid DEBUG_PREEMPT warning" should be to > > > something more meaningful. It's a BUG, if smp_processor_id() is called > > > within preemptible context. So, we don't want to hit that BUG. > > > > I agree that calling smp_processor_id() within a preemptible context is > > going to produce unpredictable results. In this particular case we just > > need a valid cpu number so that we can find a per-cpu structure. > > That structure contains a reasonable (sanity-checking) limit to the value > > of the tunable that is being written. > > So what happens if the code gets preempted away and this CPU is > hotplugged away? You'll reference a CPU ID that does not exist > anymore. You're right of course. But we don't support CPU hotplug on the UV hardware. There are enhancements needed in both the BIOS and Linux (BAU and GRU among them). They are on our work queue. -Cliff -- Cliff Wickman SGI cpw@sgi.com (651) 683-3824 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 16:07 ` Cliff Wickman @ 2011-06-15 16:15 ` Ingo Molnar 2011-06-15 16:40 ` Cliff Wickman 0 siblings, 1 reply; 9+ messages in thread From: Ingo Molnar @ 2011-06-15 16:15 UTC (permalink / raw) To: Cliff Wickman; +Cc: linux-kernel, Thomas Gleixner, H. Peter Anvin * Cliff Wickman <cpw@sgi.com> wrote: > Hi Ingo, > > On Wed, Jun 15, 2011 at 05:54:45PM +0200, Ingo Molnar wrote: > > > > * Cliff Wickman <cpw@sgi.com> wrote: > > > > > On Wed, Jun 15, 2011 at 12:05:17PM +0600, Rakib Mullick wrote: > > > > On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > > > > > From: Cliff Wickman <cpw@sgi.com> > > > > > > > > > > Calling smp_processor_id() from within a preemptable region will issue > > > > > a warning if DEBUG_PREEMPT is set. > > > > > > > > > > Diffed against 3.0.0-rc3 > > > > > > > > > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > > > > > --- > > > > > ?arch/x86/platform/uv/tlb_uv.c | ? ?2 ++ > > > > > ?1 file changed, 2 insertions(+) > > > > > > > > > > Index: linux/arch/x86/platform/uv/tlb_uv.c > > > > > =================================================================== > > > > > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > > > > > +++ linux/arch/x86/platform/uv/tlb_uv.c > > > > > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > > > > > > > > > ? ? ? ?instr[count] = '\0'; > > > > > > > > > > + ? ? ? preempt_disable(); /* avoid DEBUG_PREEMPT warning */ > > > > > > > > I think above code comment, "avoid DEBUG_PREEMPT warning" should be to > > > > something more meaningful. It's a BUG, if smp_processor_id() is called > > > > within preemptible context. So, we don't want to hit that BUG. > > > > > > I agree that calling smp_processor_id() within a preemptible context is > > > going to produce unpredictable results. In this particular case we just > > > need a valid cpu number so that we can find a per-cpu structure. > > > That structure contains a reasonable (sanity-checking) limit to the value > > > of the tunable that is being written. > > > > So what happens if the code gets preempted away and this CPU is > > hotplugged away? You'll reference a CPU ID that does not exist > > anymore. > > You're right of course. But we don't support CPU hotplug on the UV > hardware. There are enhancements needed in both the BIOS and Linux > (BAU and GRU among them). They are on our work queue. But here you put in yet another roadblock. Thanks, Ingo ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 16:15 ` Ingo Molnar @ 2011-06-15 16:40 ` Cliff Wickman 2011-06-15 17:21 ` H. Peter Anvin 0 siblings, 1 reply; 9+ messages in thread From: Cliff Wickman @ 2011-06-15 16:40 UTC (permalink / raw) To: Ingo Molnar; +Cc: linux-kernel, Thomas Gleixner, H. Peter Anvin On Wed, Jun 15, 2011 at 06:15:18PM +0200, Ingo Molnar wrote: > > * Cliff Wickman <cpw@sgi.com> wrote: > > > Hi Ingo, > > > > On Wed, Jun 15, 2011 at 05:54:45PM +0200, Ingo Molnar wrote: > > > > > > * Cliff Wickman <cpw@sgi.com> wrote: > > > > > > > On Wed, Jun 15, 2011 at 12:05:17PM +0600, Rakib Mullick wrote: > > > > > On Wed, Jun 15, 2011 at 5:06 AM, Cliff Wickman <cpw@sgi.com> wrote: > > > > > > From: Cliff Wickman <cpw@sgi.com> > > > > > > > > > > > > Calling smp_processor_id() from within a preemptable region will issue > > > > > > a warning if DEBUG_PREEMPT is set. > > > > > > > > > > > > Diffed against 3.0.0-rc3 > > > > > > > > > > > > Signed-off-by: Cliff Wickman <cpw@sgi.com> > > > > > > --- > > > > > > ?arch/x86/platform/uv/tlb_uv.c | ? ?2 ++ > > > > > > ?1 file changed, 2 insertions(+) > > > > > > > > > > > > Index: linux/arch/x86/platform/uv/tlb_uv.c > > > > > > =================================================================== > > > > > > --- linux.orig/arch/x86/platform/uv/tlb_uv.c > > > > > > +++ linux/arch/x86/platform/uv/tlb_uv.c > > > > > > @@ -1334,7 +1334,9 @@ static ssize_t tunables_write(struct fil > > > > > > > > > > > > ? ? ? ?instr[count] = '\0'; > > > > > > > > > > > > + ? ? ? preempt_disable(); /* avoid DEBUG_PREEMPT warning */ > > > > > > > > > > I think above code comment, "avoid DEBUG_PREEMPT warning" should be to > > > > > something more meaningful. It's a BUG, if smp_processor_id() is called > > > > > within preemptible context. So, we don't want to hit that BUG. > > > > > > > > I agree that calling smp_processor_id() within a preemptible context is > > > > going to produce unpredictable results. In this particular case we just > > > > need a valid cpu number so that we can find a per-cpu structure. > > > > That structure contains a reasonable (sanity-checking) limit to the value > > > > of the tunable that is being written. > > > > > > So what happens if the code gets preempted away and this CPU is > > > hotplugged away? You'll reference a CPU ID that does not exist > > > anymore. > > > > You're right of course. But we don't support CPU hotplug on the UV > > hardware. There are enhancements needed in both the BIOS and Linux > > (BAU and GRU among them). They are on our work queue. > > But here you put in yet another roadblock. So would you say I should really widen the scope of the non-preemptible region to include everything done with the results of that call to smp_processor_id()? Which in this case is the call to parse_tunables_write(). Like this: preempt_disable(); bcp = &per_cpu(bau_control, smp_processor_id()); ret = parse_tunables_write(bcp, instr, count); preempt_enable_no_resched(); -Cliff -- Cliff Wickman SGI cpw@sgi.com (651) 683-3824 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 16:40 ` Cliff Wickman @ 2011-06-15 17:21 ` H. Peter Anvin 2011-06-15 18:58 ` Cliff Wickman 0 siblings, 1 reply; 9+ messages in thread From: H. Peter Anvin @ 2011-06-15 17:21 UTC (permalink / raw) To: Cliff Wickman; +Cc: Ingo Molnar, linux-kernel, Thomas Gleixner On 06/15/2011 09:40 AM, Cliff Wickman wrote: > > So would you say I should really widen the scope of the non-preemptible > region to include everything done with the results of that call to > smp_processor_id()? > Which in this case is the call to parse_tunables_write(). > Like this: > > preempt_disable(); > bcp = &per_cpu(bau_control, smp_processor_id()); > > ret = parse_tunables_write(bcp, instr, count); > preempt_enable_no_resched(); > Funny enough, this is such a common pattern that we have helpers for it. We call this get_cpu() ... put_cpu(). -hpa ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region 2011-06-15 17:21 ` H. Peter Anvin @ 2011-06-15 18:58 ` Cliff Wickman 0 siblings, 0 replies; 9+ messages in thread From: Cliff Wickman @ 2011-06-15 18:58 UTC (permalink / raw) To: H. Peter Anvin; +Cc: Ingo Molnar, linux-kernel, Thomas Gleixner On Wed, Jun 15, 2011 at 10:21:42AM -0700, H. Peter Anvin wrote: > On 06/15/2011 09:40 AM, Cliff Wickman wrote: > > > > So would you say I should really widen the scope of the non-preemptible > > region to include everything done with the results of that call to > > smp_processor_id()? > > Which in this case is the call to parse_tunables_write(). > > Like this: > > > > preempt_disable(); > > bcp = &per_cpu(bau_control, smp_processor_id()); > > > > ret = parse_tunables_write(bcp, instr, count); > > preempt_enable_no_resched(); > > > > Funny enough, this is such a common pattern that we have helpers for it. > We call this get_cpu() ... put_cpu(). > > -hpa OK thanks. I'll use them. I'll fix that patch (1 of 8) and refresh/resend the whole series after a little time to allow for more reviews of the others. -Cliff -- Cliff Wickman SGI cpw@sgi.com (651) 683-3824 ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-06-15 18:56 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-06-14 23:06 [PATCH 1 of 6] x86, UV: smp_processor_id in a preemptable region Cliff Wickman 2011-06-15 6:05 ` Rakib Mullick 2011-06-15 13:52 ` Cliff Wickman 2011-06-15 15:54 ` Ingo Molnar 2011-06-15 16:07 ` Cliff Wickman 2011-06-15 16:15 ` Ingo Molnar 2011-06-15 16:40 ` Cliff Wickman 2011-06-15 17:21 ` H. Peter Anvin 2011-06-15 18:58 ` Cliff Wickman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox