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
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel