Messages in this thread | | | Date | Wed, 11 Dec 2019 10:44:16 -0800 | From | "Luck, Tony" <> | Subject | Re: [PATCH v10 6/6] x86/split_lock: Enable split lock detection by kernel parameter |
| |
On Wed, Dec 11, 2019 at 06:52:02PM +0100, Peter Zijlstra wrote: > Sure, but we're talking two cpus here. > > u32 var = 0; > u8 *ptr = &var; > > CPU0 CPU1 > > xchg(ptr, 1) > > xchg((ptr+1, 1); > r = READ_ONCE(var);
It looks like our current implementation of set_bit() would already run into this if some call sites for a particular bitmap `pass in constant bit positions (which get optimized to byte wide "orb") while others pass in a variable bit (which execute as 64-bit "bts").
I'm not a h/w architect ... but I've assumed that a LOCK operation on something contained entirely within a cache line gets its atomicity by keeping exclusive ownership of the cache line. Split lock happens because you can't keep ownership for two cache lines, so it gets escalated to a bus lock.
-Tony
| |