Re: Make vmstat deferrable again (was Re: [PATCH] mm,vmscan: Use accurate values for zone_reclaimable() checks)
From: Sergey Senozhatsky
Date: Fri Oct 23 2015 - 10:50:53 EST
On (10/23/15 09:12), Christoph Lameter wrote:
[..]
> > > + if (!cpumask_test_and_set_cpu(smp_processor_id(), cpu_stat_off))
> > > + cancel_delayed_work(this_cpu_ptr(&vmstat_work));
> >
> > shouldn't preemption be disable for smp_processor_id() here?
>
> Preemption is disabled when quiet_vmstat() is called.
>
cond_resched()
[ 29.607725] BUG: sleeping function called from invalid context at mm/vmstat.c:487
[ 29.607729] in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/7
[ 29.607731] no locks held by swapper/7/0.
[ 29.607732] irq event stamp: 48932
[ 29.607733] hardirqs last enabled at (48931): [<ffffffff813b246a>] _raw_spin_unlock_irq+0x2c/0x37
[ 29.607739] hardirqs last disabled at (48932): [<ffffffff810a3fec>] tick_nohz_idle_enter+0x3c/0x5f
[ 29.607743] softirqs last enabled at (48924): [<ffffffff81041fd8>] __do_softirq+0x2bb/0x3a9
[ 29.607747] softirqs last disabled at (48893): [<ffffffff810422a7>] irq_exit+0x41/0x95
[ 29.607752] CPU: 7 PID: 0 Comm: swapper/7 Not tainted 4.3.0-rc6-next-20151022-dbg-00003-g01184ff-dirty #261
[ 29.607754] 0000000000000000 ffff88041dae7da0 ffffffff811dd4f3 ffff88041dacd100
[ 29.607756] ffff88041dae7dc8 ffffffff8105f144 ffffffff8169f800 0000000000000000
[ 29.607759] 0000000000000007 ffff88041dae7e70 ffffffff811040b1 0000000000000002
[ 29.607761] Call Trace:
[ 29.607767] [<ffffffff811dd4f3>] dump_stack+0x4b/0x63
[ 29.607770] [<ffffffff8105f144>] ___might_sleep+0x1e7/0x1ee
[ 29.607773] [<ffffffff811040b1>] refresh_cpu_vm_stats+0x8b/0xb5
[ 29.607776] [<ffffffff81104f4c>] quiet_vmstat+0x3a/0x41
[ 29.607778] [<ffffffff810a3ccf>] __tick_nohz_idle_enter+0x292/0x410
[ 29.607781] [<ffffffff810a4007>] tick_nohz_idle_enter+0x57/0x5f
[ 29.607784] [<ffffffff81076d8b>] cpu_startup_entry+0x36/0x330
[ 29.607788] [<ffffffff81028821>] start_secondary+0xf3/0xf6
by the way, tick_nohz_stop_sched_tick() receives cpu from __tick_nohz_idle_enter().
do you want to pass it to quiet_vmstat()?
if (!ts->tick_stopped) {
nohz_balance_enter_idle(cpu);
- quiet_vmstat();
+ quiet_vmstat(cpu);
calc_load_enter_idle();
-ss
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/