summaryrefslogtreecommitdiffstats
path: root/drivers/staging/unisys
diff options
context:
space:
mode:
authorKen Cox <jkc@redhat.com>2014-03-13 15:39:20 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-03-17 14:45:44 -0700
commit8504ff6cab9cc43591999e542e437445db5cfd92 (patch)
treef47bd280b239190b7a1146ff20a4d08c9be2dbb7 /drivers/staging/unisys
parenta8d7f21d14e2b24dc18d53d597df290b89bb115c (diff)
Staging: unisys: uislib: Cleanup sparse warnings in uislib
Clean up code to get rid of sparse warnings, mostly related to accessing I/O space. Remove uislibcmpxchg64() and use cmpxchg() instead. Signed-off-by: Ken Cox <jkc@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r--drivers/staging/unisys/include/uisqueue.h56
-rw-r--r--drivers/staging/unisys/include/uisutils.h8
-rw-r--r--drivers/staging/unisys/uislib/uisqueue.c12
3 files changed, 22 insertions, 54 deletions
diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h
index a9d95d30091..6dab3900994 100644
--- a/drivers/staging/unisys/include/uisqueue.h
+++ b/drivers/staging/unisys/include/uisqueue.h
@@ -34,7 +34,7 @@
struct uisqueue_info {
- pCHANNEL_HEADER chan;
+ CHANNEL_HEADER __iomem *chan;
/* channel containing queues in which scsi commands &
* responses are queued
*/
@@ -75,9 +75,9 @@ struct uisqueue_info {
".previous\n" \
"661:\n\tlock; "
-unsigned long long uisqueue_InterlockedOr(volatile unsigned long long *Target,
+unsigned long long uisqueue_InterlockedOr(unsigned long long __iomem *Target,
unsigned long long Set);
-unsigned long long uisqueue_InterlockedAnd(volatile unsigned long long *Target,
+unsigned long long uisqueue_InterlockedAnd(unsigned long long __iomem *Target,
unsigned long long Set);
unsigned int uisqueue_send_int_if_needed(struct uisqueue_info *pqueueinfo,
@@ -133,7 +133,7 @@ struct extport_info {
};
struct device_info {
- void *chanptr;
+ void __iomem *chanptr;
U64 channelAddr;
U64 channelBytes;
GUID channelTypeGuid;
@@ -164,7 +164,7 @@ struct bus_info {
struct device_info **device;
U64 guestHandle, recvBusInterruptHandle;
GUID busInstGuid;
- ULTRA_VBUS_CHANNEL_PROTOCOL *pBusChannel;
+ ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *pBusChannel;
int busChannelBytes;
struct proc_dir_entry *proc_dir; /* proc/uislib/vbus/<x> */
struct proc_dir_entry *proc_info; /* proc/uislib/vbus/<x>/info */
@@ -352,8 +352,8 @@ typedef enum {
} GUESTPART_MSG_TYPE;
struct add_vbus_guestpart {
- void *chanptr; /* pointer to data channel for bus -
- * NOT YET USED */
+ void __iomem *chanptr; /* pointer to data channel for bus -
+ * NOT YET USED */
U32 busNo; /* bus number to be created/deleted */
U32 deviceCount; /* max num of devices on bus */
GUID busTypeGuid; /* indicates type of bus */
@@ -368,7 +368,7 @@ struct del_vbus_guestpart {
};
struct add_virt_guestpart {
- void *chanptr; /* pointer to data channel */
+ void __iomem *chanptr; /* pointer to data channel */
U32 busNo; /* bus number for the operation */
U32 deviceNo; /* number of device on the bus */
GUID devInstGuid; /* instance guid for device */
@@ -382,15 +382,15 @@ struct add_virt_guestpart {
};
struct pause_virt_guestpart {
- void *chanptr; /* pointer to data channel */
+ void __iomem *chanptr; /* pointer to data channel */
};
struct resume_virt_guestpart {
- void *chanptr; /* pointer to data channel */
+ void __iomem *chanptr; /* pointer to data channel */
};
struct del_virt_guestpart {
- void *chanptr; /* pointer to data channel */
+ void __iomem *chanptr; /* pointer to data channel */
};
struct init_chipset_guestpart {
@@ -435,38 +435,6 @@ struct guest_msgs {
* guests.
*/
-static inline unsigned long
-uislibcmpxchg64(volatile void *ptr, unsigned long old, unsigned long new,
- int size)
-{
- unsigned long prev;
- switch (size) {
- case 1:
- __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgb %b1,%2":"=a"(prev)
- : "q"(new), "m"(*__xg(ptr)),
- "0"(old)
- : "memory");
- return prev;
- case 2:
- __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgw %w1,%2":"=a"(prev)
- : "r"(new), "m"(*__xg(ptr)),
- "0"(old)
- : "memory");
- return prev;
- case 4:
- __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgl %k1,%2":"=a"(prev)
- : "r"(new), "m"(*__xg(ptr)),
- "0"(old)
- : "memory");
- return prev;
- case 8:
- __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgq %1,%2":"=a"(prev)
- : "r"(new), "m"(*__xg(ptr)),
- "0"(old)
- : "memory");
- return prev;
- }
- return old;
-}
+#define uislibcmpxchg64(p, o, n, s) cmpxchg(p, o, n)
#endif /* __UISQUEUE_H__ */
diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h
index 44e2be0b70a..81b5d9baea5 100644
--- a/drivers/staging/unisys/include/uisutils.h
+++ b/drivers/staging/unisys/include/uisutils.h
@@ -79,10 +79,10 @@ int ReqHandlerDel(GUID switchTypeGuid);
#define uislib_ioremap_cache(addr, size) \
dbg_ioremap_cache(addr, size, __FILE__, __LINE__)
-static inline void *
+static inline void __iomem *
dbg_ioremap_cache(U64 addr, unsigned long size, char *file, int line)
{
- void *new;
+ void __iomem *new;
new = ioremap_cache(addr, size);
return new;
}
@@ -100,7 +100,7 @@ dbg_ioremap(U64 addr, unsigned long size, char *file, int line)
#define uislib_iounmap(addr) dbg_iounmap(addr, __FILE__, __LINE__)
static inline void
-dbg_iounmap(void *addr, char *file, int line)
+dbg_iounmap(void __iomem *addr, char *file, int line)
{
iounmap(addr);
}
@@ -202,7 +202,7 @@ struct chaninfo {
*/
#define WAIT_FOR_VALID_GUID(guid) \
do { \
- while (memcmp(&guid, &Guid0, sizeof(Guid0)) == 0) { \
+ while (MEMCMP_IO(&guid, &Guid0, sizeof(Guid0)) == 0) { \
LOGERR("Waiting for non-0 GUID (why???)...\n"); \
UIS_THREAD_WAIT_SEC(5); \
} \
diff --git a/drivers/staging/unisys/uislib/uisqueue.c b/drivers/staging/unisys/uislib/uisqueue.c
index 19ce76ac21e..a7a8b2ed55c 100644
--- a/drivers/staging/unisys/uislib/uisqueue.c
+++ b/drivers/staging/unisys/uislib/uisqueue.c
@@ -39,16 +39,16 @@
/* Exported functions */
/*****************************************************/
unsigned long long
-uisqueue_InterlockedOr(volatile unsigned long long *Target,
+uisqueue_InterlockedOr(unsigned long long __iomem *Target,
unsigned long long Set)
{
unsigned long long i;
unsigned long long j;
- j = *Target;
+ j = readq(Target);
do {
i = j;
- j = uislibcmpxchg64((unsigned long long *) Target,
+ j = uislibcmpxchg64((__force unsigned long long *)Target,
i, i | Set, sizeof(*(Target)));
} while (i != j);
@@ -58,16 +58,16 @@ uisqueue_InterlockedOr(volatile unsigned long long *Target,
EXPORT_SYMBOL_GPL(uisqueue_InterlockedOr);
unsigned long long
-uisqueue_InterlockedAnd(volatile unsigned long long *Target,
+uisqueue_InterlockedAnd(unsigned long long __iomem *Target,
unsigned long long Set)
{
unsigned long long i;
unsigned long long j;
- j = *Target;
+ j = readq(Target);
do {
i = j;
- j = uislibcmpxchg64((unsigned long long *) Target,
+ j = uislibcmpxchg64((__force unsigned long long *)Target,
i, i & Set, sizeof(*(Target)));
} while (i != j);