On Thu, Apr 28, 2022 at 04:00:15PM +0100, Karim Manaouil wrote: > list_empty() uses READ_ONCE() to read head->next [1]. AFAIK, READ_ONCE() is > a compile-time memory > barrier to prevent the compiler from reordering the read with the previous > or the following memory accesses. > > I checked commit id 1658d35ead5d8dd from its committer Paul E. McKenney > when such a thing was added > to the kernel, to seek for an explanation, but the commit description is > not very insightful. It only says that this > macro might be accessed without the protection of a lock and thus the need > for READ_ONCE. > > I still don't understand why READ_ONCE() is needed in list_empty(). Is > there a concrete example where not > wrapping it inside READ_ONCE() could lead to inconsistency/incorrectness? list_empty is inline so it will be included in many different functions in the kernel and it is possible that cases like this might happen: https://lkml.iu.edu/hypermail/linux/kernel/1602.3/03297.html Also see https://www.kernel.org/doc/Documentation/memory-barriers.txt and https://mirrors.edge.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html for more examples of READ_ONCE. If this does not help you can always CC the patch author and bug reporter for more info :) -- Valentin _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies