Commit b3047281 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Linus Torvalds

[PATCH] ppc64: Fix __raw_* IO accessors

Linus removed the "volatile" statement from the definition of the
__raw_* IO accessors on ppc64, which cause some real bad optisations to
happen in some fbdev's like matroxfb to happen (just imagine that
matroxfb loops reading an IO register waiting for a bit to change).

The __raw_xxxx() functions still want ordered accesses (they avoid the
byteswap, though)
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kenrel.crashing.org>
parent 088b4154
......@@ -71,35 +71,35 @@ extern unsigned long pci_io_base;
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
{
return *(unsigned char __force *)addr;
return *(volatile unsigned char __force *)addr;
}
static inline unsigned short __raw_readw(const volatile void __iomem *addr)
{
return *(unsigned short __force *)addr;
return *(volatile unsigned short __force *)addr;
}
static inline unsigned int __raw_readl(const volatile void __iomem *addr)
{
return *(unsigned int __force *)addr;
return *(volatile unsigned int __force *)addr;
}
static inline unsigned long __raw_readq(const volatile void __iomem *addr)
{
return *(unsigned long __force *)addr;
return *(volatile unsigned long __force *)addr;
}
static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr)
{
*(unsigned char __force *)addr = v;
*(volatile unsigned char __force *)addr = v;
}
static inline void __raw_writew(unsigned short v, volatile void __iomem *addr)
{
*(unsigned short __force *)addr = v;
*(volatile unsigned short __force *)addr = v;
}
static inline void __raw_writel(unsigned int v, volatile void __iomem *addr)
{
*(unsigned int __force *)addr = v;
*(volatile unsigned int __force *)addr = v;
}
static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
{
*(unsigned long __force *)addr = v;
*(volatile unsigned long __force *)addr = v;
}
#define readb(addr) eeh_readb(addr)
#define readw(addr) eeh_readw(addr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment