checkpatch now gives 0 warnings or errors on both dgap.c and dgap.h
so I'm now looking at sparse errors/warnings. There are many and I'm
not really clear as to the best way to address them. This is my first 
exposure to sparse. A quick internet search reveals that using "__iomem"
in some way is the proper fix for most of what I see? 

Here is an initial sparse output showing only the first few:

  CHECK   drivers/staging/dgap/dgap.c
drivers/staging/dgap/dgap.c:652:28: warning: incorrect type in argument 1 
(different address spaces)
drivers/staging/dgap/dgap.c:652:28:    expected void volatile [noderef] 
<asn:2>*addr
drivers/staging/dgap/dgap.c:652:28:    got unsigned char *re_map_port
drivers/staging/dgap/dgap.c:658:28: warning: incorrect type in argument 1 
(different address spaces)
drivers/staging/dgap/dgap.c:658:28:    expected void volatile [noderef] 
<asn:2>*addr
drivers/staging/dgap/dgap.c:658:28:    got unsigned char *re_map_membase
drivers/staging/dgap/dgap.c:977:29: warning: incorrect type in assignment 
(different address spaces)
drivers/staging/dgap/dgap.c:977:29:    expected unsigned char *re_map_membase
drivers/staging/dgap/dgap.c:977:29:    got void [noderef] <asn:2>*
drivers/staging/dgap/dgap.c:984:26: warning: incorrect type in assignment 
(different address spaces)
drivers/staging/dgap/dgap.c:984:26:    expected unsigned char *re_map_port
drivers/staging/dgap/dgap.c:984:26:    got void [noderef] <asn:2>*
drivers/staging/dgap/dgap.c:988:28: warning: incorrect type in argument 1 
(different address spaces)
drivers/staging/dgap/dgap.c:988:28:    expected void volatile [noderef] 
<asn:2>*addr
drivers/staging/dgap/dgap.c:988:28:    got unsigned char *re_map_membase
drivers/staging/dgap/dgap.c:2057:32: warning: incorrect type in argument 1 
(different address spaces)
drivers/staging/dgap/dgap.c:2057:32:    expected void const volatile [noderef] 
<asn:2>*addr
drivers/staging/dgap/dgap.c:2057:32:    got unsigned short *<noident>
drivers/staging/dgap/dgap.c:2058:32: warning: incorrect type in argument 2 
(different address spaces)
drivers/staging/dgap/dgap.c:2058:32:    expected void volatile [noderef] 
<asn:2>*addr
drivers/staging/dgap/dgap.c:2058:32:    got unsigned short *<noident>

This patch seems to fix the first 5 but is it the correct way?

diff --git a/drivers/staging/dgap/dgap.h b/drivers/staging/dgap/dgap.h
index e9ba2a4..07e12fd 100644
--- a/drivers/staging/dgap/dgap.h
+++ b/drivers/staging/dgap/dgap.h
@@ -574,8 +574,8 @@ struct board_t {
        ulong           membase;        /* Start of base memory of the card */
        ulong           membase_end;    /* End of base memory of the card */
 
-       uchar           *re_map_port;   /* Remapped io port of the card */
-       uchar           *re_map_membase;/* Remapped memory of the card */
+       void __iomem    *re_map_port;   /* Remapped io port of the card */
+       void __iomem    *re_map_membase;/* Remapped memory of the card */
 
        uchar           runwait;        /* # Processes waiting for FEP  */
        uchar           inhibit_poller; /* Tells the poller to leave us alone */

And then the last 2 warnings there seems to be a number of ways:

diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
index 4bbedae..cd60d50 100644
--- a/drivers/staging/dgap/dgap.c
+++ b/drivers/staging/dgap/dgap.c
@@ -2054,8 +2054,8 @@ static int dgap_tty_open(struct tty_struct *tty, struct 
file *file)
                /*
                 * Flush input queue.
                 */
-               head = readw(&(bs->rx_head));
-               writew(head, &(bs->rx_tail));
+               head = readw((void __iomem *)&bs->rx_head);
+               writew(head, (void __iomem *)&bs->rx_tail);
 
                ch->ch_flags = 0;
                ch->pscan_state = 0;

Or this, which actually causes other warnings

diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
index 4bbedae..ceb82f1 100644
--- a/drivers/staging/dgap/dgap.c
+++ b/drivers/staging/dgap/dgap.c
@@ -1953,7 +1953,7 @@ static int dgap_tty_open(struct tty_struct *tty, struct 
file *file)
        struct board_t  *brd;
        struct channel_t *ch;
        struct un_t     *un;
-       struct bs_t     *bs;
+       struct bs_t __iomem     *bs;
        uint            major = 0;
        uint            minor = 0;
        int             rc = 0;

Thanks for any pointers
Mark
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to