Patchwork [3.5.y.z,extended,stable] Patch "CRIS: fix I/O macros" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Jan. 7, 2013, 8:39 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/210230/
State New
Headers show


Herton Ronaldo Krzesinski - Jan. 7, 2013, 8:39 p.m.
This is a note to let you know that I have just added a patch titled

    CRIS: fix I/O macros

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 94103da5005e960d292cc14f3e50b8a98fd378ba Mon Sep 17 00:00:00 2001
From: Corey Minyard <>
Date: Tue, 18 Dec 2012 14:21:19 -0800
Subject: [PATCH] CRIS: fix I/O macros

commit c24bf9b4cc6a0f330ea355d73bfdf1dae7e63a05 upstream.

The inb/outb macros for CRIS are broken from a number of points of view,
missing () around parameters and they have an unprotected if statement
in them.  This was breaking the compile of IPMI on CRIS and thus I was
being annoyed by build regressions, so I fixed them.

Plus I don't think they would have worked at all, since the data values
were missing "&" and the outsl had a "3" instead of a "4" for the size.
From what I can tell, this stuff is not used at all, so this can't be
any more broken than it was before, anyway.

Signed-off-by: Corey Minyard <>
Cc: Jesper Nilsson <>
Cc: Mikael Starvik <>
Acked-by: Geert Uytterhoeven <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 arch/cris/include/asm/io.h |   39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)



diff --git a/arch/cris/include/asm/io.h b/arch/cris/include/asm/io.h
index 32567bc..ac12ae2 100644
--- a/arch/cris/include/asm/io.h
+++ b/arch/cris/include/asm/io.h
@@ -133,12 +133,39 @@  static inline void writel(unsigned int b, volatile void __iomem *addr)
 #define insb(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,1,count) : 0)
 #define insw(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,2,count) : 0)
 #define insl(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,4,count) : 0)
-#define outb(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,1,1)
-#define outw(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,2,1)
-#define outl(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,4,1)
-#define outsb(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,1,count)
-#define outsw(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,2,count)
-#define outsl(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,3,count)
+static inline void outb(unsigned char data, unsigned int port)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *) &data, 1, 1);
+static inline void outw(unsigned short data, unsigned int port)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *) &data, 2, 1);
+static inline void outl(unsigned int data, unsigned int port)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *) &data, 4, 1);
+static inline void outsb(unsigned int port, const void *addr,
+			 unsigned long count)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *)addr, 1, count);
+static inline void outsw(unsigned int port, const void *addr,
+			 unsigned long count)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *)addr, 2, count);
+static inline void outsl(unsigned int port, const void *addr,
+			 unsigned long count)
+	if (cris_iops)
+		cris_iops->write_io(port, (void *)addr, 4, count);

  * Convert a physical pointer to a virtual kernel pointer for /dev/mem