Message ID | 1478257718-14923-1-git-send-email-kda@linux-powerpc.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Hi Denis, On Fri, Nov 04, 2016 at 07:08:38AM -0400, Denis Kirjanov wrote: You can provide the config option with which this bug was found in the change log. I suppose you had enabled CONFIG_DEBUG_PREEMPT. > [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 > [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 > [ 67.700998] CPU: 13 PID: 7343 Comm: cat Not tainted 4.8.0-rc5-dirty #1 > [ 67.701038] Call Trace: > [ 67.701066] [c0000007d25b75b0] [c000000000971378] .dump_stack+0xe4/0x150 (unreliable) > [ 67.701153] [c0000007d25b7640] [c0000000005162e4] .check_preemption_disabled+0x134/0x150 > [ 67.701238] [c0000007d25b76e0] [c0000000007b63ac] .powernv_cpufreq_throttle_check+0x2c/0x710 > [ 67.701322] [c0000007d25b7790] [c0000000007b6d18] .powernv_cpufreq_target_index+0x288/0x360 > [ 67.701407] [c0000007d25b7870] [c0000000007acee4] .__cpufreq_driver_target+0x394/0x8c0 > [ 67.701491] [c0000007d25b7920] [c0000000007b22ac] .cpufreq_set+0x7c/0xd0 > [ 67.701565] [c0000007d25b79b0] [c0000000007adf50] .store_scaling_setspeed+0x80/0xc0 > [ 67.701650] [c0000007d25b7a40] [c0000000007ae270] .store+0xa0/0x100 > [ 67.701723] [c0000007d25b7ae0] [c0000000003566e8] .sysfs_kf_write+0x88/0xb0 > [ 67.701796] [c0000007d25b7b70] [c0000000003553b8] .kernfs_fop_write+0x178/0x260 > [ 67.701881] [c0000007d25b7c10] [c0000000002ac3cc] .__vfs_write+0x3c/0x1c0 > [ 67.701954] [c0000007d25b7cf0] [c0000000002ad584] .vfs_write+0xc4/0x230 > [ 67.702027] [c0000007d25b7d90] [c0000000002aeef8] .SyS_write+0x58/0x100 > [ 67.702101] [c0000007d25b7e30] [c00000000000bfec] system_call+0x38/0xfc > > Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org> > > v2: wrap powernv_cpufreq_throttle_check() > as suggested by Gautham R Shenoy Looks good otherwise. Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com> > --- > drivers/cpufreq/powernv-cpufreq.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c > index d3ffde8..112e0e2 100644 > --- a/drivers/cpufreq/powernv-cpufreq.c > +++ b/drivers/cpufreq/powernv-cpufreq.c > @@ -647,8 +647,15 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy, > if (unlikely(rebooting) && new_index != get_nominal_index()) > return 0; > > - if (!throttled) > + if (!throttled) { > + /* > + * we don't want to be preempted while > + * checking if the CPU frequency has been throttled > + */ > + preempt_disable(); > powernv_cpufreq_throttle_check(NULL); > + preempt_enable(); > + } > > cur_msec = jiffies_to_msecs(get_jiffies_64()); > > -- > 1.8.3.1 >
On Monday, November 7, 2016, Gautham R Shenoy <ego@linux.vnet.ibm.com> wrote: > Hi Denis, > > On Fri, Nov 04, 2016 at 07:08:38AM -0400, Denis Kirjanov wrote: > > You can provide the config option with which this bug was found in the > change log. I suppose you had enabled CONFIG_DEBUG_PREEMPT. > > that's why I put the comment > > [ 67.700897] BUG: using smp_processor_id() in preemptible > [00000000] code: cat/7343 > > [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 > > [ 67.700998] CPU: 13 PID: 7343 Comm: cat Not tainted > 4.8.0-rc5-dirty #1 > > [ 67.701038] Call Trace: > > [ 67.701066] [c0000007d25b75b0] [c000000000971378] > .dump_stack+0xe4/0x150 (unreliable) > > [ 67.701153] [c0000007d25b7640] [c0000000005162e4] > .check_preemption_disabled+0x134/0x150 > > [ 67.701238] [c0000007d25b76e0] [c0000000007b63ac] > .powernv_cpufreq_throttle_check+0x2c/0x710 > > [ 67.701322] [c0000007d25b7790] [c0000000007b6d18] > .powernv_cpufreq_target_index+0x288/0x360 > > [ 67.701407] [c0000007d25b7870] [c0000000007acee4] > .__cpufreq_driver_target+0x394/0x8c0 > > [ 67.701491] [c0000007d25b7920] [c0000000007b22ac] > .cpufreq_set+0x7c/0xd0 > > [ 67.701565] [c0000007d25b79b0] [c0000000007adf50] > .store_scaling_setspeed+0x80/0xc0 > > [ 67.701650] [c0000007d25b7a40] [c0000000007ae270] > .store+0xa0/0x100 > > [ 67.701723] [c0000007d25b7ae0] [c0000000003566e8] > .sysfs_kf_write+0x88/0xb0 > > [ 67.701796] [c0000007d25b7b70] [c0000000003553b8] > .kernfs_fop_write+0x178/0x260 > > [ 67.701881] [c0000007d25b7c10] [c0000000002ac3cc] > .__vfs_write+0x3c/0x1c0 > > [ 67.701954] [c0000007d25b7cf0] [c0000000002ad584] > .vfs_write+0xc4/0x230 > > [ 67.702027] [c0000007d25b7d90] [c0000000002aeef8] > .SyS_write+0x58/0x100 > > [ 67.702101] [c0000007d25b7e30] [c00000000000bfec] > system_call+0x38/0xfc > > > > Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org <javascript:;>> > > > > v2: wrap powernv_cpufreq_throttle_check() > > as suggested by Gautham R Shenoy > > Looks good otherwise. > > Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com <javascript:;>> > > > --- > > drivers/cpufreq/powernv-cpufreq.c | 9 ++++++++- > > 1 file changed, 8 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/cpufreq/powernv-cpufreq.c > b/drivers/cpufreq/powernv-cpufreq.c > > index d3ffde8..112e0e2 100644 > > --- a/drivers/cpufreq/powernv-cpufreq.c > > +++ b/drivers/cpufreq/powernv-cpufreq.c > > @@ -647,8 +647,15 @@ static int powernv_cpufreq_target_index(struct > cpufreq_policy *policy, > > if (unlikely(rebooting) && new_index != get_nominal_index()) > > return 0; > > > > - if (!throttled) > > + if (!throttled) { > > + /* > > + * we don't want to be preempted while > > + * checking if the CPU frequency has been throttled > > + */ > > + preempt_disable(); > > powernv_cpufreq_throttle_check(NULL); > > + preempt_enable(); > > + } > > > > cur_msec = jiffies_to_msecs(get_jiffies_64()); > > > > -- > > 1.8.3.1 > > > >
Denis Kirjanov <kda@linux-powerpc.org> writes: > [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 > [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 > [ 67.700998] CPU: 13 PID: 7343 Comm: cat Not tainted 4.8.0-rc5-dirty #1 > [ 67.701038] Call Trace: > [ 67.701066] [c0000007d25b75b0] [c000000000971378] .dump_stack+0xe4/0x150 (unreliable) > [ 67.701153] [c0000007d25b7640] [c0000000005162e4] .check_preemption_disabled+0x134/0x150 > [ 67.701238] [c0000007d25b76e0] [c0000000007b63ac] .powernv_cpufreq_throttle_check+0x2c/0x710 > [ 67.701322] [c0000007d25b7790] [c0000000007b6d18] .powernv_cpufreq_target_index+0x288/0x360 > [ 67.701407] [c0000007d25b7870] [c0000000007acee4] .__cpufreq_driver_target+0x394/0x8c0 > [ 67.701491] [c0000007d25b7920] [c0000000007b22ac] .cpufreq_set+0x7c/0xd0 > [ 67.701565] [c0000007d25b79b0] [c0000000007adf50] .store_scaling_setspeed+0x80/0xc0 > [ 67.701650] [c0000007d25b7a40] [c0000000007ae270] .store+0xa0/0x100 > [ 67.701723] [c0000007d25b7ae0] [c0000000003566e8] .sysfs_kf_write+0x88/0xb0 > [ 67.701796] [c0000007d25b7b70] [c0000000003553b8] .kernfs_fop_write+0x178/0x260 > [ 67.701881] [c0000007d25b7c10] [c0000000002ac3cc] .__vfs_write+0x3c/0x1c0 > [ 67.701954] [c0000007d25b7cf0] [c0000000002ad584] .vfs_write+0xc4/0x230 > [ 67.702027] [c0000007d25b7d90] [c0000000002aeef8] .SyS_write+0x58/0x100 > [ 67.702101] [c0000007d25b7e30] [c00000000000bfec] system_call+0x38/0xfc > > Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org> > > v2: wrap powernv_cpufreq_throttle_check() > as suggested by Gautham R Shenoy That should be below the "---". When did this break? cheers
On 11/7/16, Michael Ellerman <mpe@ellerman.id.au> wrote: > Denis Kirjanov <kda@linux-powerpc.org> writes: > >> [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] >> code: cat/7343 >> [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 >> [ 67.700998] CPU: 13 PID: 7343 Comm: cat Not tainted 4.8.0-rc5-dirty >> #1 >> [ 67.701038] Call Trace: >> [ 67.701066] [c0000007d25b75b0] [c000000000971378] >> .dump_stack+0xe4/0x150 (unreliable) >> [ 67.701153] [c0000007d25b7640] [c0000000005162e4] >> .check_preemption_disabled+0x134/0x150 >> [ 67.701238] [c0000007d25b76e0] [c0000000007b63ac] >> .powernv_cpufreq_throttle_check+0x2c/0x710 >> [ 67.701322] [c0000007d25b7790] [c0000000007b6d18] >> .powernv_cpufreq_target_index+0x288/0x360 >> [ 67.701407] [c0000007d25b7870] [c0000000007acee4] >> .__cpufreq_driver_target+0x394/0x8c0 >> [ 67.701491] [c0000007d25b7920] [c0000000007b22ac] >> .cpufreq_set+0x7c/0xd0 >> [ 67.701565] [c0000007d25b79b0] [c0000000007adf50] >> .store_scaling_setspeed+0x80/0xc0 >> [ 67.701650] [c0000007d25b7a40] [c0000000007ae270] >> .store+0xa0/0x100 >> [ 67.701723] [c0000007d25b7ae0] [c0000000003566e8] >> .sysfs_kf_write+0x88/0xb0 >> [ 67.701796] [c0000007d25b7b70] [c0000000003553b8] >> .kernfs_fop_write+0x178/0x260 >> [ 67.701881] [c0000007d25b7c10] [c0000000002ac3cc] >> .__vfs_write+0x3c/0x1c0 >> [ 67.701954] [c0000007d25b7cf0] [c0000000002ad584] >> .vfs_write+0xc4/0x230 >> [ 67.702027] [c0000007d25b7d90] [c0000000002aeef8] >> .SyS_write+0x58/0x100 >> [ 67.702101] [c0000007d25b7e30] [c00000000000bfec] >> system_call+0x38/0xfc >> >> Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org> >> >> v2: wrap powernv_cpufreq_throttle_check() >> as suggested by Gautham R Shenoy > > That should be below the "---". > > When did this break? I think that problem exists since commit 09a972d1620934142d30cfda455ffe429af751c4 ("cpufreq: powernv: Report cpu frequency throttling") but I can be wrong > > cheers >
Denis Kirjanov <kda@linux-powerpc.org> writes: > On 11/7/16, Michael Ellerman <mpe@ellerman.id.au> wrote: >> Denis Kirjanov <kda@linux-powerpc.org> writes: >>> [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 >>> [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 >> >> When did this break? > > I think that problem exists since commit > 09a972d1620934142d30cfda455ffe429af751c4 ("cpufreq: powernv: Report > cpu frequency throttling") but I can be wrong Yep that looks right to me, thanks. Gautham, how bad is the bug here, do we want to send this to stable? cheers
Hi Michael, On Tue, Nov 08, 2016 at 11:21:23AM +1100, Michael Ellerman wrote: > Denis Kirjanov <kda@linux-powerpc.org> writes: > > On 11/7/16, Michael Ellerman <mpe@ellerman.id.au> wrote: > >> Denis Kirjanov <kda@linux-powerpc.org> writes: > >>> [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 > >>> [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 > >> > >> When did this break? > > > > I think that problem exists since commit > > 09a972d1620934142d30cfda455ffe429af751c4 ("cpufreq: powernv: Report > > cpu frequency throttling") but I can be wrong > > Yep that looks right to me, thanks. > > Gautham, how bad is the bug here, do we want to send this to stable? Not so bad that it needs to be sent to stable immediately. On CONFIG_PREEMPT enabled systems, if task executing powernv_cpufreq_throttle_check can be switched to a CPU on a different chip, then we will end up incorrectly attributing the throttle statistics of the new chip to the chip where it previously ran. These throttle statistics aren't used inside the kernel for any computation, but are reported to the user via /sysfs for them to account for any variance during a benchmark run. It would be good to include this in the 4.9 fixes though. > > cheers >
Gautham R Shenoy <ego@linux.vnet.ibm.com> writes: > On Tue, Nov 08, 2016 at 11:21:23AM +1100, Michael Ellerman wrote: >> Denis Kirjanov <kda@linux-powerpc.org> writes: >> > On 11/7/16, Michael Ellerman <mpe@ellerman.id.au> wrote: >> >> Denis Kirjanov <kda@linux-powerpc.org> writes: >> >>> [ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 >> >>> [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 >> >> >> >> When did this break? >> > >> > I think that problem exists since commit >> > 09a972d1620934142d30cfda455ffe429af751c4 ("cpufreq: powernv: Report >> > cpu frequency throttling") but I can be wrong >> >> Yep that looks right to me, thanks. >> >> Gautham, how bad is the bug here, do we want to send this to stable? > > Not so bad that it needs to be sent to stable immediately. > > On CONFIG_PREEMPT enabled systems, if task executing > powernv_cpufreq_throttle_check can be switched to a CPU on a different > chip, then we will end up incorrectly attributing the throttle > statistics of the new chip to the chip where it previously ran. These > throttle statistics aren't used inside the kernel for any computation, > but are reported to the user via /sysfs for them to account for any > variance during a benchmark run. OK. > It would be good to include this in the 4.9 fixes though. Normally I'd say by about rc5 that if it's not important enough for stable then it can wait for next (or it fixes a bug introduced in the current release). But I just realised it's actually in drivers/cpufreq/powernv-cpufreq.c, which goes via Raphael, so it's up to him. And he's not on CC :/ Denis can you resend and CC the cpufreq folks: rjw@rjwysocki.net viresh.kumar@linaro.org linux-pm@vger.kernel.org And add: Fixes: 09a972d16209 ("cpufreq: powernv: Report cpu frequency throttling") And fixup the subject to be: cpufreq, powernv: Disable preemption while checking CPU throttling state Thanks. cheers
diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c index d3ffde8..112e0e2 100644 --- a/drivers/cpufreq/powernv-cpufreq.c +++ b/drivers/cpufreq/powernv-cpufreq.c @@ -647,8 +647,15 @@ static int powernv_cpufreq_target_index(struct cpufreq_policy *policy, if (unlikely(rebooting) && new_index != get_nominal_index()) return 0; - if (!throttled) + if (!throttled) { + /* + * we don't want to be preempted while + * checking if the CPU frequency has been throttled + */ + preempt_disable(); powernv_cpufreq_throttle_check(NULL); + preempt_enable(); + } cur_msec = jiffies_to_msecs(get_jiffies_64());
[ 67.700897] BUG: using smp_processor_id() in preemptible [00000000] code: cat/7343 [ 67.700988] caller is .powernv_cpufreq_throttle_check+0x2c/0x710 [ 67.700998] CPU: 13 PID: 7343 Comm: cat Not tainted 4.8.0-rc5-dirty #1 [ 67.701038] Call Trace: [ 67.701066] [c0000007d25b75b0] [c000000000971378] .dump_stack+0xe4/0x150 (unreliable) [ 67.701153] [c0000007d25b7640] [c0000000005162e4] .check_preemption_disabled+0x134/0x150 [ 67.701238] [c0000007d25b76e0] [c0000000007b63ac] .powernv_cpufreq_throttle_check+0x2c/0x710 [ 67.701322] [c0000007d25b7790] [c0000000007b6d18] .powernv_cpufreq_target_index+0x288/0x360 [ 67.701407] [c0000007d25b7870] [c0000000007acee4] .__cpufreq_driver_target+0x394/0x8c0 [ 67.701491] [c0000007d25b7920] [c0000000007b22ac] .cpufreq_set+0x7c/0xd0 [ 67.701565] [c0000007d25b79b0] [c0000000007adf50] .store_scaling_setspeed+0x80/0xc0 [ 67.701650] [c0000007d25b7a40] [c0000000007ae270] .store+0xa0/0x100 [ 67.701723] [c0000007d25b7ae0] [c0000000003566e8] .sysfs_kf_write+0x88/0xb0 [ 67.701796] [c0000007d25b7b70] [c0000000003553b8] .kernfs_fop_write+0x178/0x260 [ 67.701881] [c0000007d25b7c10] [c0000000002ac3cc] .__vfs_write+0x3c/0x1c0 [ 67.701954] [c0000007d25b7cf0] [c0000000002ad584] .vfs_write+0xc4/0x230 [ 67.702027] [c0000007d25b7d90] [c0000000002aeef8] .SyS_write+0x58/0x100 [ 67.702101] [c0000007d25b7e30] [c00000000000bfec] system_call+0x38/0xfc Signed-off-by: Denis Kirjanov <kda@linux-powerpc.org> v2: wrap powernv_cpufreq_throttle_check() as suggested by Gautham R Shenoy --- drivers/cpufreq/powernv-cpufreq.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)