On Thu, 29 Mar 2018 11:32:44 -0500 (CDT) Christopher Lameter <cl@xxxxxxxxx> wrote: > Just saw > > commit c7f26ccfb2c31eb1bf810ba13d044fcf583232db > Author: Steven J. Hill <steven.hill@xxxxxxxxxx> > Date: Wed Mar 28 16:01:09 2018 -0700 > > mm/vmstat.c: fix vmstat_update() preemption BUG > > Attempting to hotplug CPUs with CONFIG_VM_EVENT_COUNTERS enabled can > cause vmstat_update() to report a BUG due to preemption not being > disabled around smp_processor_id(). > > > > The fix is wrong. > > vmstat_update cannot be moved to a differentprocessor and thus > preemption should be off. > > vmstat_update repeatedly accesses per cpu information. > > vmstat_update first checks if there are counter to be updated on the > current cpu and then updates the counters. This cannot happen if the > process can be moved to a different cpu. > > The patch "switches off" preemption after the check if there are changes > to the local per cpu counter. > > Lets find out what changed in the callers of vmstat_update() that caused > the BUG to be triggered. Yup. Please see the discussion at http://lkml.kernel.org/r/1520881552-25659-1-git-send-email-steven.hill@xxxxxxxxxx - I'm suspecting that it's a shortcoming in check_preemption_disabled(). But check_preemption_disabled() does indeed check to see if the CPU is pinned to a single CPU so that explanation doesn't fly. Maybe it's a glitch in the MIPS port - the fact that it's triggered by CPU hotplugging makes me wonder if some state got messed up.