<div dir="ltr">Hi,<br><br>list_empty() uses READ_ONCE() to read head->next [1]. AFAIK, READ_ONCE() is a compile-time memory<br><div>barrier to prevent the compiler from reordering the read with the previous or the following memory accesses. <br></div><div><br></div><div>I checked commit id 1658d35ead5d8dd from its committer Paul E. McKenney when such a thing was added <br></div><div>to the kernel, to seek for an explanation, but the commit description is not very insightful. It only says that this <br></div><div>macro might be accessed without the protection of a lock and thus the need for READ_ONCE.</div><div><br></div><div>I still don't understand why READ_ONCE() is needed in list_empty(). Is there a concrete example where not</div><div>wrapping it inside READ_ONCE() could lead to inconsistency/incorrectness?</div><div><br></div><div>[1] <a href="https://elixir.bootlin.com/linux/v5.14.11/source/include/linux/list.h#L282">https://elixir.bootlin.com/linux/v5.14.11/source/include/linux/list.h#L282</a></div><div><br></div><div>Cheers</div><div>Karim</div></div>