@@ -310,14 +310,18 @@ static inline int __is_mmio(const volatile void __iomem *addr)
310310#if IO_CONCAT (__IO_PREFIX ,trivial_io_bw )
311311extern inline unsigned int ioread8 (void __iomem * addr )
312312{
313- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread8 )(addr );
313+ unsigned int ret ;
314+ mb ();
315+ ret = IO_CONCAT (__IO_PREFIX ,ioread8 )(addr );
314316 mb ();
315317 return ret ;
316318}
317319
318320extern inline unsigned int ioread16 (void __iomem * addr )
319321{
320- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread16 )(addr );
322+ unsigned int ret ;
323+ mb ();
324+ ret = IO_CONCAT (__IO_PREFIX ,ioread16 )(addr );
321325 mb ();
322326 return ret ;
323327}
@@ -358,7 +362,9 @@ extern inline void outw(u16 b, unsigned long port)
358362#if IO_CONCAT (__IO_PREFIX ,trivial_io_lq )
359363extern inline unsigned int ioread32 (void __iomem * addr )
360364{
361- unsigned int ret = IO_CONCAT (__IO_PREFIX ,ioread32 )(addr );
365+ unsigned int ret ;
366+ mb ();
367+ ret = IO_CONCAT (__IO_PREFIX ,ioread32 )(addr );
362368 mb ();
363369 return ret ;
364370}
@@ -403,14 +409,18 @@ extern inline void __raw_writew(u16 b, volatile void __iomem *addr)
403409
404410extern inline u8 readb (const volatile void __iomem * addr )
405411{
406- u8 ret = __raw_readb (addr );
412+ u8 ret ;
413+ mb ();
414+ ret = __raw_readb (addr );
407415 mb ();
408416 return ret ;
409417}
410418
411419extern inline u16 readw (const volatile void __iomem * addr )
412420{
413- u16 ret = __raw_readw (addr );
421+ u16 ret ;
422+ mb ();
423+ ret = __raw_readw (addr );
414424 mb ();
415425 return ret ;
416426}
@@ -451,14 +461,18 @@ extern inline void __raw_writeq(u64 b, volatile void __iomem *addr)
451461
452462extern inline u32 readl (const volatile void __iomem * addr )
453463{
454- u32 ret = __raw_readl (addr );
464+ u32 ret ;
465+ mb ();
466+ ret = __raw_readl (addr );
455467 mb ();
456468 return ret ;
457469}
458470
459471extern inline u64 readq (const volatile void __iomem * addr )
460472{
461- u64 ret = __raw_readq (addr );
473+ u64 ret ;
474+ mb ();
475+ ret = __raw_readq (addr );
462476 mb ();
463477 return ret ;
464478}
@@ -487,14 +501,44 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
487501#define outb_p outb
488502#define outw_p outw
489503#define outl_p outl
490- #define readb_relaxed (addr ) __raw_readb (addr )
491- #define readw_relaxed (addr ) __raw_readw (addr )
492- #define readl_relaxed (addr ) __raw_readl (addr )
493- #define readq_relaxed (addr ) __raw_readq (addr )
494- #define writeb_relaxed (b , addr ) __raw_writeb (b , addr )
495- #define writew_relaxed (b , addr ) __raw_writew (b , addr )
496- #define writel_relaxed (b , addr ) __raw_writel (b , addr )
497- #define writeq_relaxed (b , addr ) __raw_writeq (b , addr )
504+
505+ extern u8 readb_relaxed (const volatile void __iomem * addr );
506+ extern u16 readw_relaxed (const volatile void __iomem * addr );
507+ extern u32 readl_relaxed (const volatile void __iomem * addr );
508+ extern u64 readq_relaxed (const volatile void __iomem * addr );
509+
510+ #if IO_CONCAT (__IO_PREFIX ,trivial_io_bw )
511+ extern inline u8 readb_relaxed (const volatile void __iomem * addr )
512+ {
513+ mb ();
514+ return __raw_readb (addr );
515+ }
516+
517+ extern inline u16 readw_relaxed (const volatile void __iomem * addr )
518+ {
519+ mb ();
520+ return __raw_readw (addr );
521+ }
522+ #endif
523+
524+ #if IO_CONCAT (__IO_PREFIX ,trivial_io_lq )
525+ extern inline u32 readl_relaxed (const volatile void __iomem * addr )
526+ {
527+ mb ();
528+ return __raw_readl (addr );
529+ }
530+
531+ extern inline u64 readq_relaxed (const volatile void __iomem * addr )
532+ {
533+ mb ();
534+ return __raw_readq (addr );
535+ }
536+ #endif
537+
538+ #define writeb_relaxed writeb
539+ #define writew_relaxed writew
540+ #define writel_relaxed writel
541+ #define writeq_relaxed writeq
498542
499543/*
500544 * String version of IO memory access ops:
0 commit comments