Messages in this thread | | | From | "Jason A. Donenfeld" <> | Date | Mon, 17 Feb 2020 08:39:45 +0100 | Subject | Re: [PATCH v3] skbuff: fix a data race in skb_queue_len() |
| |
On 2/17/20, Herbert Xu <herbert@gondor.apana.org.au> wrote: > Jason A. Donenfeld <Jason@zx2c4.com> wrote: >> Hi Eric, >> >> On Tue, Feb 04, 2020 at 01:40:29PM -0500, Qian Cai wrote: >>> - list->qlen--; >>> + WRITE_ONCE(list->qlen, list->qlen - 1); >> >> Sorry I'm a bit late to the party here, but this immediately jumped out. >> This generates worse code with a bigger race in some sense: >> >> list->qlen-- is: >> >> 0: 83 6f 10 01 subl $0x1,0x10(%rdi) >> >> whereas WRITE_ONCE(list->qlen, list->qlen - 1) is: >> >> 0: 8b 47 10 mov 0x10(%rdi),%eax >> 3: 83 e8 01 sub $0x1,%eax >> 6: 89 47 10 mov %eax,0x10(%rdi) >> >> Are you sure that's what we want? > > Fixing these KCSAN warnings is actively making the kernel worse. > > Why are we still doing this? > Not necessarily a big fan of this either, but just for the record here in case it helps, while you might complain about instruction size blowing up a bit, cycle-wise these wind up being about the same anyway. On x86, one instruction != one cycle.
| |