[PATCH 2/6] Staging: unisys: Clean multiple sparse warnings

Ken Cox jkc at redhat.com
Thu Mar 13 20:39:19 UTC 2014


Cleaned up multiple sparse warnings, mostly due to improper access of I/O
space.  Also declared functions and variables that were only used locally
as static.

Removed ULTRA_disp_channel_header(), ULTRA_disp_channel(),
ULTRA_disp_vnic_channel() because they were never called.

Signed-off-by: Ken Cox <jkc at redhat.com>
---
 .../unisys/common-spar/include/channels/channel.h  | 142 +++++++++++----------
 .../common-spar/include/channels/iochannel.h       |   9 +-
 .../common-spar/include/channels/vbuschannel.h     |  46 ++++---
 .../unisys/common-spar/include/vbusdeviceinfo.h    |  22 ++--
 .../unisys/common-spar/include/vmcallinterface.h   |   2 +-
 drivers/staging/unisys/uislib/uislib.c             | 115 ++++-------------
 drivers/staging/unisys/virthba/virthba.c           |  62 ++++-----
 drivers/staging/unisys/virtpci/virtpci.c           |  54 +++++---
 8 files changed, 209 insertions(+), 243 deletions(-)

diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h
index 284ac68..aee2041 100644
--- a/drivers/staging/unisys/common-spar/include/channels/channel.h
+++ b/drivers/staging/unisys/common-spar/include/channels/channel.h
@@ -105,7 +105,7 @@ ULTRA_CHANNELCLI_STRING(U32 v)
 
 #define ULTRA_CHANNELSRV_IS_READY(x)     ((x) == CHANNELSRV_READY)
 #define ULTRA_CHANNEL_SERVER_READY(pChannel) \
-	(ULTRA_CHANNELSRV_IS_READY((pChannel)->SrvState))
+	(ULTRA_CHANNELSRV_IS_READY(readl(&(pChannel)->SrvState)))
 
 #define ULTRA_VALID_CHANNELCLI_TRANSITION(o, n)				\
 	(((((o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_DISABLED)) || \
@@ -144,25 +144,30 @@ ULTRA_CHANNELCLI_STRING(U32 v)
 				      line);				\
 	} while (0)
 
-#define ULTRA_CHANNEL_CLIENT_TRANSITION(pChan, chanId, field, \
+#define ULTRA_CHANNEL_CLIENT_TRANSITION(pChan, chanId,			\
 					newstate, logCtx)		\
 	do {								\
 		ULTRA_CHANNEL_CLIENT_CHK_TRANSITION(			\
-			(((CHANNEL_HEADER *)(pChan))->field), newstate, \
+			readl(&(((CHANNEL_HEADER __iomem *) \
+				 (pChan))->CliStateOS)),		\
+			newstate,					\
 			chanId, logCtx, __FILE__, __LINE__);		\
 		UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITOK, \
 			CHANNELSTATE_DIAG_SEVERITY, \
 			      CHANNELSTATE_DIAG_SUBSYS,			\
 			      __func__, __LINE__,			\
 			      "%s Channel StateTransition (%s) %s(%d)-->%s(%d) @%s:%d\n", \
-			      chanId, #field,				\
-			      ULTRA_CHANNELCLI_STRING(((CHANNEL_HEADER *) \
-						       (pChan))->field), \
-			      ((CHANNEL_HEADER *)(pChan))->field,	\
+			      chanId, "CliStateOS",			\
+			      ULTRA_CHANNELCLI_STRING( \
+				      readl(&((CHANNEL_HEADER __iomem *) \
+					      (pChan))->CliStateOS)),	\
+			      readl(&((CHANNEL_HEADER __iomem *) \
+				      (pChan))->CliStateOS),		\
 			      ULTRA_CHANNELCLI_STRING(newstate),	\
 			      newstate,					\
 			      PathName_Last_N_Nodes(__FILE__, 4), __LINE__); \
-		((CHANNEL_HEADER *)(pChan))->field = newstate;		\
+		writel(newstate, &((CHANNEL_HEADER __iomem *) \
+				   (pChan))->CliStateOS);		\
 		MEMORYBARRIER;						\
 	} while (0)
 
