Skip to content
  1. Aug 21, 2022
  2. Aug 18, 2022
  3. Aug 16, 2022
    • Hector Martin's avatar
      locking/atomic: Make test_and_*_bit() ordered on failure · 415d8324
      Hector Martin authored
      
      
      These operations are documented as always ordered in
      include/asm-generic/bitops/instrumented-atomic.h, and producer-consumer
      type use cases where one side needs to ensure a flag is left pending
      after some shared data was updated rely on this ordering, even in the
      failure case.
      
      This is the case with the workqueue code, which currently suffers from a
      reproducible ordering violation on Apple M1 platforms (which are
      notoriously out-of-order) that ends up causing the TTY layer to fail to
      deliver data to userspace properly under the right conditions.  This
      change fixes that bug.
      
      Change the documentation to restrict the "no order on failure" story to
      the _lock() variant (for which it makes sense), and remove the
      early-exit from the generic implementation, which is what causes the
      missing barrier semantics in that case.  Without this, the remaining
      atomic op is fully ordered (including on ARM64 LSE, as of recent
      versions of the architecture spec).
      
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Cc: stable@vger.kernel.org
      Fixes: e986a0d6 ("locking/atomics, asm-generic/bitops/atomic.h: Rewrite using atomic_*() APIs")
      Fixes: 61e02392 ("locking/atomic/bitops: Document and clarify ordering semantics for failed test_and_{}_bit()")
      Signed-off-by: default avatarHector Martin <marcan@marcan.st>
      Acked-by: default avatarWill Deacon <will@kernel.org>
      Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      415d8324
  4. Aug 15, 2022
  5. Aug 12, 2022
  6. Aug 11, 2022
  7. Aug 10, 2022
  8. Aug 09, 2022
Loading