On Wed, Dec 13, 2023 at 5:51 PM Marco Elver <elver@xxxxxxxxxx> wrote: > > > > [1]: Since a depot stack handle is just an u32, we can have a > > > > > > union { > > > depot_stack_handle_t handles[2]; > > > atomic64_t atomic_handle; > > > } aux_stack; > > > (BUILD_BUG_ON somewhere if sizeof handles and atomic_handle mismatch.) > > > > > > Then in the code here create the same union and load atomic_handle. > > > Swap handle[1] into handle[0] and write the new one in handles[1]. > > > Then do a cmpxchg loop to store the new atomic_handle. > > > > This approach should work. If you prefer, I can do this instead of a spinlock. > > > > But we do need some kind of atomicity while rotating the aux handles > > to make sure nothing gets lost. > > Yes, I think that'd be preferable. Although note that not all 32-bit > architectures have 64-bit atomics, so that may be an issue. Another > alternative is to have a spinlock next to the aux_stack (it needs to > be initialized properly). It'll use up a little more space, but that's > for KASAN configs only, so I think it's ok. Certainly better than a > global lock. Ah, hm, actually this is what I indented to do with this change. But somehow my brain glitched out and decided to use a global lock :) I'll change this into a local spinlock in v2. Thank you!