@@ -314,7 +319,7 @@ typedef struct _SIGNAL_QUEUE_HEADER {
  * is used to pass the EFI_DIAG_CAPTURE_PROTOCOL needed to log messages.
  */
 static inline int
-ULTRA_check_channel_client(void *pChannel,
+ULTRA_check_channel_client(void __iomem *pChannel,
 			   GUID expectedTypeGuid,
 			   char *channelName,
 			   U64 expectedMinBytes,
@@ -324,43 +329,44 @@ ULTRA_check_channel_client(void *pChannel,
 {
 	if (MEMCMP(&expectedTypeGuid, &Guid0, sizeof(GUID)) != 0)
 		/* caller wants us to verify type GUID */
-		if (MEMCMP(&(((CHANNEL_HEADER *) (pChannel))->Type),
+		if (MEMCMP_IO(&(((CHANNEL_HEADER __iomem *) (pChannel))->Type),
 			   &expectedTypeGuid, sizeof(GUID)) != 0) {
 			CHANNEL_GUID_MISMATCH(expectedTypeGuid, channelName,
 					      "type", expectedTypeGuid,
-					      ((CHANNEL_HEADER *)
+					      ((CHANNEL_HEADER __iomem *)
 					       (pChannel))->Type, fileName,
 					      lineNumber, logCtx);
 			return 0;
 		}
 	if (expectedMinBytes > 0)	/* caller wants us to verify
 					 * channel size */
-		if (((CHANNEL_HEADER *) (pChannel))->Size < expectedMinBytes) {
+		if (readq(&((CHANNEL_HEADER __iomem *)
+			   (pChannel))->Size) < expectedMinBytes) {
 			CHANNEL_U64_MISMATCH(expectedTypeGuid, channelName,
 					     "size", expectedMinBytes,
-					     ((CHANNEL_HEADER *)
+					     ((CHANNEL_HEADER __iomem *)
 					      (pChannel))->Size, fileName,
 					     lineNumber, logCtx);
 			return 0;
 		}
 	if (expectedVersionId > 0)	/* caller wants us to verify
 					 * channel version */
-		if (((CHANNEL_HEADER *) (pChannel))->VersionId !=
-		    expectedVersionId) {
+		if (readl(&((CHANNEL_HEADER __iomem *) (pChannel))->VersionId)
+		    != expectedVersionId) {
 			CHANNEL_U32_MISMATCH(expectedTypeGuid, channelName,
 					     "version", expectedVersionId,
-					     ((CHANNEL_HEADER *)
+					     ((CHANNEL_HEADER __iomem *)
 					      (pChannel))->VersionId, fileName,
 					     lineNumber, logCtx);
 			return 0;
 		}
 	if (expectedSignature > 0)	/* caller wants us to verify
 					 * channel signature */
-		if (((CHANNEL_HEADER *) (pChannel))->Signature !=
-		    expectedSignature) {
+		if (readq(&((CHANNEL_HEADER __iomem *) (pChannel))->Signature)
+		    != expectedSignature) {
 			CHANNEL_U64_MISMATCH(expectedTypeGuid, channelName,
 					     "signature", expectedSignature,
-					     ((CHANNEL_HEADER *)
+					     ((CHANNEL_HEADER __iomem *)
 					      (pChannel))->Signature, fileName,
 					     lineNumber, logCtx);
 			return 0;
@@ -422,17 +428,18 @@ PathName_Last_N_Nodes(U8 *s, unsigned int n)
 }
 
 static inline int
-ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
-				char *file, int line, char *func)
+ULTRA_channel_client_acquire_os(void __iomem *pChannel, U8 *chanId,
+				void *logCtx, char *file, int line, char *func)
 {
-	CHANNEL_HEADER *pChan = (CHANNEL_HEADER *) (pChannel);
+	CHANNEL_HEADER __iomem *pChan = pChannel;
 
-	if (pChan->CliStateOS == CHANNELCLI_DISABLED) {
-		if ((pChan->
-		     CliErrorOS & ULTRA_CLIERROROS_THROTTLEMSG_DISABLED) == 0) {
+	if (readl(&pChan->CliStateOS) == CHANNELCLI_DISABLED) {
+		if ((readb(&pChan->CliErrorOS)
+		     & ULTRA_CLIERROROS_THROTTLEMSG_DISABLED) == 0) {
 			/* we are NOT throttling this message */
-			pChan->CliErrorOS |=
-				ULTRA_CLIERROROS_THROTTLEMSG_DISABLED;
+			writeb(readb(&pChan->CliErrorOS) |
+			       ULTRA_CLIERROROS_THROTTLEMSG_DISABLED,
+			       &pChan->CliErrorOS);
 			/* throttle until acquire successful */
 
 			UltraLogEvent(logCtx,
@@ -445,24 +452,25 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 		}
 		return 0;
 	}
-	if ((pChan->CliStateOS != CHANNELCLI_OWNED)
-	    && (pChan->CliStateBoot == CHANNELCLI_DISABLED)) {
+	if ((readl(&pChan->CliStateOS) != CHANNELCLI_OWNED)
+	    && (readl(&pChan->CliStateBoot) == CHANNELCLI_DISABLED)) {
 		/* Our competitor is DISABLED, so we can transition to OWNED */
 		UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITOK,
 			      CHANNELSTATE_DIAG_SEVERITY,
 			      CHANNELSTATE_DIAG_SUBSYS, func, line,
 			      "%s Channel StateTransition (%s) %s(%d)-->%s(%d) @%s:%d\n",
 			      chanId, "CliStateOS",
-			      ULTRA_CHANNELCLI_STRING(pChan->CliStateOS),
-			      pChan->CliStateOS,
+			      ULTRA_CHANNELCLI_STRING(
+				      readl(&pChan->CliStateOS)),
+			      readl(&pChan->CliStateOS),
 			      ULTRA_CHANNELCLI_STRING(CHANNELCLI_OWNED),
 			      CHANNELCLI_OWNED,
 			      PathName_Last_N_Nodes((U8 *) file, 4), line);
-		pChan->CliStateOS = CHANNELCLI_OWNED;
+		writel(CHANNELCLI_OWNED, &pChan->CliStateOS);
 		MEMORYBARRIER;
 	}
-	if (pChan->CliStateOS == CHANNELCLI_OWNED) {
-		if (pChan->CliErrorOS != 0) {
+	if (readl(&pChan->CliStateOS) == CHANNELCLI_OWNED) {
+		if (readb(&pChan->CliErrorOS) != 0) {
 			/* we are in an error msg throttling state;
 			 * come out of it */
 			UltraLogEvent(logCtx,
@@ -472,7 +480,7 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 				      "%s Channel OS client acquire now successful @%s:%d\n",
 				      chanId, PathName_Last_N_Nodes((U8 *) file,
 								    4), line);
-			pChan->CliErrorOS = 0;
+			writeb(0, &pChan->CliErrorOS);
 		}
 		return 1;
 	}
@@ -480,13 +488,13 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 	/* We have to do it the "hard way".  We transition to BUSY,
 	* and can use the channel iff our competitor has not also
 	* transitioned to BUSY. */
-	if (pChan->CliStateOS != CHANNELCLI_ATTACHED) {
-		if ((pChan->
-		     CliErrorOS & ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED) ==
-		    0) {
+	if (readl(&pChan->CliStateOS) != CHANNELCLI_ATTACHED) {
+		if ((readb(&pChan->CliErrorOS)
+		     & ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED) == 0) {
 			/* we are NOT throttling this message */
-			pChan->CliErrorOS |=
-				ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED;
+			writeb(readb(&pChan->CliErrorOS) |
+			       ULTRA_CLIERROROS_THROTTLEMSG_NOTATTACHED,
+			       &pChan->CliErrorOS);
 			/* throttle until acquire successful */
 			UltraLogEvent(logCtx,
 				      CHANNELSTATE_DIAG_EVENTID_TRANSITERR,
@@ -494,20 +502,23 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 				      CHANNELSTATE_DIAG_SUBSYS, func, line,
 				      "%s Channel StateTransition INVALID! - acquire failed because OS client NOT ATTACHED (state=%s(%d)) @%s:%d\n",
 				      chanId,
-				      ULTRA_CHANNELCLI_STRING(pChan->CliStateOS),
-				      pChan->CliStateOS,
+				      ULTRA_CHANNELCLI_STRING(
+					      readl(&pChan->CliStateOS)),
+				      readl(&pChan->CliStateOS),
 				      PathName_Last_N_Nodes((U8 *) file, 4),
 				      line);
 		}
 		return 0;
 	}
-	pChan->CliStateOS = CHANNELCLI_BUSY;
+	writel(CHANNELCLI_BUSY, &pChan->CliStateOS);
 	MEMORYBARRIER;
-	if (pChan->CliStateBoot == CHANNELCLI_BUSY) {
-		if ((pChan->CliErrorOS & ULTRA_CLIERROROS_THROTTLEMSG_BUSY) ==
-		    0) {
+	if (readl(&pChan->CliStateBoot) == CHANNELCLI_BUSY) {
+		if ((readb(&pChan->CliErrorOS)
+		     & ULTRA_CLIERROROS_THROTTLEMSG_BUSY) == 0) {
 			/* we are NOT throttling this message */
-			pChan->CliErrorOS |= ULTRA_CLIERROROS_THROTTLEMSG_BUSY;
+			writeb(readb(&pChan->CliErrorOS) |
+			       ULTRA_CLIERROROS_THROTTLEMSG_BUSY,
+			       &pChan->CliErrorOS);
 			/* throttle until acquire successful */
 			UltraLogEvent(logCtx,
 				      CHANNELSTATE_DIAG_EVENTID_TRANSITBUSY,
@@ -517,11 +528,12 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 				      chanId, PathName_Last_N_Nodes((U8 *) file,
 								    4), line);
 		}
-		pChan->CliStateOS = CHANNELCLI_ATTACHED;	/* reset busy */
+		/* reset busy */
+		writel(CHANNELCLI_ATTACHED, &pChan->CliStateOS);
 		MEMORYBARRIER;
 		return 0;
 	}
-	if (pChan->CliErrorOS != 0) {
+	if (readb(&pChan->CliErrorOS) != 0) {
 		/* we are in an error msg throttling state; come out of it */
 		UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITOK,
 			      CHANNELSTATE_DIAG_SEVERITY,
@@ -529,17 +541,17 @@ ULTRA_channel_client_acquire_os(void *pChannel, U8 *chanId, void *logCtx,
 			      "%s Channel OS client acquire now successful @%s:%d\n",
 			      chanId, PathName_Last_N_Nodes((U8 *) file, 4),
 			      line);
-		pChan->CliErrorOS = 0;
+		writeb(0, &pChan->CliErrorOS);
 	}
 	return 1;
 }
 
 static inline void
-ULTRA_channel_client_release_os(void *pChannel, U8 *chanId, void *logCtx,
-				char *file, int line, char *func)
+ULTRA_channel_client_release_os(void __iomem *pChannel, U8 *chanId,
+				void *logCtx, char *file, int line, char *func)
 {
-	CHANNEL_HEADER *pChan = (CHANNEL_HEADER *) (pChannel);
-	if (pChan->CliErrorOS != 0) {
+	CHANNEL_HEADER __iomem *pChan = pChannel;
+	if (readb(&pChan->CliErrorOS) != 0) {
 		/* we are in an error msg throttling state; come out of it */
 		UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITOK,
 			      CHANNELSTATE_DIAG_SEVERITY,
@@ -547,22 +559,23 @@ ULTRA_channel_client_release_os(void *pChannel, U8 *chanId, void *logCtx,
 			      "%s Channel OS client error state cleared @%s:%d\n",
 			      chanId, PathName_Last_N_Nodes((U8 *) file, 4),
 			      line);
-		pChan->CliErrorOS = 0;
+		writeb(0, &pChan->CliErrorOS);
 	}
-	if (pChan->CliStateOS == CHANNELCLI_OWNED)
+	if (readl(&pChan->CliStateOS) == CHANNELCLI_OWNED)
 		return;
-	if (pChan->CliStateOS != CHANNELCLI_BUSY) {
+	if (readl(&pChan->CliStateOS) != CHANNELCLI_BUSY) {
 		UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITERR,
 			      CHANNELSTATE_DIAG_SEVERITY,
 			      CHANNELSTATE_DIAG_SUBSYS, func, line,
 			      "%s Channel StateTransition INVALID! - release failed because OS client NOT BUSY (state=%s(%d)) @%s:%d\n",
 			      chanId,
-			      ULTRA_CHANNELCLI_STRING(pChan->CliStateOS),
-			      pChan->CliStateOS,
+			      ULTRA_CHANNELCLI_STRING(
+				      readl(&pChan->CliStateOS)),
+			      readl(&pChan->CliStateOS),
 			      PathName_Last_N_Nodes((U8 *) file, 4), line);
 		/* return; */
 	}
-	pChan->CliStateOS = CHANNELCLI_ATTACHED;	/* release busy */
+	writel(CHANNELCLI_ATTACHED, &pChan->CliStateOS); /* release busy */
 }
 
 /*
@@ -584,7 +597,7 @@ ULTRA_channel_client_release_os(void *pChannel, U8 *chanId, void *logCtx,
 * full.
 */
 
-unsigned char visor_signal_insert(pCHANNEL_HEADER pChannel, U32 Queue,
+unsigned char visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, U32 Queue,
 				  void *pSignal);
 
 /*
@@ -606,7 +619,7 @@ unsigned char visor_signal_insert(pCHANNEL_HEADER pChannel, U32 Queue,
 * empty.
 */
 
-unsigned char visor_signal_remove(pCHANNEL_HEADER pChannel, U32 Queue,
+unsigned char visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, U32 Queue,
 				  void *pSignal);
 
 /*
@@ -642,6 +655,7 @@ unsigned int SignalRemoveAll(pCHANNEL_HEADER pChannel, U32 Queue,
 * Return value:
 * 1 if the signal queue is empty, 0 otherwise.
 */
-unsigned char visor_signalqueue_empty(pCHANNEL_HEADER pChannel, U32 Queue);
+unsigned char visor_signalqueue_empty(CHANNEL_HEADER __iomem *pChannel,
+				      U32 Queue);
 
 #endif
diff --git a/drivers/staging/unisys/common-spar/include/channels/iochannel.h b/drivers/staging/unisys/common-spar/include/channels/iochannel.h
index 94e4b2a..8de1d24 100644
--- a/drivers/staging/unisys/common-spar/include/channels/iochannel.h
+++ b/drivers/staging/unisys/common-spar/include/channels/iochannel.h
@@ -33,6 +33,7 @@
 #include "vmcallinterface.h"
 
 #define _ULTRA_CONTROLVM_CHANNEL_INLINE_
+#include <linux/dma-direction.h>
 #include "controlvmchannel.h"
 #include "vbuschannel.h"
 #undef _ULTRA_CONTROLVM_CHANNEL_INLINE_
@@ -142,12 +143,6 @@
 
 /* size of cdb - i.e., scsi cmnd */
 #define MAX_CMND_SIZE 16
-enum dma_data_dir {
-	DMA_DIR_BIDIR = 0,
-	DMA_DIR_TO_DEV,
-	DMA_DIR_FROM_DEV,
-	DMA_DIR_NONE
-};
 
 #define MAX_SENSE_SIZE 64
 
@@ -297,7 +292,7 @@ struct uiscmdrsp_scsi {
 	struct guest_phys_info gpi_list[MAX_PHYS_INFO];	/* physical address
 							 * information for each
 							 * fragment */
-	enum dma_data_dir data_dir;	/* direction of the data, if any */
+	enum dma_data_direction  data_dir; /* direction of the data, if any */
 	struct uisscsi_dest vdest;	/* identifies the virtual hba, id,
 					 * channel, lun to which cmd was sent */
 
diff --git a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h
index ec5a8c0..99dbbcf 100644
--- a/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h
+++ b/drivers/staging/unisys/common-spar/include/channels/vbuschannel.h
@@ -94,32 +94,40 @@ typedef struct _ULTRA_VBUS_CHANNEL_PROTOCOL {
 #define VBUS_CH_SIZE(MAXDEVICES) COVER(VBUS_CH_SIZE_EXACT(MAXDEVICES), 4096)
 
 static INLINE void
-ULTRA_VBUS_init_channel(ULTRA_VBUS_CHANNEL_PROTOCOL *x, int bytesAllocated)
+ULTRA_VBUS_init_channel(ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *x,
+			int bytesAllocated)
 {
 	/* Please note that the memory at <x> does NOT necessarily have space
 	* for DevInfo structs allocated at the end, which is why we do NOT use
 	* <bytesAllocated> to clear. */
-	MEMSET(x, 0, sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL));
+	memset_io(x, 0, sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL));
 	if (bytesAllocated < (int) sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL))
 		return;
-	x->ChannelHeader.VersionId = ULTRA_VBUS_CHANNEL_PROTOCOL_VERSIONID;
-	x->ChannelHeader.Signature = ULTRA_VBUS_CHANNEL_PROTOCOL_SIGNATURE;
-	x->ChannelHeader.SrvState = CHANNELSRV_READY;
-	x->ChannelHeader.HeaderSize = sizeof(x->ChannelHeader);
-	x->ChannelHeader.Size = bytesAllocated;
-	x->ChannelHeader.Type = UltraVbusChannelProtocolGuid;
-	x->ChannelHeader.ZoneGuid = Guid0;
-	x->HdrInfo.structBytes = sizeof(ULTRA_VBUS_HEADERINFO);
-	x->HdrInfo.chpInfoByteOffset = sizeof(ULTRA_VBUS_HEADERINFO);
-	x->HdrInfo.busInfoByteOffset = x->HdrInfo.chpInfoByteOffset
-	    + sizeof(ULTRA_VBUS_DEVICEINFO);
-	x->HdrInfo.devInfoByteOffset = x->HdrInfo.busInfoByteOffset
-	    + sizeof(ULTRA_VBUS_DEVICEINFO);
-	x->HdrInfo.deviceInfoStructBytes = sizeof(ULTRA_VBUS_DEVICEINFO);
+	writel(ULTRA_VBUS_CHANNEL_PROTOCOL_VERSIONID,
+	       &x->ChannelHeader.VersionId);
+	writeq(ULTRA_VBUS_CHANNEL_PROTOCOL_SIGNATURE,
+	       &x->ChannelHeader.Signature);
+	writel(CHANNELSRV_READY, &x->ChannelHeader.SrvState);
+	writel(sizeof(x->ChannelHeader), &x->ChannelHeader.HeaderSize);
+	writeq(bytesAllocated, &x->ChannelHeader.Size);
+	memcpy_toio(&x->ChannelHeader.Type, &UltraVbusChannelProtocolGuid,
+		    sizeof(x->ChannelHeader.Type));
+	memcpy_toio(&x->ChannelHeader.ZoneGuid, &Guid0,
+		    sizeof(x->ChannelHeader.ZoneGuid));
+	writel(sizeof(ULTRA_VBUS_HEADERINFO), &x->HdrInfo.structBytes);
+	writel(sizeof(ULTRA_VBUS_HEADERINFO), &x->HdrInfo.chpInfoByteOffset);
+	writel(readl(&x->HdrInfo.chpInfoByteOffset) +
+	       sizeof(ULTRA_VBUS_DEVICEINFO),
+	       &x->HdrInfo.busInfoByteOffset);
+	writel(readl(&x->HdrInfo.busInfoByteOffset)
+	       + sizeof(ULTRA_VBUS_DEVICEINFO),
+	       &x->HdrInfo.devInfoByteOffset);
+	writel(sizeof(ULTRA_VBUS_DEVICEINFO),
+	       &x->HdrInfo.deviceInfoStructBytes);
 	bytesAllocated -= (sizeof(ULTRA_CHANNEL_PROTOCOL)
-			   + x->HdrInfo.devInfoByteOffset);
-	x->HdrInfo.devInfoCount =
-	    bytesAllocated / x->HdrInfo.deviceInfoStructBytes;
+			   + readl(&x->HdrInfo.devInfoByteOffset));
+	writel(bytesAllocated / readl(&x->HdrInfo.deviceInfoStructBytes),
+	       &x->HdrInfo.devInfoCount);
 }
 
 #pragma pack(pop)
diff --git a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h
index 3736779..ae708fa 100644
--- a/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h
+++ b/drivers/staging/unisys/common-spar/include/vbusdeviceinfo.h
@@ -50,12 +50,12 @@ typedef struct _ULTRA_VBUS_DEVICEINFO {
  * to a buffer at <p>, had it been infinitely big.
  */
 static inline int
-VBUSCHANNEL_sanitize_buffer(char *p, int remain, char *src, int srcmax)
+VBUSCHANNEL_sanitize_buffer(char *p, int remain, char __iomem *src, int srcmax)
 {
 	int chars = 0;
 	int nonprintable_streak = 0;
 	while (srcmax > 0) {
-		if ((*src >= ' ') && (*src < 0x7f)) {
+		if ((readb(src) >= ' ') && (readb(src) < 0x7f)) {
 			if (nonprintable_streak) {
 				if (remain > 0) {
 					*p = ' ';
@@ -67,7 +67,7 @@ VBUSCHANNEL_sanitize_buffer(char *p, int remain, char *src, int srcmax)
 				nonprintable_streak = 0;
 			}
 			if (remain > 0) {
-				*p = *src;
+				*p = readb(src);
 				p++;
 				remain--;
 				chars++;
@@ -146,15 +146,15 @@ VBUSCHANNEL_itoa(char *p, int remain, int num)
  * Returns the number of bytes written to <p>.
  */
 static inline int
-VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO devInfo,
+VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO __iomem *devInfo,
 				  char *p, int remain, int devix)
 {
-	char *psrc;
+	char __iomem *psrc;
 	int nsrc, x, i, pad;
 	int chars = 0;
 
-	psrc = &(devInfo.devType[0]);
-	nsrc = sizeof(devInfo.devType);
+	psrc = &(devInfo->devType[0]);
+	nsrc = sizeof(devInfo->devType);
 	if (VBUSCHANNEL_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0)
 		return 0;
 
@@ -183,8 +183,8 @@ VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO devInfo,
 	VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
 
 	/* emit driver name */
-	psrc = &(devInfo.drvName[0]);
-	nsrc = sizeof(devInfo.drvName);
+	psrc = &(devInfo->drvName[0]);
+	nsrc = sizeof(devInfo->drvName);
 	x = VBUSCHANNEL_sanitize_buffer(p, remain, psrc, nsrc);
 	p += x;
 	remain -= x;
@@ -195,8 +195,8 @@ VBUSCHANNEL_devInfoToStringBuffer(ULTRA_VBUS_DEVICEINFO devInfo,
 	VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
 
 	/* emit strings */
-	psrc = &(devInfo.infoStrings[0]);
-	nsrc = sizeof(devInfo.infoStrings);
+	psrc = &(devInfo->infoStrings[0]);
+	nsrc = sizeof(devInfo->infoStrings);
 	x = VBUSCHANNEL_sanitize_buffer(p, remain, psrc, nsrc);
 	p += x;
 	remain -= x;
diff --git a/drivers/staging/unisys/common-spar/include/vmcallinterface.h b/drivers/staging/unisys/common-spar/include/vmcallinterface.h
index bd8944a..14c4043 100644
--- a/drivers/staging/unisys/common-spar/include/vmcallinterface.h
+++ b/drivers/staging/unisys/common-spar/include/vmcallinterface.h
@@ -32,7 +32,7 @@
 #endif	/*  */
 
 /* define subsystem number for AppOS, used in uislib driver  */
-#define MDS_APPOS 0x4000000000000000	/* subsystem = 62 - AppOS */
+#define MDS_APPOS 0x4000000000000000L	/* subsystem = 62 - AppOS */
 typedef enum {		/* VMCALL identification tuples  */
 	    /* Note: when a new VMCALL is added:
 	     * - the 1st 2 hex digits correspond to one of the
diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c
index 8d7ff94..1737f3a 100644
--- a/drivers/staging/unisys/uislib/uislib.c
+++ b/drivers/staging/unisys/uislib/uislib.c
@@ -62,7 +62,7 @@ static int ProcReadBufferValid;
 static char *ProcReadBuffer;	/* Note this MUST be global,
 					 * because the contents must */
 static unsigned int chipset_inited;
-int callback_count = 0;
+
 #define WAIT_ON_CALLBACK(handle)	\
 	do {			\
 		if (handle)		\
@@ -77,31 +77,16 @@ static int MaxBusCount;		/* maximum number of buses expected */
 static U64 PhysicalDataChan;
 static int PlatformNumber;
 
-/* This is a list of controlvm messages which could not complete
- * immediately, but instead must be occasionally retried until they
- * ultimately succeed/fail.  When this happens,
- * msg->hdr.Flags.responseExpected determines whether or not we will
- * send a controlvm response.
- */
-struct controlvm_retry_entry {
-	CONTROLVM_MESSAGE msg;
-	struct io_msgs cmd;
-	void *obj;
-	int (*controlChanFunc)(struct io_msgs *);
-	struct list_head list_link;
-};
-LIST_HEAD(ControlVmRetryQHead);
-
 static struct uisthread_info Incoming_ThreadInfo;
 static BOOL Incoming_Thread_Started = FALSE;
-LIST_HEAD(List_Polling_Device_Channels);
-unsigned long long tot_moved_to_tail_cnt = 0;
-unsigned long long tot_wait_cnt = 0;
-unsigned long long tot_wakeup_cnt = 0;
-unsigned long long tot_schedule_cnt = 0;
-int en_smart_wakeup = 1;
+static LIST_HEAD(List_Polling_Device_Channels);
+static unsigned long long tot_moved_to_tail_cnt;
+static unsigned long long tot_wait_cnt;
+static unsigned long long tot_wakeup_cnt;
+static unsigned long long tot_schedule_cnt;
+static int en_smart_wakeup = 1;
 static DEFINE_SEMAPHORE(Lock_Polling_Device_Channels);	/* unlocked */
-DECLARE_WAIT_QUEUE_HEAD(Wakeup_Polling_Device_Channels);
+static DECLARE_WAIT_QUEUE_HEAD(Wakeup_Polling_Device_Channels);
 static int Go_Polling_Device_Channels;
 
 static struct proc_dir_entry *uislib_proc_dir;
@@ -144,7 +129,7 @@ static struct proc_dir_entry *disable_proc_entry;
 static struct proc_dir_entry *test_proc_entry;
 #define TEST_PROC_ENTRY_FN "test"
 #endif
-unsigned long long cycles_before_wait, wait_cycles;
+static unsigned long long cycles_before_wait, wait_cycles;
 
 /*****************************************************/
 /* local functions                                   */
@@ -276,11 +261,11 @@ create_bus_proc_entries(struct bus_info *bus)
 
 }
 
-static void *
+static __iomem void *
 init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer)
 {
 	void *rc = NULL;
-	void *pChan = uislib_ioremap_cache(channelAddr, channelBytes);
+	void __iomem *pChan = uislib_ioremap_cache(channelAddr, channelBytes);
 	if (!pChan) {
 		LOGERR("CONTROLVM_BUS_CREATE error: ioremap_cache of channelAddr:%Lx for channelBytes:%llu failed",
 		     (unsigned long long) channelAddr,
@@ -288,7 +273,7 @@ init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer)
 		RETPTR(NULL);
 	}
 	if (isServer) {
-		memset(pChan, 0, channelBytes);
+		memset_io(pChan, 0, channelBytes);
 		if (!ULTRA_VBUS_CHANNEL_OK_SERVER(channelBytes, NULL)) {
 			ERRDRV("%s channel cannot be used", __func__);
 			uislib_iounmap(pChan);
@@ -540,7 +525,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf)
 	sprintf(dev->devid, "vbus%u:dev%u", (unsigned) busNo, (unsigned) devNo);
 	/* map the channel memory for the device. */
 	if (msg->hdr.Flags.testMessage)
-		dev->chanptr = __va(dev->channelAddr);
+		dev->chanptr = (void __iomem *)__va(dev->channelAddr);
 	else {
 		pReqHandler = ReqHandlerFind(dev->channelTypeGuid);
 		if (pReqHandler)
@@ -609,7 +594,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf)
 				     &UltraVhbaChannelProtocolGuid,
 				     sizeof(GUID))) {
 					WAIT_FOR_VALID_GUID(((CHANNEL_HEADER
-							      *) (dev->
+							      __iomem *) (dev->
 								  chanptr))->
 							    Type);
 					if (!ULTRA_VHBA_CHANNEL_OK_CLIENT
@@ -636,7 +621,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf)
 					 &UltraVnicChannelProtocolGuid,
 					 sizeof(GUID))) {
 					WAIT_FOR_VALID_GUID(((CHANNEL_HEADER
-							      *) (dev->
+							      __iomem *) (dev->
 								  chanptr))->
 							    Type);
 					if (!ULTRA_VNIC_CHANNEL_OK_CLIENT
@@ -948,55 +933,6 @@ destroy_device(CONTROLVM_MESSAGE *msg, char *buf)
 	return CONTROLVM_RESP_SUCCESS;
 }
 
-void
-ULTRA_disp_channel_header(CHANNEL_HEADER *x)
-{
-	LOGINF("Sig=%llx, HdrSz=%lx, Sz=%llx, Feat=%llx, hPart=%llx, Hndl=%llx, ChSpace=%llx, Ver=%lx, PartIdx=%lx\n",
-	     x->Signature, (long unsigned int) x->HeaderSize, x->Size,
-	     x->Features, x->PartitionHandle, x->Handle, x->oChannelSpace,
-	     (long unsigned int) x->VersionId,
-	     (long unsigned int) x->PartitionIndex);
-
-	LOGINF("ClientStr=%lx, CliStBoot=%lx, CmdStCli=%lx, CliStOS=%lx, ChCharistics=%lx, CmdStSrv=%lx, SrvSt=%lx\n",
-	     (long unsigned int) x->oClientString,
-	     (long unsigned int) x->CliStateBoot,
-	     (long unsigned int) x->CmdStateCli,
-	     (long unsigned int) x->CliStateOS,
-	     (long unsigned int) x->ChannelCharacteristics,
-	     (long unsigned int) x->CmdStateSrv,
-	     (long unsigned int) x->SrvState);
-
-}
-
-void
-ULTRA_disp_channel(ULTRA_IO_CHANNEL_PROTOCOL *x)
-{
-	ULTRA_disp_channel_header(&x->ChannelHeader);
-	LOGINF("cmdQ.Type=%lx\n", (long unsigned int) x->cmdQ.Type);
-	LOGINF("cmdQ.Size=%llx\n", x->cmdQ.Size);
-	LOGINF("cmdQ.oSignalBase=%llx\n", x->cmdQ.oSignalBase);
-	LOGINF("cmdQ.SignalSize=%lx\n", (long unsigned int) x->cmdQ.SignalSize);
-	LOGINF("cmdQ.MaxSignalSlots=%lx\n",
-	       (long unsigned int) x->cmdQ.MaxSignalSlots);
-	LOGINF("cmdQ.MaxSignals=%lx\n", (long unsigned int) x->cmdQ.MaxSignals);
-	LOGINF("rspQ.Type=%lx\n", (long unsigned int) x->rspQ.Type);
-	LOGINF("rspQ.Size=%llx\n", x->rspQ.Size);
-	LOGINF("rspQ.oSignalBase=%llx\n", x->rspQ.oSignalBase);
-	LOGINF("rspQ.SignalSize=%lx\n", (long unsigned int) x->rspQ.SignalSize);
-	LOGINF("rspQ.MaxSignalSlots=%lx\n",
-	       (long unsigned int) x->rspQ.MaxSignalSlots);
-	LOGINF("rspQ.MaxSignals=%lx\n", (long unsigned int) x->rspQ.MaxSignals);
-	LOGINF("SIZEOF_CMDRSP=%lx\n", SIZEOF_CMDRSP);
-	LOGINF("SIZEOF_PROTOCOL=%lx\n", SIZEOF_PROTOCOL);
-}
-
-void
-ULTRA_disp_vnic_channel(ULTRA_IO_CHANNEL_PROTOCOL *x)
-{
-	LOGINF("num_rcv_bufs=%lx\n", (long unsigned int) x->vnic.num_rcv_bufs);
-	LOGINF("mtu=%lx\n", (long unsigned int) x->vnic.mtu);
-}
-
 static int
 init_chipset(CONTROLVM_MESSAGE *msg, char *buf)
 {
@@ -1332,7 +1268,7 @@ uislib_client_inject_del_vnic(U32 busNo, U32 devNo)
 }
 EXPORT_SYMBOL_GPL(uislib_client_inject_del_vnic);
 
-int
+static int
 uislib_client_add_vnic(U32 busNo)
 {
 	BOOL busCreated = FALSE;
@@ -1382,7 +1318,7 @@ AwayCleanup:
 }				/* end uislib_client_add_vnic */
 EXPORT_SYMBOL_GPL(uislib_client_add_vnic);
 
-int
+static int
 uislib_client_delete_vnic(U32 busNo)
 {
 	int devNo = 0;		/* Default to 0, since only one device
@@ -1791,16 +1727,16 @@ proc_info_vbus_show(struct seq_file *m, void *v)
 	    (bus->busChannelBytes -
 	     sizeof(ULTRA_VBUS_CHANNEL_PROTOCOL)) /
 	    sizeof(ULTRA_VBUS_DEVICEINFO);
-	x = VBUSCHANNEL_devInfoToStringBuffer(bus->pBusChannel->ChpInfo, buf,
+	x = VBUSCHANNEL_devInfoToStringBuffer(&bus->pBusChannel->ChpInfo, buf,
 					      sizeof(buf) - 1, -1);
 	buf[x] = '\0';
 	seq_printf(m, "%s", buf);
-	x = VBUSCHANNEL_devInfoToStringBuffer(bus->pBusChannel->BusInfo,
+	x = VBUSCHANNEL_devInfoToStringBuffer(&bus->pBusChannel->BusInfo,
 					      buf, sizeof(buf) - 1, -1);
 	buf[x] = '\0';
 	seq_printf(m, "%s", buf);
 	for (i = 0; i < devInfoCount; i++) {
-		x = VBUSCHANNEL_devInfoToStringBuffer(bus->pBusChannel->
+		x = VBUSCHANNEL_devInfoToStringBuffer(&bus->pBusChannel->
 						      DevInfo[i], buf,
 						      sizeof(buf) - 1, i);
 		if (x > 0) {
@@ -2393,8 +2329,8 @@ do_wakeup_polling_device_channels(struct work_struct *dummy)
 	}
 }
 
-DECLARE_WORK(Work_wakeup_polling_device_channels,
-	     do_wakeup_polling_device_channels);
+static DECLARE_WORK(Work_wakeup_polling_device_channels,
+		    do_wakeup_polling_device_channels);
 
 /*  Call this function when you want to send a hint to Process_Incoming() that
  *  your device might have more requests.
@@ -2561,13 +2497,6 @@ uislib_mod_exit(void)
 module_init(uislib_mod_init);
 module_exit(uislib_mod_exit);
 
-int uis_mandatory_services = -1;
-
-module_param_named(mandatory_services, uis_mandatory_services,
-		   int, S_IRUGO);
-MODULE_PARM_DESC(uis_mandatory_services,
-		 "number of server drivers we expect to register (default=-1 for legacy behavior)");
-
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Usha Srinivasan");
 MODULE_ALIAS("uislib");
diff --git a/drivers/staging/unisys/virthba/virthba.c b/drivers/staging/unisys/virthba/virthba.c
index cac2532..26f6a2e 100644
--- a/drivers/staging/unisys/virthba/virthba.c
+++ b/drivers/staging/unisys/virthba/virthba.c
@@ -81,11 +81,14 @@ static const char *virthba_get_info(struct Scsi_Host *shp);
 static int virthba_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
 static int virthba_queue_command_lck(struct scsi_cmnd *scsicmd,
 				     void (*virthba_cmnd_done)(struct scsi_cmnd *));
+
 #ifdef DEF_SCSI_QCMD
 DEF_SCSI_QCMD(virthba_queue_command)
 #else
 #define virthba_queue_command virthba_queue_command_lck
 #endif
+
+
 static int virthba_slave_alloc(struct scsi_device *scsidev);
 static int virthba_slave_configure(struct scsi_device *scsidev);
 static void virthba_slave_destroy(struct scsi_device *scsidev);
@@ -108,11 +111,11 @@ static ssize_t enable_ints_write(struct file *file, const char __user *buffer,
 /* Globals                                           */
 /*****************************************************/
 
-int rsltq_wait_usecs = 4000;	/* Default 4ms */
+static int rsltq_wait_usecs = 4000;	/* Default 4ms */
 static unsigned int MaxBuffLen;
 
 /* Module options */
-char *virthba_options = "NONE";
+static char *virthba_options = "NONE";
 
 static const struct pci_device_id virthba_id_table[] = {
 	{PCI_DEVICE(PCI_VENDOR_ID_UNISYS, PCI_DEVICE_ID_VIRTHBA)},
@@ -179,7 +182,7 @@ struct virthba_info {
 	unsigned long long interrupts_notme;
 	unsigned long long interrupts_disabled;
 	struct work_struct serverdown_completion;
-	U64 *flags_addr;
+	U64 __iomem *flags_addr;
 	atomic_t interrupt_rcvd;
 	wait_queue_head_t rsp_queue;
 	struct virtdisk_info head;
@@ -322,9 +325,9 @@ del_scsipending_entry(struct virthba_info *vhbainfo, uintptr_t del)
 
 /* DARWorkQ (Disk Add/Remove) */
 static struct work_struct DARWorkQ;
-struct diskaddremove *DARWorkQHead = NULL;
-spinlock_t DARWorkQLock;
-unsigned short DARWorkQSched = 0;
+static struct diskaddremove *DARWorkQHead;
+static spinlock_t DARWorkQLock;
+static unsigned short DARWorkQSched;
 #define QUEUE_DISKADDREMOVE(dar) { \
 	spin_lock_irqsave(&DARWorkQLock, flags); \
 	if (!DARWorkQHead) { \
@@ -418,12 +421,12 @@ process_disk_notify(struct Scsi_Host *shost, struct uiscmdrsp *cmdrsp)
 /*****************************************************/
 /* Probe Remove Functions                            */
 /*****************************************************/
-irqreturn_t
+static irqreturn_t
 virthba_ISR(int irq, void *dev_id)
 {
 	struct virthba_info *virthbainfo = (struct virthba_info *) dev_id;
-	pCHANNEL_HEADER pChannelHeader;
-	pSIGNAL_QUEUE_HEADER pqhdr;
+	CHANNEL_HEADER __iomem *pChannelHeader;
+	SIGNAL_QUEUE_HEADER __iomem *pqhdr;
 	U64 mask;
 	unsigned long long rc1;
 
@@ -431,9 +434,10 @@ virthba_ISR(int irq, void *dev_id)
 		return IRQ_NONE;
 	virthbainfo->interrupts_rcvd++;
 	pChannelHeader = virthbainfo->chinfo.queueinfo->chan;
-	if (((pChannelHeader->Features
+	if (((readq(&pChannelHeader->Features)
 	      & ULTRA_IO_IOVM_IS_OK_WITH_DRIVER_DISABLING_INTS) != 0)
-	    && ((pChannelHeader->Features & ULTRA_IO_DRIVER_DISABLES_INTS) !=
+	    && ((readq(&pChannelHeader->Features) &
+		 ULTRA_IO_DRIVER_DISABLES_INTS) !=
 		0)) {
 		virthbainfo->interrupts_disabled++;
 		mask = ~ULTRA_CHANNEL_ENABLE_INTS;
@@ -443,10 +447,11 @@ virthba_ISR(int irq, void *dev_id)
 		virthbainfo->interrupts_notme++;
 		return IRQ_NONE;
 	}
-	pqhdr = (pSIGNAL_QUEUE_HEADER) ((char *) pChannelHeader +
-					pChannelHeader->oChannelSpace) +
-					IOCHAN_FROM_IOPART;
-	pqhdr->NumInterruptsReceived++;
+	pqhdr = (SIGNAL_QUEUE_HEADER __iomem *)
+		((char __iomem *) pChannelHeader +
+		 readq(&pChannelHeader->oChannelSpace)) + IOCHAN_FROM_IOPART;
+	writeq(readq(&pqhdr->NumInterruptsReceived) + 1,
+	       &pqhdr->NumInterruptsReceived);
 	atomic_set(&virthbainfo->interrupt_rcvd, 1);
 	wake_up_interruptible(&virthbainfo->rsp_queue);
 	return IRQ_HANDLED;
@@ -461,8 +466,8 @@ virthba_probe(struct virtpci_dev *virtpcidev, const struct pci_device_id *id)
 	int rsp;
 	int i;
 	irq_handler_t handler = virthba_ISR;
-	pCHANNEL_HEADER pChannelHeader;
-	pSIGNAL_QUEUE_HEADER pqhdr;
+	CHANNEL_HEADER __iomem *pChannelHeader;
+	SIGNAL_QUEUE_HEADER __iomem *pqhdr;
 	U64 mask;
 
 	LOGVER("entering virthba_probe...\n");
@@ -578,16 +583,17 @@ virthba_probe(struct virtpci_dev *virtpcidev, const struct pci_device_id *id)
 	INIT_WORK(&virthbainfo->serverdown_completion,
 		  virthba_serverdown_complete);
 
-	virthbainfo->chinfo.queueinfo->chan->Features |=
-	    ULTRA_IO_CHANNEL_IS_POLLING;
+	writeq(readq(&virthbainfo->chinfo.queueinfo->chan->Features) |
+	       ULTRA_IO_CHANNEL_IS_POLLING,
+	       &virthbainfo->chinfo.queueinfo->chan->Features);
 	/* start thread that will receive scsicmnd responses */
 	DBGINF("starting rsp thread -- queueinfo: 0x%p, threadinfo: 0x%p.\n",
 	       virthbainfo->chinfo.queueinfo, &virthbainfo->chinfo.threadinfo);
 
 	pChannelHeader = virthbainfo->chinfo.queueinfo->chan;
-	pqhdr = (pSIGNAL_QUEUE_HEADER) ((char *) pChannelHeader +
-					pChannelHeader->oChannelSpace) +
-					IOCHAN_FROM_IOPART;
+	pqhdr = (SIGNAL_QUEUE_HEADER __iomem *)
+		((char __iomem *)pChannelHeader +
+		 readq(&pChannelHeader->oChannelSpace)) + IOCHAN_FROM_IOPART;
 	virthbainfo->flags_addr = &pqhdr->FeatureFlags;
 
 	if (!uisthread_start(&virthbainfo->chinfo.threadinfo,
@@ -620,7 +626,7 @@ virthba_probe(struct virtpci_dev *virtpcidev, const struct pci_device_id *id)
 		virthbainfo->interrupt_vector = -1;
 		POSTCODE_LINUX_2(VHBA_PROBE_FAILURE_PC, POSTCODE_SEVERITY_ERR);
 	} else {
-		U64 *Features_addr =
+		U64 __iomem *Features_addr =
 		    &virthbainfo->chinfo.queueinfo->chan->Features;
 		LOGERR("request_irq(%d) uislib_virthba_ISR request succeeded\n",
 		       virthbainfo->interrupt_vector);
@@ -1408,14 +1414,13 @@ info_proc_read(struct file *file, char __user *buf, size_t len, loff_t *offset)
 				  virthbainfo->interrupts_disabled);
 		length += sprintf(vbuf + length, "\ninterrupts_notme = %llu,\n",
 				  virthbainfo->interrupts_notme);
-		phys_flags_addr = virt_to_phys(virthbainfo->flags_addr);
-
+		phys_flags_addr = virt_to_phys((__force  void *)
+					       virthbainfo->flags_addr);
 		length += sprintf(vbuf + length, "flags_addr = %p, phys_flags_addr=0x%016llx, FeatureFlags=%llu\n",
 			  virthbainfo->flags_addr, phys_flags_addr,
-			  *virthbainfo->flags_addr);
+				  (__le64)readq(virthbainfo->flags_addr));
 		length += sprintf(vbuf + length, "acquire_failed_cnt:%llu\n",
 				  virthbainfo->acquire_failed_cnt);
-
 		length += sprintf(vbuf + length, "\n");
 	}
 	if (copy_to_user(buf, vbuf, length)) {
@@ -1442,7 +1447,7 @@ enable_ints_write(struct file *file, const char __user *buffer,
 	char buf[4];
 	int i, new_value;
 	struct virthba_info *virthbainfo;
-	U64 *Features_addr;
+	U64 __iomem *Features_addr;
 	U64 mask;
 
 	if (count >= ARRAY_SIZE(buf))
@@ -1544,7 +1549,6 @@ virthba_serverup(struct virtpci_dev *virtpcidev)
 	 */
 	ULTRA_CHANNEL_CLIENT_TRANSITION(virthbainfo->chinfo.queueinfo->chan,
 					dev_name(&virtpcidev->generic_dev),
-					CliStateOS,
 					CHANNELCLI_ATTACHED, NULL);
 
 	/* Start Processing the IOVM Response Queue Again */
diff --git a/drivers/staging/unisys/virtpci/virtpci.c b/drivers/staging/unisys/virtpci/virtpci.c
index 0c15932..3bfbcc4 100644
--- a/drivers/staging/unisys/virtpci/virtpci.c
+++ b/drivers/staging/unisys/virtpci/virtpci.c
@@ -173,7 +173,8 @@ struct virtpci_busdev {
 /* Local functions                                   */
 /*****************************************************/
 
-static inline int WAIT_FOR_IO_CHANNEL(ULTRA_IO_CHANNEL_PROTOCOL *chanptr)
+static inline
+int WAIT_FOR_IO_CHANNEL(ULTRA_IO_CHANNEL_PROTOCOL __iomem  *chanptr)
 {
 	int count = 120;
 	while (count > 0) {
@@ -264,7 +265,7 @@ static int add_vbus(struct add_vbus_guestpart *addparams)
 	vbus->release = virtpci_bus_release;
 	vbus->parent = &virtpci_rootbus_device;	/* root bus is parent */
 	vbus->bus = &virtpci_bus_type;	/* bus type */
-	vbus->platform_data = addparams->chanptr;
+	vbus->platform_data = (__force void *)addparams->chanptr;
 
 	/* register a virt bus device -
 	 * this bus shows up under /sys/devices with .name value
@@ -289,10 +290,16 @@ static int add_vbus(struct add_vbus_guestpart *addparams)
 /* for CHANSOCK wwwnn/max are AUTO-GENERATED; for normal channels,
  * wwnn/max are in the channel header.
  */
-#define GET_SCSIADAPINFO_FROM_CHANPTR(chanptr) { \
-	scsi.wwnn = ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vhba.wwnn; \
-	scsi.max = ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vhba.max; \
-}
+#define GET_SCSIADAPINFO_FROM_CHANPTR(chanptr) {			\
+	memcpy_fromio(&scsi.wwnn,					\
+		      &((ULTRA_IO_CHANNEL_PROTOCOL __iomem *)		\
+			chanptr)->vhba.wwnn,				\
+		      sizeof(struct vhba_wwnn));			\
+	memcpy_fromio(&scsi.max,					\
+		      &((ULTRA_IO_CHANNEL_PROTOCOL __iomem *)		\
+			chanptr)->vhba.max,				\
+		      sizeof(struct vhba_config_max));			\
+	}
 
 /* find bus device with the busid that matches - match_busid matches bus_id */
 #define GET_BUS_DEV(busno) { \
@@ -317,7 +324,7 @@ static int add_vhba(struct add_virt_guestpart *addparams)
 
 	POSTCODE_LINUX_2(VPCI_CREATE_ENTRY_PC, POSTCODE_SEVERITY_INFO);
 	if (!WAIT_FOR_IO_CHANNEL
-	    ((ULTRA_IO_CHANNEL_PROTOCOL *) addparams->chanptr)) {
+	    ((ULTRA_IO_CHANNEL_PROTOCOL __iomem *) addparams->chanptr)) {
 		LOGERR("Timed out.  Channel not ready\n");
 		POSTCODE_LINUX_2(VPCI_CREATE_FAILURE_PC, POSTCODE_SEVERITY_ERR);
 		return 0;
@@ -345,11 +352,20 @@ static int add_vhba(struct add_virt_guestpart *addparams)
 /* for CHANSOCK macaddr is AUTO-GENERATED; for normal channels,
  * macaddr is in the channel header.
  */
-#define GET_NETADAPINFO_FROM_CHANPTR(chanptr) { \
-	memcpy(net.mac_addr, ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vnic.macaddr, MAX_MACADDR_LEN); \
-	net.num_rcv_bufs = ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vnic.num_rcv_bufs; \
-	net.mtu = ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vnic.mtu; \
-	net.zoneGuid = ((ULTRA_IO_CHANNEL_PROTOCOL *) chanptr)->vnic.zoneGuid; \
+#define GET_NETADAPINFO_FROM_CHANPTR(chanptr) {				\
+		memcpy_fromio(net.mac_addr,				\
+		       ((ULTRA_IO_CHANNEL_PROTOCOL __iomem *)		\
+			chanptr)->vnic.macaddr,				\
+		       MAX_MACADDR_LEN);				\
+		net.num_rcv_bufs =					\
+			readl(&((ULTRA_IO_CHANNEL_PROTOCOL __iomem *)	\
+				chanptr)->vnic.num_rcv_bufs);		\
+		net.mtu = readl(&((ULTRA_IO_CHANNEL_PROTOCOL __iomem *) \
+				  chanptr)->vnic.mtu);			\
+		memcpy_fromio(&net.zoneGuid, \
+			      &((ULTRA_IO_CHANNEL_PROTOCOL __iomem *)	\
+				chanptr)->vnic.zoneGuid,		\
+			      sizeof(GUID));				\
 }
 
 /* adds a vnic
@@ -365,7 +381,7 @@ add_vnic(struct add_virt_guestpart *addparams)
 
 	POSTCODE_LINUX_2(VPCI_CREATE_ENTRY_PC, POSTCODE_SEVERITY_INFO);
 	if (!WAIT_FOR_IO_CHANNEL
-	    ((ULTRA_IO_CHANNEL_PROTOCOL *) addparams->chanptr)) {
+	    ((ULTRA_IO_CHANNEL_PROTOCOL __iomem *) addparams->chanptr)) {
 		LOGERR("Timed out, channel not ready\n");
 		POSTCODE_LINUX_2(VPCI_CREATE_FAILURE_PC, POSTCODE_SEVERITY_ERR);
 		return 0;
@@ -675,7 +691,7 @@ static int match_busid(struct device *dev, void *data)
 /*  Bus functions                                    */
 /*****************************************************/
 
-const struct pci_device_id *
+static const struct pci_device_id *
 virtpci_match_device(const struct pci_device_id *ids,
 		     const struct virtpci_dev *dev)
 {
@@ -892,7 +908,7 @@ static int virtpci_device_add(struct device *parentbus, int devtype,
 	struct virtpci_dev *tmpvpcidev = NULL, *prev;
 	unsigned long flags;
 	int ret;
-	ULTRA_IO_CHANNEL_PROTOCOL *pIoChan = NULL;
+	ULTRA_IO_CHANNEL_PROTOCOL __iomem *pIoChan = NULL;
 	struct device *pDev;
 
 	LOGINF("virtpci_device_add parentbus:%p chanptr:%p\n", parentbus,
@@ -935,7 +951,8 @@ static int virtpci_device_add(struct device *parentbus, int devtype,
 	virtpcidev->queueinfo.send_int_if_needed = NULL;
 
 	/* Set up safe queue... */
-	pIoChan = (ULTRA_IO_CHANNEL_PROTOCOL *) virtpcidev->queueinfo.chan;
+	pIoChan = (ULTRA_IO_CHANNEL_PROTOCOL __iomem *)
+		virtpcidev->queueinfo.chan;
 
 	virtpcidev->intr = addparams->intr;
 
@@ -999,7 +1016,7 @@ static int virtpci_device_add(struct device *parentbus, int devtype,
 	pDev = &virtpcidev->generic_dev;
 	ULTRA_CHANNEL_CLIENT_TRANSITION(addparams->chanptr,
 					BUS_ID(pDev),
-					CliStateOS, CHANNELCLI_ATTACHED, NULL);
+					CHANNELCLI_ATTACHED, NULL);
 
 	/* don't register until device has been added to
 	* list. Otherwise, a device_unregister from this function can
@@ -1022,7 +1039,6 @@ static int virtpci_device_add(struct device *parentbus, int devtype,
 		pDev = &virtpcidev->generic_dev;
 		ULTRA_CHANNEL_CLIENT_TRANSITION(addparams->chanptr,
 						BUS_ID(pDev),
-						CliStateOS,
 						CHANNELCLI_DETACHED, NULL);
 		/* remove virtpcidev, the one we just added, from the list */
 		write_lock_irqsave(&VpcidevListLock, flags);
@@ -1491,7 +1507,7 @@ static ssize_t virt_proc_write(struct file *file, const char __user *buffer,
 	char buf[16];
 	int type, i, action = 0xffff;
 	unsigned int busno, deviceno;
-	void *chanptr;
+	void __iomem *chanptr;
 	struct add_vbus_guestpart busaddparams;
 	struct add_virt_guestpart addparams;
 	struct del_vbus_guestpart busdelparams;
-- 
1.8.5.3



More information about the devel mailing list