From: Greg Kroah-Hartman Date: Sun, 10 Apr 2016 20:37:55 +0000 (-0700) Subject: delete bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch for 3.14 X-Git-Tag: v4.5.1~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f89e4661ba63cfb18bd3142eb5f9fbc9b1f7a1a9;p=thirdparty%2Fkernel%2Fstable-queue.git delete bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch for 3.14 --- diff --git a/queue-3.14/bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch b/queue-3.14/bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch deleted file mode 100644 index 5c044c03020..00000000000 --- a/queue-3.14/bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch +++ /dev/null @@ -1,84 +0,0 @@ -From f75d48644c56a31731d17fa693c8175328957e1d Mon Sep 17 00:00:00 2001 -From: Peter Zijlstra -Date: Wed, 9 Mar 2016 12:40:54 +0100 -Subject: bitops: Do not default to __clear_bit() for __clear_bit_unlock() - -From: Peter Zijlstra - -commit f75d48644c56a31731d17fa693c8175328957e1d upstream. - -__clear_bit_unlock() is a special little snowflake. While it carries the -non-atomic '__' prefix, it is specifically documented to pair with -test_and_set_bit() and therefore should be 'somewhat' atomic. - -Therefore the generic implementation of __clear_bit_unlock() cannot use -the fully non-atomic __clear_bit() as a default. - -If an arch is able to do better; is must provide an implementation of -__clear_bit_unlock() itself. - -Specifically, this came up as a result of hackbench livelock'ing in -slab_lock() on ARC with SMP + SLUB + !LLSC. - -The issue was incorrect pairing of atomic ops. - - slab_lock() -> bit_spin_lock() -> test_and_set_bit() - slab_unlock() -> __bit_spin_unlock() -> __clear_bit() - -The non serializing __clear_bit() was getting "lost" - - 80543b8e: ld_s r2,[r13,0] <--- (A) Finds PG_locked is set - 80543b90: or r3,r2,1 <--- (B) other core unlocks right here - 80543b94: st_s r3,[r13,0] <--- (C) sets PG_locked (overwrites unlock) - -Fixes ARC STAR 9000817404 (and probably more). - -Reported-by: Vineet Gupta -Tested-by: Vineet Gupta -Signed-off-by: Peter Zijlstra (Intel) -Cc: Andrew Morton -Cc: Christoph Lameter -Cc: David Rientjes -Cc: Helge Deller -Cc: James E.J. Bottomley -Cc: Joonsoo Kim -Cc: Linus Torvalds -Cc: Noam Camus -Cc: Paul E. McKenney -Cc: Pekka Enberg -Cc: Peter Zijlstra -Cc: Thomas Gleixner -Link: http://lkml.kernel.org/r/20160309114054.GJ6356@twins.programming.kicks-ass.net -Signed-off-by: Ingo Molnar -Signed-off-by: Greg Kroah-Hartman - ---- - include/asm-generic/bitops/lock.h | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - ---- a/include/asm-generic/bitops/lock.h -+++ b/include/asm-generic/bitops/lock.h -@@ -29,16 +29,16 @@ do { \ - * @nr: the bit to set - * @addr: the address to start counting from - * -- * This operation is like clear_bit_unlock, however it is not atomic. -- * It does provide release barrier semantics so it can be used to unlock -- * a bit lock, however it would only be used if no other CPU can modify -- * any bits in the memory until the lock is released (a good example is -- * if the bit lock itself protects access to the other bits in the word). -+ * A weaker form of clear_bit_unlock() as used by __bit_lock_unlock(). If all -+ * the bits in the word are protected by this lock some archs can use weaker -+ * ops to safely unlock. -+ * -+ * See for example x86's implementation. - */ - #define __clear_bit_unlock(nr, addr) \ - do { \ -- smp_mb(); \ -- __clear_bit(nr, addr); \ -+ smp_mb__before_atomic(); \ -+ clear_bit(nr, addr); \ - } while (0) - - #endif /* _ASM_GENERIC_BITOPS_LOCK_H_ */ diff --git a/queue-3.14/series b/queue-3.14/series index 1f88d131816..825f80e1703 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -62,7 +62,6 @@ drm-radeon-don-t-drop-dp-2.7-ghz-link-setup-on-some-cards.patch tracing-have-preempt-irqs-off-trace-preempt-disabled-functions.patch tracing-fix-crash-from-reading-trace_pipe-with-sendfile.patch tracing-fix-trace_printk-to-print-when-not-using-bprintk.patch -bitops-do-not-default-to-__clear_bit-for-__clear_bit_unlock.patch scripts-coccinelle-modernize.patch kbuild-mkspec-fix-grub2-installkernel-issue.patch target-fix-target_release_cmd_kref-shutdown-comp-leak.patch