tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: __{read,write}_once
Maxime Villard <max%m00nbsd.net@localhost> wrote:
> There are cases in the kernel where we read/write global memory
> locklessly, and accept the races either because it is part of the design
> (eg low-level scheduling) or we simply don't care (eg global stats).
>
> In these cases, we want to access the memory only once, and need to ensure
> the compiler does not split that access in several pieces, some of which
> may be changed by concurrent accesses. There is a Linux article [1] about
> this, and also [2]. I'd like to introduce the following macros:
>
> <...>
A few comments for everybody here:
- There is a general need in the NetBSD kernel for atomic load/store
semantics. This is because plain accesses (loads/stores) are subject
to _tearing_, _fusing_ and _invented_ loads/stores. I created a new
thread which might help to clarify these and various other aspects:
http://mail-index.netbsd.org/tech-kern/2019/11/06/msg025664.html
- In C11, this can be handled with atomic_{load,store}_explicit() and
memory_order_relaxed (or stronger memory order).
- If we do not want to stick with the C11 API (its emulation), then I
would suggest to use the similar terminology, e.g. atomic_load_relaxed()
and atomic_store_relaxed(), or Linux READ_ONCE()/WRITE_ONCE(). There is
no reason invent new terminology; it might just add more confusion.
Thanks.
--
Mindaugas
Home |
Main Index |
Thread Index |
Old Index