From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Subject: Re: [PATCH v3.16.y] percpu: make this_cpu_generic_read() atomic w.r.t. interrupts Date: Thu, 19 Oct 2017 11:24:34 +0200 Message-ID: <20171019092434.GA16355@kroah.com> References: <20171018134022.25282-1-mark.rutland@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from out4-smtp.messagingengine.com ([66.111.4.28]:52337 "EHLO out4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751797AbdJSJY0 (ORCPT ); Thu, 19 Oct 2017 05:24:26 -0400 Content-Disposition: inline In-Reply-To: <20171018134022.25282-1-mark.rutland@arm.com> Sender: linux-arch-owner@vger.kernel.org List-ID: To: Mark Rutland Cc: stable@vger.kernel.org, Arnd Bergmann , Christoph Lameter , Peter Zijlstra , Pranith Kumar , Tejun Heo , Thomas Gleixner , linux-arch@vger.kernel.org On Wed, Oct 18, 2017 at 02:40:22PM +0100, Mark Rutland wrote: > Commit e88d62cd4b2f0b1ae55e9008e79c2794b1fc914d upstream. > > As raw_cpu_generic_read() is a plain read from a raw_cpu_ptr() address, > it's possible (albeit unlikely) that the compiler will split the access > across multiple instructions. > > In this_cpu_generic_read() we disable preemption but not interrupts > before calling raw_cpu_generic_read(). Thus, an interrupt could be taken > in the middle of the split load instructions. If a this_cpu_write() or > RMW this_cpu_*() op is made to the same variable in the interrupt > handling path, this_cpu_read() will return a torn value. > > For native word types, we can avoid tearing using READ_ONCE(), but this > won't work in all cases (e.g. 64-bit types on most 32-bit platforms). > This patch reworks this_cpu_generic_read() to use READ_ONCE() where > possible, otherwise falling back to disabling interrupts. > > Signed-off-by: Mark Rutland > Cc: Arnd Bergmann > Cc: Christoph Lameter > Cc: Peter Zijlstra > Cc: Pranith Kumar > Cc: Tejun Heo > Cc: Thomas Gleixner > Cc: linux-arch@vger.kernel.org > Cc: stable@vger.kernel.org > Signed-off-by: Tejun Heo > [Mark: backport to v3.16.y] You sent 2 patches for 3.16.y, did you mean for one of these to be for 3.18.y? thanks, greg k-h