[PATCH] unisys: Fix sparse error - accessing __iomem directly

Luke Hart luke.hart at birchleys.eu
Mon Sep 8 12:44:49 UTC 2014


Copy the channel type into a temporary buffer so that code will work for architectures that don't support MMIO. This now works in same way as other tests in same function.

Re-sent since I initially didn't copy devel at driverdev.osuosl.org and sparmaintainer at unisys.com doesn't seem to be a mailing list (despite what get_maintainer.pl indicates). 

Signed-off-by: Luke Hart <luke.hart at birchleys.eu>
---
 drivers/staging/unisys/common-spar/include/channels/channel.h | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h
index 2004cfe..ef24f5a 100644
--- a/drivers/staging/unisys/common-spar/include/channels/channel.h
+++ b/drivers/staging/unisys/common-spar/include/channels/channel.h
@@ -347,10 +347,12 @@ ULTRA_check_channel_client(void __iomem *pChannel,
 			   u64 expectedSignature,
 			   char *fileName, int lineNumber, void *logCtx)
 {
-	if (uuid_le_cmp(expectedTypeGuid, NULL_UUID_LE) != 0)
+	if (uuid_le_cmp(expectedTypeGuid, NULL_UUID_LE) != 0) {
+		uuid_le guid;
+
+		ioread8_rep(&((CHANNEL_HEADER __iomem *)(pChannel))->Type,
+			&guid, sizeof(guid));
 		/* caller wants us to verify type GUID */
-		if (uuid_le_cmp((((CHANNEL_HEADER __iomem *)(pChannel))->Type),
-			   expectedTypeGuid) != 0) {
+		if (uuid_le_cmp(guid, expectedTypeGuid) != 0) {
 			CHANNEL_GUID_MISMATCH(expectedTypeGuid, channelName,
 					      "type", expectedTypeGuid,
 					      ((CHANNEL_HEADER __iomem *)
@@ -358,6 +360,7 @@ ULTRA_check_channel_client(void __iomem *pChannel,
 					      lineNumber, logCtx);
 			return 0;
 		}
+	}
 	if (expectedMinBytes > 0)	/* caller wants us to verify
 					 * channel size */
 		if (readq(&((CHANNEL_HEADER __iomem *)
-- 
1.8.5.5



More information about the devel mailing list