@@ -322,14 +322,18 @@ static inline int __is_mmio(const volatile void __iomem *addr)
322322#if IO_CONCAT (__IO_PREFIX ,trivial_io_bw )
323323extern inline unsigned int ioread8 (void __iomem * addr )
324324{
325- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread8 )(addr );
325+ unsigned int ret ;
326+ mb ();
327+ ret = IO_CONCAT (__IO_PREFIX ,ioread8 )(addr );
326328 mb ();
327329 return ret ;
328330}
329331
330332extern inline unsigned int ioread16 (void __iomem * addr )
331333{
332- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread16 )(addr );
334+ unsigned int ret ;
335+ mb ();
336+ ret = IO_CONCAT (__IO_PREFIX ,ioread16 )(addr );
333337 mb ();
334338 return ret ;
335339}
@@ -370,7 +374,9 @@ extern inline void outw(u16 b, unsigned long port)
370374#if IO_CONCAT (__IO_PREFIX ,trivial_io_lq )
371375extern inline unsigned int ioread32 (void __iomem * addr )
372376{
373- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread32 )(addr );
377+ unsigned int ret ;
378+ mb ();
379+ ret = IO_CONCAT (__IO_PREFIX ,ioread32 )(addr );
374380 mb ();
375381 return ret ;
376382}
@@ -415,14 +421,18 @@ extern inline void __raw_writew(u16 b, volatile void __iomem *addr)
415421
416422extern inline u8 readb (const volatile void __iomem * addr )
417423{
418- u8 ret = __raw_readb (addr );
424+ u8 ret ;
425+ mb ();
426+ ret = __raw_readb (addr );
419427 mb ();
420428 return ret ;
421429}
422430
423431extern inline u16 readw (const volatile void __iomem * addr )
424432{
425- u16 ret = __raw_readw (addr );
433+ u16 ret ;
434+ mb ();
435+ ret = __raw_readw (addr );
426436 mb ();
427437 return ret ;
428438}
@@ -463,14 +473,18 @@ extern inline void __raw_writeq(u64 b, volatile void __iomem *addr)
463473
464474extern inline u32 readl (const volatile void __iomem * addr )
465475{
466- u32 ret = __raw_readl (addr );
476+ u32 ret ;
477+ mb ();
478+ ret = __raw_readl (addr );
467479 mb ();
468480 return ret ;
469481}
470482
471483extern inline u64 readq (const volatile void __iomem * addr )
472484{
473- u64 ret = __raw_readq (addr );
485+ u64 ret ;
486+ mb ();
487+ ret = __raw_readq (addr );
474488 mb ();
475489 return ret ;
476490}
@@ -499,14 +513,44 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
499513#define outb_p outb
500514#define outw_p outw
501515#define outl_p outl
502- #define readb_relaxed (addr ) __raw_readb (addr )
503- #define readw_relaxed (addr ) __raw_readw (addr )
504- #define readl_relaxed (addr ) __raw_readl (addr )
505- #define readq_relaxed (addr ) __raw_readq (addr )
506- #define writeb_relaxed (b , addr ) __raw_writeb (b , addr )
507- #define writew_relaxed (b , addr ) __raw_writew (b , addr )
508- #define writel_relaxed (b , addr ) __raw_writel (b , addr )
509- #define writeq_relaxed (b , addr ) __raw_writeq (b , addr )
516+
517+ extern u8 readb_relaxed (const volatile void __iomem * addr );
518+ extern u16 readw_relaxed (const volatile void __iomem * addr );
519+ extern u32 readl_relaxed (const volatile void __iomem * addr );
520+ extern u64 readq_relaxed (const volatile void __iomem * addr );
521+
522+ #if IO_CONCAT (__IO_PREFIX ,trivial_io_bw )
523+ extern inline u8 readb_relaxed (const volatile void __iomem * addr )
524+ {
525+ mb ();
526+ return __raw_readb (addr );
527+ }
528+
529+ extern inline u16 readw_relaxed (const volatile void __iomem * addr )
530+ {
531+ mb ();
532+ return __raw_readw (addr );
533+ }
534+ #endif
535+
536+ #if IO_CONCAT (__IO_PREFIX ,trivial_io_lq )
537+ extern inline u32 readl_relaxed (const volatile void __iomem * addr )
538+ {
539+ mb ();
540+ return __raw_readl (addr );
541+ }
542+
543+ extern inline u64 readq_relaxed (const volatile void __iomem * addr )
544+ {
545+ mb ();
546+ return __raw_readq (addr );
547+ }
548+ #endif
549+
550+ #define writeb_relaxed writeb
551+ #define writew_relaxed writew
552+ #define writel_relaxed writel
553+ #define writeq_relaxed writeq
510554
511555/*
512556 * String version of IO memory access ops:
0 commit comments