* [PATCH 0/2] dma-fence: Order is-signaled-bit @ 2026-10-21 9:55 Philipp Stanner 2026-10-21 9:55 ` [PATCH 1/2] asm-generic/bitops: Add set_bit_release() Philipp Stanner 2026-10-21 9:55 ` [PATCH 2/2] dma-buf/dma-fence: Order setting of the signaled-bit properly Philipp Stanner 0 siblings, 2 replies; 10+ messages in thread From: Philipp Stanner @ 2026-10-21 9:55 UTC (permalink / raw) To: Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch, Philipp Stanner Changes in v2: - Add a set_bit_release() function for proper ordering and use it. Based on the DRM branch drm-misc-next Philipp Stanner (2): asm-generic/bitops: Add set_bit_release() dma-buf/dma-fence: Order setting of the signaled-bit properly drivers/dma-buf/dma-fence.c | 11 +++++++++-- include/asm-generic/bitops/instrumented-atomic.h | 14 ++++++++++++++ include/linux/dma-fence.h | 6 +++++- 3 files changed, 28 insertions(+), 3 deletions(-) base-commit: 1ecab8b0bad393750c60cc3819ce9c256595463c -- 2.56.0 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 9:55 [PATCH 0/2] dma-fence: Order is-signaled-bit Philipp Stanner @ 2026-10-21 9:55 ` Philipp Stanner 2026-10-21 11:33 ` Arnd Bergmann 2026-10-21 12:06 ` Gary Guo 2026-10-21 9:55 ` [PATCH 2/2] dma-buf/dma-fence: Order setting of the signaled-bit properly Philipp Stanner 1 sibling, 2 replies; 10+ messages in thread From: Philipp Stanner @ 2026-10-21 9:55 UTC (permalink / raw) To: Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch, Philipp Stanner The kernel already has test_bit_acquire(). A set_bit_release(), however, was missing so far. It can be expected to be useful for parties that need release ordering, but not the stricter full ordering of the other bit-setting functions. Add set_bit_release(). Signed-off-by: Philipp Stanner <phasta@kernel.org> --- include/asm-generic/bitops/instrumented-atomic.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/asm-generic/bitops/instrumented-atomic.h b/include/asm-generic/bitops/instrumented-atomic.h index c010d54275e4..fb2d1472fd4d 100644 --- a/include/asm-generic/bitops/instrumented-atomic.h +++ b/include/asm-generic/bitops/instrumented-atomic.h @@ -72,6 +72,20 @@ static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *ad return arch_test_and_set_bit(nr, addr); } +/** + * set_bit_release - Set a bit with release ordering + * @nr: Bit to set + * @addr: Address to start counting from + * + * This is an atomic ordered operation (implied write memory barrier). + */ +static __always_inline void set_bit_release(long nr, volatile unsigned long *addr) +{ + kcsan_wmb(); + instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); + arch_set_bit(nr, addr); +} + /** * test_and_clear_bit - Clear a bit and return its old value * @nr: Bit to clear -- 2.56.0 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 9:55 ` [PATCH 1/2] asm-generic/bitops: Add set_bit_release() Philipp Stanner @ 2026-10-21 11:33 ` Arnd Bergmann 2026-10-21 11:54 ` Gary Guo 2026-10-21 12:06 ` Gary Guo 1 sibling, 1 reply; 10+ messages in thread From: Arnd Bergmann @ 2026-10-21 11:33 UTC (permalink / raw) To: Philipp Stanner, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E. McKenney Cc: linux-media, dri-devel, linux-kernel, Linux-Arch On Wed, Oct 21, 2026, at 11:55, Philipp Stanner wrote: > The kernel already has test_bit_acquire(). A set_bit_release(), however, > was missing so far. It can be expected to be useful for parties that > need release ordering, but not the stricter full ordering of the other > bit-setting functions. > > Add set_bit_release(). > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > +/** > + * set_bit_release - Set a bit with release ordering > + * @nr: Bit to set > + * @addr: Address to start counting from > + * > + * This is an atomic ordered operation (implied write memory barrier). > + */ Can we fix the mismatch between code comments and documentation for the set_bit()/clear_bit()/change_bit() barrier semantics while adding this? I'm always confused by this and the new function makes it harder to understand in the current form: - Your patch description mentions that set_bit() has strong rw barrier semantics and that set_bit_release() would be a weaker write-barrier version of it. This makes sense given the set_bit() implementation based on strong raw_atomic_long_or() in arch_set_bit() and the text in Documentation/memory-barriers.txt - Contrary to that, the kerneldoc comment over set_bit() mentions "This is a relaxed atomic operation (no implied memory barriers)" and leaves out the kcsan_mb() that is in test_and_set_bit(). This makes the new set_bit_release() sound like a /stronger/ version of set_bit() the same way that test_bit_acquire() is a stronger version of the (relaxed) test_bit(). As I understand it, the kerneldoc comments here are incorrect and trace back to the include/asm-i386/bitops.h file before the git era. The patch below should make them consistent with your patch and with the actual implementation. Arnd diff --git a/include/asm-generic/bitops/instrumented-atomic.h b/include/asm-generic/bitops/instrumented-atomic.h index c010d54275e4..df200802e929 100644 --- a/include/asm-generic/bitops/instrumented-atomic.h +++ b/include/asm-generic/bitops/instrumented-atomic.h @@ -18,13 +18,14 @@ * @nr: the bit to set * @addr: the address to start counting from * - * This is a relaxed atomic operation (no implied memory barriers). + * This is an atomic fully-ordered operation (implied full memory barrier). * * Note that @nr may be almost arbitrarily large; this function is not * restricted to acting on a single-word quantity. */ static __always_inline void set_bit(long nr, volatile unsigned long *addr) { + kcsan_mb(); instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); arch_set_bit(nr, addr); } @@ -34,10 +35,11 @@ static __always_inline void set_bit(long nr, volatile unsigned long *addr) * @nr: Bit to clear * @addr: Address to start counting from * - * This is a relaxed atomic operation (no implied memory barriers). + * This is an atomic fully-ordered operation (implied full memory barrier). */ static __always_inline void clear_bit(long nr, volatile unsigned long *addr) { + kcsan_mb(); instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); arch_clear_bit(nr, addr); } @@ -47,13 +49,14 @@ static __always_inline void clear_bit(long nr, volatile unsigned long *addr) * @nr: Bit to change * @addr: Address to start counting from * - * This is a relaxed atomic operation (no implied memory barriers). + * This is an atomic fully-ordered operation (implied full memory barrier). * * Note that @nr may be almost arbitrarily large; this function is not * restricted to acting on a single-word quantity. */ static __always_inline void change_bit(long nr, volatile unsigned long *addr) { + kcsan_mb(); instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); arch_change_bit(nr, addr); } ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 11:33 ` Arnd Bergmann @ 2026-10-21 11:54 ` Gary Guo 2026-10-21 12:15 ` Arnd Bergmann 0 siblings, 1 reply; 10+ messages in thread From: Gary Guo @ 2026-10-21 11:54 UTC (permalink / raw) To: Arnd Bergmann, Philipp Stanner, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E. McKenney Cc: linux-media, dri-devel, linux-kernel, Linux-Arch On Wed Oct 21, 2026 at 12:33 PM BST, Arnd Bergmann wrote: > On Wed, Oct 21, 2026, at 11:55, Philipp Stanner wrote: >> The kernel already has test_bit_acquire(). A set_bit_release(), however, >> was missing so far. It can be expected to be useful for parties that >> need release ordering, but not the stricter full ordering of the other >> bit-setting functions. >> >> Add set_bit_release(). >> >> Signed-off-by: Philipp Stanner <phasta@kernel.org> > >> +/** >> + * set_bit_release - Set a bit with release ordering >> + * @nr: Bit to set >> + * @addr: Address to start counting from >> + * >> + * This is an atomic ordered operation (implied write memory barrier). >> + */ > > Can we fix the mismatch between code comments and documentation for > the set_bit()/clear_bit()/change_bit() barrier semantics while adding > this? I'm always confused by this and the new function makes it harder > to understand in the current form: > > - Your patch description mentions that set_bit() has strong rw > barrier semantics and that set_bit_release() would be a weaker > write-barrier version of it. This makes sense given the > set_bit() implementation based on strong raw_atomic_long_or() > in arch_set_bit() and the text in Documentation/memory-barriers.txt > > - Contrary to that, the kerneldoc comment over set_bit() mentions > "This is a relaxed atomic operation (no implied memory barriers)" > and leaves out the kcsan_mb() that is in test_and_set_bit(). > This makes the new set_bit_release() sound like a /stronger/ > version of set_bit() the same way that test_bit_acquire() > is a stronger version of the (relaxed) test_bit(). set_bit has relaxed semantics while test_and_set_bit implies barrier. RISC-V for exmaple will generate the amoor instruction for set_bit, not amoor.aqrl. Best, Gary > > As I understand it, the kerneldoc comments here are incorrect > and trace back to the include/asm-i386/bitops.h file before the > git era. The patch below should make them consistent with your > patch and with the actual implementation. > > Arnd ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 11:54 ` Gary Guo @ 2026-10-21 12:15 ` Arnd Bergmann 0 siblings, 0 replies; 10+ messages in thread From: Arnd Bergmann @ 2026-10-21 12:15 UTC (permalink / raw) To: Gary Guo, Philipp Stanner, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Tvrtko Ursulin, Danilo Krummrich, Paul E. McKenney Cc: linux-media, dri-devel, linux-kernel, Linux-Arch On Wed, Oct 21, 2026, at 13:54, Gary Guo wrote: > On Wed Oct 21, 2026 at 12:33 PM BST, Arnd Bergmann wrote: >> I'm always confused by this and the new function makes it harder >> to understand in the current form: ... >> - Contrary to that, the kerneldoc comment over set_bit() mentions >> "This is a relaxed atomic operation (no implied memory barriers)" >> and leaves out the kcsan_mb() that is in test_and_set_bit(). >> This makes the new set_bit_release() sound like a /stronger/ >> version of set_bit() the same way that test_bit_acquire() >> is a stronger version of the (relaxed) test_bit(). > > set_bit has relaxed semantics while test_and_set_bit implies barrier. RISC-V for > exmaple will generate the amoor instruction for set_bit, not amoor.aqrl. Thanks for the clarification, I did misread the implementation and see how I was confused once more. Arnd ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 9:55 ` [PATCH 1/2] asm-generic/bitops: Add set_bit_release() Philipp Stanner 2026-10-21 11:33 ` Arnd Bergmann @ 2026-10-21 12:06 ` Gary Guo 2026-10-21 12:17 ` Philipp Stanner 1 sibling, 1 reply; 10+ messages in thread From: Gary Guo @ 2026-10-21 12:06 UTC (permalink / raw) To: Philipp Stanner, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch On Wed Oct 21, 2026 at 10:55 AM BST, Philipp Stanner wrote: > The kernel already has test_bit_acquire(). A set_bit_release(), however, > was missing so far. It can be expected to be useful for parties that > need release ordering, but not the stricter full ordering of the other > bit-setting functions. > > Add set_bit_release(). > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > --- > include/asm-generic/bitops/instrumented-atomic.h | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/include/asm-generic/bitops/instrumented-atomic.h b/include/asm-generic/bitops/instrumented-atomic.h > index c010d54275e4..fb2d1472fd4d 100644 > --- a/include/asm-generic/bitops/instrumented-atomic.h > +++ b/include/asm-generic/bitops/instrumented-atomic.h > @@ -72,6 +72,20 @@ static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *ad > return arch_test_and_set_bit(nr, addr); > } > > +/** > + * set_bit_release - Set a bit with release ordering > + * @nr: Bit to set > + * @addr: Address to start counting from > + * > + * This is an atomic ordered operation (implied write memory barrier). > + */ > +static __always_inline void set_bit_release(long nr, volatile unsigned long *addr) > +{ > + kcsan_wmb(); > + instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); > + arch_set_bit(nr, addr); This is just wrong. There's no code here that gives you the release semantics. kcsan_wmb() is just an annotation and does nothing. wmb is also not release semantics as it does not order LOAD->STORE. Given that set_bit is a relaxed RMW atomic, you can implement set_bit_release with just smp_mb__before_atomic(); set_bit(nr, addr); Which should be correct, but is too strong on some architectures (like RISC-V), becuase it will produce a full MB instead. So we can either add release barriers (hint: I really like it), or we can add arch_set_bit_release and implement it per arch; on RISC-V for example it can then be translated to amoor.rl (which is not being produced by any existing bit ops).c Best, Gary > +} > + > /** > * test_and_clear_bit - Clear a bit and return its old value > * @nr: Bit to clear ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 12:06 ` Gary Guo @ 2026-10-21 12:17 ` Philipp Stanner 2026-10-21 12:24 ` Gary Guo 0 siblings, 1 reply; 10+ messages in thread From: Philipp Stanner @ 2026-10-21 12:17 UTC (permalink / raw) To: Gary Guo, Philipp Stanner, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch On Wed, 2026-10-21 at 13:06 +0100, Gary Guo wrote: […] > > +/** > > + * set_bit_release - Set a bit with release ordering > > + * @nr: Bit to set > > + * @addr: Address to start counting from > > + * > > + * This is an atomic ordered operation (implied write memory barrier). > > + */ > > +static __always_inline void set_bit_release(long nr, volatile unsigned long *addr) > > +{ > > + kcsan_wmb(); > > + instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); > > + arch_set_bit(nr, addr); > > This is just wrong. There's no code here that gives you the release semantics. > > kcsan_wmb() is just an annotation and does nothing. wmb is also not release > semantics as it does not order LOAD->STORE. What are the other functions here then even about? /** * test_and_set_bit - Set a bit and return its old value * @nr: Bit to set * @addr: Address to count from * * This is an atomic fully-ordered operation (implied full memory barrier). */ static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *addr) { kcsan_mb(); instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long)); return arch_test_and_set_bit(nr, addr); } Where does the "full ordering" come from? I suppose implied barrier then means it comes from the architecture's implementation. But what's then the purpose of kcsan_XX ? > Given that set_bit is a relaxed RMW atomic, you can implement set_bit_release > with just > > smp_mb__before_atomic(); > set_bit(nr, addr); > > Which should be correct, but is too strong on some architectures (like RISC-V), > becuase it will produce a full MB instead. So we can either add release barriers > (hint: I really like it), or we can add arch_set_bit_release and implement it > per arch; on RISC-V for example it can then be translated to amoor.rl (which is > not being produced by any existing bit ops).c All fine by me. P. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 12:17 ` Philipp Stanner @ 2026-10-21 12:24 ` Gary Guo 2026-10-21 13:22 ` Philipp Stanner 0 siblings, 1 reply; 10+ messages in thread From: Gary Guo @ 2026-10-21 12:24 UTC (permalink / raw) To: phasta, Gary Guo, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch On Wed Oct 21, 2026 at 1:17 PM BST, Philipp Stanner wrote: > On Wed, 2026-10-21 at 13:06 +0100, Gary Guo wrote: > > > […] > >> > +/** >> > + * set_bit_release - Set a bit with release ordering >> > + * @nr: Bit to set >> > + * @addr: Address to start counting from >> > + * >> > + * This is an atomic ordered operation (implied write memory barrier). >> > + */ >> > +static __always_inline void set_bit_release(long nr, volatile unsigned long *addr) >> > +{ >> > + kcsan_wmb(); >> > + instrument_atomic_write(addr + BIT_WORD(nr), sizeof(long)); >> > + arch_set_bit(nr, addr); >> >> This is just wrong. There's no code here that gives you the release semantics. >> >> kcsan_wmb() is just an annotation and does nothing. wmb is also not release >> semantics as it does not order LOAD->STORE. > > What are the other functions here then even about? > > /** > * test_and_set_bit - Set a bit and return its old value > * @nr: Bit to set > * @addr: Address to count from > * > * This is an atomic fully-ordered operation (implied full memory barrier). > */ > static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *addr) > { > kcsan_mb(); > instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long)); > return arch_test_and_set_bit(nr, addr); > } > > Where does the "full ordering" come from? I suppose implied barrier > then means it comes from the architecture's implementation. But what's > then the purpose of kcsan_XX ? It's from arch_test_and_set_bit. KCSAN doesn't see arch code, so the kcsan_mb() and in fact instrumnent_atomic_read_write() both are annotations to indicate that this is conceptually a mb() + STORE for instrumentation purpose. Best, Gary ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] asm-generic/bitops: Add set_bit_release() 2026-10-21 12:24 ` Gary Guo @ 2026-10-21 13:22 ` Philipp Stanner 0 siblings, 0 replies; 10+ messages in thread From: Philipp Stanner @ 2026-10-21 13:22 UTC (permalink / raw) To: Gary Guo, phasta, Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch On Wed, 2026-10-21 at 13:24 +0100, Gary Guo wrote: > On Wed Oct 21, 2026 at 1:17 PM BST, Philipp Stanner wrote: […] > > static __always_inline bool test_and_set_bit(long nr, volatile unsigned long *addr) > > { > > kcsan_mb(); > > instrument_atomic_read_write(addr + BIT_WORD(nr), sizeof(long)); > > return arch_test_and_set_bit(nr, addr); > > } > > > > Where does the "full ordering" come from? I suppose implied barrier > > then means it comes from the architecture's implementation. But what's > > then the purpose of kcsan_XX ? > > It's from arch_test_and_set_bit. > > KCSAN doesn't see arch code, so the kcsan_mb() and in fact > instrumnent_atomic_read_write() both are annotations to indicate that this is > conceptually a mb() + STORE for instrumentation purpose. We (i.e., someone who's got the overview) could probably document where and why our atomic instructions are a bit scattered. Why is test_bit_acquire() defined in include/linux/bitops.h, and should set_bit_release() be defined there – or here? P. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] dma-buf/dma-fence: Order setting of the signaled-bit properly 2026-10-21 9:55 [PATCH 0/2] dma-fence: Order is-signaled-bit Philipp Stanner 2026-10-21 9:55 ` [PATCH 1/2] asm-generic/bitops: Add set_bit_release() Philipp Stanner @ 2026-10-21 9:55 ` Philipp Stanner 1 sibling, 0 replies; 10+ messages in thread From: Philipp Stanner @ 2026-10-21 9:55 UTC (permalink / raw) To: Sumit Semwal, Christian König, Yury Norov, Rasmus Villemoes, Arnd Bergmann, Tvrtko Ursulin, Danilo Krummrich, Gary Guo, Paul E . McKenney Cc: linux-media, dri-devel, linux-kernel, linux-arch, Philipp Stanner dma_fence_is_signaled() can return true *while* the fence is still signaling. This is fragile and has been involved in at least two bugs: commit c8a5d5ea3ba6 ("nouveau: fix client work fence deletion race") commit 7c703a7d3f2b ("drm/amdgpu: Fix one use-after-free of VM") The signaled-bit is set under lock-protection but read without it. Adding the lock has been rejected on the grounds of the lock-acquisition shooting down cache lines of parties that merely want to check whether the fence is already signaled. Make sure the bit can only become visible as 1 once the callbacks have ran. To achieve this, read the bit with test_bit_acquire() and set it with set_bit_release(). Signed-off-by: Philipp Stanner <phasta@kernel.org> --- drivers/dma-buf/dma-fence.c | 11 +++++++++-- include/linux/dma-fence.h | 6 +++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index bd58688b81a7..07d499fa35ac 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -359,8 +359,7 @@ void dma_fence_signal_timestamp_locked(struct dma_fence *fence, dma_fence_assert_held(fence); - if (unlikely(test_and_set_bit(DMA_FENCE_FLAG_SIGNALED_BIT, - &fence->flags))) + if (unlikely(dma_fence_test_signaled_flag(fence))) return; trace_dma_fence_signaled(fence); @@ -384,6 +383,14 @@ void dma_fence_signal_timestamp_locked(struct dma_fence *fence, INIT_LIST_HEAD(&cur->node); cur->func(fence, cur); } + + /* + * This orders the signaled-state with the test_bit_acquire() in + * dma_fence_test_signaled_flag(). This ensures that functions like + * dma_fence_is_signaled() can only ever return true once signaling is + * completed (i.e., after the callbacks above ran). + */ + set_bit_release(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags); } EXPORT_SYMBOL(dma_fence_signal_timestamp_locked); diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index dd07d128adc3..61522027af41 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -496,7 +496,11 @@ const char __rcu *dma_fence_timeline_name(struct dma_fence *fence); static inline bool dma_fence_test_signaled_flag(struct dma_fence *fence) { - return test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags); + /* + * The counterpart of this ordered operation can be found in + * dma_fence_signal_timestamp_locked(). + */ + return test_bit_acquire(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags); } /** -- 2.56.0 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-10-21 13:23 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-10-21 9:55 [PATCH 0/2] dma-fence: Order is-signaled-bit Philipp Stanner 2026-10-21 9:55 ` [PATCH 1/2] asm-generic/bitops: Add set_bit_release() Philipp Stanner 2026-10-21 11:33 ` Arnd Bergmann 2026-10-21 11:54 ` Gary Guo 2026-10-21 12:15 ` Arnd Bergmann 2026-10-21 12:06 ` Gary Guo 2026-10-21 12:17 ` Philipp Stanner 2026-10-21 12:24 ` Gary Guo 2026-10-21 13:22 ` Philipp Stanner 2026-10-21 9:55 ` [PATCH 2/2] dma-buf/dma-fence: Order setting of the signaled-bit properly Philipp Stanner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®