On 03/02/23 at 08:12am, Arnd Bergmann wrote: > On Thu, Mar 2, 2023, at 05:12, Baoquan He wrote: > > On 03/01/23 at 03:06pm, Arnd Bergmann wrote: > > > > Yeah, defining mmiowb() to wmb() directly is also good to me. I tried > > to comb including sequence and find where asm/io.h is included, but > > failed. Mainly asm/mmiowb.h including asm/io.h will cause below > > compiling error, the asm/io.h need see mmiowb_set_pending which is > > defnined in asm-generic/mmiowb.h. Moving asm-generic/mmiowb.h to above > > asm/io.h can also fix the compiling error. > > > > ============= > > diff --git a/arch/mips/include/asm/mmiowb.h b/arch/mips/include/asm/mmiowb.h > > index a40824e3ef8e..cae2745935bc 100644 > > --- a/arch/mips/include/asm/mmiowb.h > > +++ b/arch/mips/include/asm/mmiowb.h > > @@ -2,10 +2,8 @@ > > #ifndef _ASM_MMIOWB_H > > #define _ASM_MMIOWB_H > > > > +#include <asm-generic/mmiowb.h> > > #include <asm/io.h> > > > > #define mmiowb() iobarrier_w() > > - > > -#include <asm-generic/mmiowb.h> > > - > > #endif /* _ASM_MMIOWB_H */ > > According to the comment in asm-generic/mmiowb.h, the intention is > to have the mmiowb definition before the #include, though this would > only be necessary if there was an "#ifndef mmiowb" fallback in that > file. If the definition to wmb() works, I'd go for that one and > leave the include order unchanged. I didn't add definition of outb(), so it caused the compiling error at below. Adding it can fix that. I will leave the asm/mmiowb.h as is since no issue now. In file included from ./arch/mips/include/asm/io.h:611, from ./arch/mips/include/asm/mmiowb.h:5, from ./include/linux/spinlock.h:65, from ./include/linux/ipc.h:5, from ./include/uapi/linux/sem.h:5, from ./include/linux/sem.h:5, from ./include/linux/compat.h:14, from arch/mips/kernel/asm-offsets.c:12: ./include/asm-generic/io.h: In function ‘_outb’: ./include/asm-generic/io.h:46:24: error: implicit declaration of function ‘mmiowb_set_pending’ [-Werror=implicit-function-declaration] 46 | #define __io_aw() mmiowb_set_pending() | ^~~~~~~~~~~~~~~~~~ ./include/asm-generic/io.h:54:24: note: in expansion of macro ‘__io_aw’ 54 | #define __io_paw() __io_aw() | ^~~~~~~ ./include/asm-generic/io.h:585:9: note: in expansion of macro ‘__io_paw’ 585 | __io_paw(); | ^~~~~~~~