From e40d1c8ad91420a2224f557e5b4c43c5c4148847 Mon Sep 17 00:00:00 2001 From: Ken Cox Date: Thu, 22 May 2014 12:31:13 -0500 Subject: [PATCH] Staging: unisys: Fixup sparse warnings for dereferencing noderef types. Fixed the usage of the following so they don't try to dereference pointers to iomem. CHANNEL_U64_MISMATCH CHANNEL_U32_MISMATCH wait_for_valid_guid Signed-off-by: Ken Cox Signed-off-by: Greg Kroah-Hartman --- .../common-spar/include/channels/channel.h | 16 +++++++------ drivers/staging/unisys/include/uisutils.h | 23 ++++++++++++------- drivers/staging/unisys/uislib/uislib.c | 4 ++-- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index 237a852c2fc0..d19711de1140 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -333,8 +333,9 @@ ULTRA_check_channel_client(void __iomem *pChannel, (pChannel))->Size) < expectedMinBytes) { CHANNEL_U64_MISMATCH(expectedTypeGuid, channelName, "size", expectedMinBytes, - ((CHANNEL_HEADER __iomem *) - (pChannel))->Size, fileName, + readq(&((CHANNEL_HEADER __iomem *) + (pChannel))->Size), + fileName, lineNumber, logCtx); return 0; } @@ -344,9 +345,9 @@ ULTRA_check_channel_client(void __iomem *pChannel, != expectedVersionId) { CHANNEL_U32_MISMATCH(expectedTypeGuid, channelName, "version", expectedVersionId, - ((CHANNEL_HEADER __iomem *) - (pChannel))->VersionId, fileName, - lineNumber, logCtx); + readl(&((CHANNEL_HEADER __iomem *) + (pChannel))->VersionId), + fileName, lineNumber, logCtx); return 0; } if (expectedSignature > 0) /* caller wants us to verify @@ -355,8 +356,9 @@ ULTRA_check_channel_client(void __iomem *pChannel, != expectedSignature) { CHANNEL_U64_MISMATCH(expectedTypeGuid, channelName, "signature", expectedSignature, - ((CHANNEL_HEADER __iomem *) - (pChannel))->Signature, fileName, + readq(&((CHANNEL_HEADER __iomem *) + (pChannel))->Signature), + fileName, lineNumber, logCtx); return 0; } diff --git a/drivers/staging/unisys/include/uisutils.h b/drivers/staging/unisys/include/uisutils.h index f4845f2ffa06..70776c93cc50 100644 --- a/drivers/staging/unisys/include/uisutils.h +++ b/drivers/staging/unisys/include/uisutils.h @@ -194,14 +194,21 @@ struct chaninfo { * correctly at DEVICE_CREATE time, INSTEAD OF waiting until * DEVICE_CONFIGURE time. */ -#define WAIT_FOR_VALID_GUID(guid) \ - do { \ - while (uuid_le_cmp(guid, NULL_UUID_LE) == 0) { \ - LOGERR("Waiting for non-0 GUID (why???)...\n"); \ - UIS_THREAD_WAIT_SEC(5); \ - } \ - LOGERR("OK... GUID is non-0 now\n"); \ - } while (0) +static inline void +wait_for_valid_guid(uuid_le __iomem *guid) +{ + uuid_le tmpguid; + + while (1) { + memcpy_fromio((void *)&tmpguid, + (void __iomem *)guid, sizeof(uuid_le)); + if (uuid_le_cmp(tmpguid, NULL_UUID_LE) != 0) + break; + LOGERR("Waiting for non-0 GUID (why???)...\n"); + UIS_THREAD_WAIT_SEC(5); + } + LOGERR("OK... GUID is non-0 now\n"); +} /* CopyFragsInfoFromSkb returns the number of entries added to frags array * Returns -1 on failure. diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index e3903ee72443..d4a7ef821bae 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -447,7 +447,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf) struct guest_msgs cmd; if (!uuid_le_cmp(dev->channelTypeGuid, UltraVhbaChannelProtocolGuid)) { - WAIT_FOR_VALID_GUID(((CHANNEL_HEADER + wait_for_valid_guid(&((CHANNEL_HEADER __iomem *) (dev-> chanptr))-> Type); @@ -472,7 +472,7 @@ create_device(CONTROLVM_MESSAGE *msg, char *buf) } else if (!uuid_le_cmp(dev->channelTypeGuid, UltraVnicChannelProtocolGuid)) { - WAIT_FOR_VALID_GUID(((CHANNEL_HEADER + wait_for_valid_guid(&((CHANNEL_HEADER __iomem *) (dev-> chanptr))-> Type); -- 2.30.2