Re: mm/vmstat.c: fix vmstat_update() preemption BUG

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux