From: Daniel Ritz extend cb_writel(), exca_writeb(), exca_writel() to do a read[lb]() after the write[lb]() to avoid possible problem with PCI write posting. Seems to fix Bug #5061. Signed-off-by: Daniel Ritz Cc: Dominik Brodowski Signed-off-by: Andrew Morton --- drivers/pcmcia/yenta_socket.c | 6 ++++++ 1 files changed, 6 insertions(+) diff -puN drivers/pcmcia/yenta_socket.c~pcmcia-yenta-avoid-pci-write-posting-problem drivers/pcmcia/yenta_socket.c --- devel/drivers/pcmcia/yenta_socket.c~pcmcia-yenta-avoid-pci-write-posting-problem 2005-08-17 21:42:55.000000000 -0700 +++ devel-akpm/drivers/pcmcia/yenta_socket.c 2005-08-17 21:42:55.000000000 -0700 @@ -72,6 +72,7 @@ static inline void cb_writel(struct yent { debug("%p %04x %08x\n", socket, reg, val); writel(val, socket->base + reg); + readl(socket->base + reg); /* avoid problems with PCI write posting */ } static inline u8 config_readb(struct yenta_socket *socket, unsigned offset) @@ -136,6 +137,7 @@ static inline void exca_writeb(struct ye { debug("%p %04x %02x\n", socket, reg, val); writeb(val, socket->base + 0x800 + reg); + readb(socket->base + 0x800 + reg); /* PCI write posting... */ } static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val) @@ -143,6 +145,10 @@ static void exca_writew(struct yenta_soc debug("%p %04x %04x\n", socket, reg, val); writeb(val, socket->base + 0x800 + reg); writeb(val >> 8, socket->base + 0x800 + reg + 1); + + /* PCI write posting... */ + readb(socket->base + 0x800 + reg); + readb(socket->base + 0x800 + reg + 1); } /* _