From: Daniel Ritz <daniel.ritz@gmx.ch>

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 <daniel.ritz@gmx.ch>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
 }
 
 /*
_