--- /dev/null
+From 28557cc106e6d2aa8b8c5c7687ea9f8055ff3911 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Wed, 27 Jun 2018 23:26:05 -0700
+Subject: Revert mm/vmstat.c: fix vmstat_update() preemption BUG
+
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+
+commit 28557cc106e6d2aa8b8c5c7687ea9f8055ff3911 upstream.
+
+Revert commit c7f26ccfb2c3 ("mm/vmstat.c: fix vmstat_update() preemption
+BUG"). Steven saw a "using smp_processor_id() in preemptible" message
+and added a preempt_disable() section around it to keep it quiet. This
+is not the right thing to do it does not fix the real problem.
+
+vmstat_update() is invoked by a kworker on a specific CPU. This worker
+it bound to this CPU. The name of the worker was "kworker/1:1" so it
+should have been a worker which was bound to CPU1. A worker which can
+run on any CPU would have a `u' before the first digit.
+
+smp_processor_id() can be used in a preempt-enabled region as long as
+the task is bound to a single CPU which is the case here. If it could
+run on an arbitrary CPU then this is the problem we have an should seek
+to resolve.
+
+Not only this smp_processor_id() must not be migrated to another CPU but
+also refresh_cpu_vm_stats() which might access wrong per-CPU variables.
+Not to mention that other code relies on the fact that such a worker
+runs on one specific CPU only.
+
+Therefore revert that commit and we should look instead what broke the
+affinity mask of the kworker.
+
+Link: http://lkml.kernel.org/r/20180504104451.20278-1-bigeasy@linutronix.de
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Cc: Steven J. Hill <steven.hill@cavium.com>
+Cc: Tejun Heo <htejun@gmail.com>
+Cc: Vlastimil Babka <vbabka@suse.cz>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/vmstat.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/mm/vmstat.c
++++ b/mm/vmstat.c
+@@ -1770,11 +1770,9 @@ static void vmstat_update(struct work_st
+ * to occur in the future. Keep on running the
+ * update worker thread.
+ */
+- preempt_disable();
+ queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
+ this_cpu_ptr(&vmstat_work),
+ round_jiffies_relative(sysctl_stat_interval));
+- preempt_enable();
+ }
+ }
+