lkml.org 
[lkml]   [2006]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: 2.6.17-rc5-mm2 link issues on s390
Heiko Carstens wrote:

> This looks wrong: "b" is a u64 and you write it to something that is an
> unsigned long. We're going to miss a few bits on 31 bit platforms...

Indeed. Here's another version protecting the quad macros with __s390x__.
to be applied on rc6-mm1.

For the moment, __raw_writeq() is needed by __iowrite64_copy() which is
protected by CONFIG_64BIT. Some drivers also use it.

Thanks for reviewing,

C.
From: Cedric Le Goater <clg@fr.ibm.com>
Replace-Subject: s390 adds __raw_writeq required by __iowrite64_copy.

It also adds all the related quad routines.

Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>

---
include/asm-s390/io.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Index: 2.6.17-rc6-mm1/include/asm-s390/io.h
===================================================================
--- 2.6.17-rc6-mm1.orig/include/asm-s390/io.h
+++ 2.6.17-rc6-mm1/include/asm-s390/io.h
@@ -86,20 +86,35 @@ extern void iounmap(void *addr);
#define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
#define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
#define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
+#ifdef __s390x__
+#define readq(addr) (*(volatile unsigned long *) __io_virt(addr))
+#endif

#define readb_relaxed(addr) readb(addr)
#define readw_relaxed(addr) readw(addr)
#define readl_relaxed(addr) readl(addr)
+#ifdef __s390x__
+#define readq_relaxed(addr) readq(addr)
+#endif
#define __raw_readb readb
#define __raw_readw readw
#define __raw_readl readl
+#ifdef __s390x__
+#define __raw_readq readq
+#endif

#define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
#define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
#define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
+#ifdef __s390x__
+#define writeq(b,addr) (*(volatile unsigned long *) __io_virt(addr) = (b))
+#endif
#define __raw_writeb writeb
#define __raw_writew writew
#define __raw_writel writel
+#ifdef __s390x__
+#define __raw_writeq writeq
+#endif

#define memset_io(a,b,c) memset(__io_virt(a),(b),(c))
#define memcpy_fromio(a,b,c) memcpy((a),__io_virt(b),(c))
\
 
 \ /
  Last update: 2006-06-08 11:17    [W:0.086 / U:4.956 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site