On Sat, Sep 26, 2020 at 12:32:28PM +0900, Akira Yokosawa wrote: > >From 456d16d1450416bbd4eeea175a4bc0c2f819062d Mon Sep 17 00:00:00 2001 > From: Akira Yokosawa <akiyks@xxxxxxxxx> > Date: Sat, 26 Sep 2020 12:11:37 +0900 > Subject: [PATCH] CodeSamples/formal: Add pointer cast in WRITE_ONCE() for Linux v5.8 compat > > On Linux v5.8, "make" under klitmus/ after "make cross-klitmus" at > CodeSamples/formal/herd/ doesn't complete with the following error: > > In file included from ./include/linux/export.h:43, > from ./include/linux/linkage.h:7, > from ./include/linux/kernel.h:8, > from ./include/linux/list.h:9, > from ./include/linux/module.h:12, > from [...]/CodeSamples/fromal/herd/klitmus/litmus030.c:11: > [...]/CodeSamples/formal/herd/klitmus/litmus030.c: In function 'code0': > ./include/linux/compiler.h:297:30: error: assignment to 'int * volatile' > from incomatible pointer type 'int **' [-Werror=incompatible-pointer-types] > 297 | *(volatile typeof(x) *)&(x) = (val); \ > | ^ > > ./include/linux/compiler.h:303:2: note: in expansion of macro '__WRITE_ONCE' > 303 | __WRITE_ONCE(x, val); \ > | ^~~~~~~~~~~~ > > [...]/CodeSamples/formal/herd/klitmus/litmus030.c:363:2: note: in expansion > of macro 'WRITE_ONCE' > 363 | WRITE_ONCE(*x, x); > | ^~~~~~~~~~ > > cc1: some warnings being treated as errors > > This is due to the simplification of WRITE_ONCE() [1]. > Now WRITE_ONCE() catches type mismatch of its arguments. > > Adding a pointer cast to the WRITE_ONCE() argumant: > > WRITE_ONCE(*x, (int*)x); > > makes the compiler happy. > > [1]: https://git.kernel.org/linus/a5460b5e5fb8 > ("READ_ONCE: Simplify implementations of {READ,WRITE}_ONCE()") > > NOTE1: These litmus tests are converted from those under > CodeSamples/formal/litmus/. > NOTE2: They were once presented as code snippets in perfbook. > > Signed-off-by: Akira Yokosawa <akiyks@xxxxxxxxx> Good catch, queued and pushed, thank you!!! Thanx, Paul > --- > CodeSamples/formal/litmus/C-WWC+o+o-data-o+o-addr-o.litmus | 2 +- > CodeSamples/formal/litmus/C-WWC+o+o-r+o-addr-o.litmus | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/CodeSamples/formal/litmus/C-WWC+o+o-data-o+o-addr-o.litmus b/CodeSamples/formal/litmus/C-WWC+o+o-data-o+o-addr-o.litmus > index cd9df060..3525e033 100644 > --- a/CodeSamples/formal/litmus/C-WWC+o+o-data-o+o-addr-o.litmus > +++ b/CodeSamples/formal/litmus/C-WWC+o+o-data-o+o-addr-o.litmus > @@ -13,7 +13,7 @@ int *y = &b; > > P0(int **x) > { > - WRITE_ONCE(*x, x); > + WRITE_ONCE(*x, (int*)x); > } > > P1(int **x, int **y) > diff --git a/CodeSamples/formal/litmus/C-WWC+o+o-r+o-addr-o.litmus b/CodeSamples/formal/litmus/C-WWC+o+o-r+o-addr-o.litmus > index 6a65d674..0d16b2f7 100644 > --- a/CodeSamples/formal/litmus/C-WWC+o+o-r+o-addr-o.litmus > +++ b/CodeSamples/formal/litmus/C-WWC+o+o-r+o-addr-o.litmus > @@ -13,7 +13,7 @@ int *y = &b; > > P0(int **x) > { > - WRITE_ONCE(*x, x); > + WRITE_ONCE(*x, (int*)x); > } > > P1(int **x, int **y) > -- > 2.17.1 >