linux-mips
[Top] [All Lists]

Re: [MIPS] Workaround for a sparse warning in include/asm-mips/io.h

To: macro@linux-mips.org
Subject: Re: [MIPS] Workaround for a sparse warning in include/asm-mips/io.h
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Date: Fri, 13 Jul 2007 00:23:18 +0900 (JST)
Cc: linux-mips@linux-mips.org
In-reply-to: <Pine.LNX.4.64N.0707121541190.3029@blysk.ds.pg.gda.pl>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <S20022480AbXGLO2a/20070712142830Z+14663@ftp.linux-mips.org> <Pine.LNX.4.64N.0707121541190.3029@blysk.ds.pg.gda.pl>
Sender: linux-mips-bounce@linux-mips.org
On Thu, 12 Jul 2007 15:47:04 +0100 (BST), "Maciej W. Rozycki" 
<macro@linux-mips.org> wrote:
> > CKSEG1ADDR() returns unsigned int value on 32bit kernel.  Cast it to
> 
>  This is not true.  With a 32-bit kernel CKSEG1ADDR(), quite 
> intentionally, returns a *signed* int.

Yes, the comment was wrong.  Thanks.

>  Since you have decided to fix the symptom rather than the bug I would at 
> least suggest to cast the result to "long" first and only then drop the 
> signedness.  Otherwise it looks misleading to a casual reader.

OK, I added cast to "long", and a comment to why the cast was
introduced.


Subject: [MIPS] Workaround for a sparse warning in include/asm-mips/io.h (part 
2)

Since CKSEG1ADDR() returns "signed int" (on 32bit), cast it to "long"
first to avoid misleading.  Also add a comment why the cast to
"unsigned long" was introduced.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
---
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h
index 7ba9289..ad60863 100644
--- a/include/asm-mips/io.h
+++ b/include/asm-mips/io.h
@@ -212,8 +212,9 @@ static inline void __iomem * __ioremap_mode(phys_t offset, 
unsigned long size,
                 */
                if (__IS_LOW512(phys_addr) && __IS_LOW512(last_addr) &&
                    flags == _CACHE_UNCACHED)
+                       /* The cast to unsigned long makes sparse happy */
                        return (void __iomem *)
-                               (unsigned long)CKSEG1ADDR(phys_addr);
+                               (unsigned long)(long)CKSEG1ADDR(phys_addr);
        }
 
        return __ioremap(offset, size, flags);

<Prev in Thread] Current Thread [Next in Thread>