From a8deaef37012aecc920996dd5a064b2417d9cbfa Mon Sep 17 00:00:00 2001
From: Tim Sell <Timothy.Sell@unisys.com>
Date: Tue, 1 Mar 2016 19:45:02 -0500
Subject: [PATCH] staging: unisys: visorbus: fix payload memory usage in
 controlvm channel

Previously if controlvm message payloads (indicated in controlvm message
via struct controlvm_message.hdr.payload_vm_offset) were contained within
the bounds of the channel memory, we would fail to process any controlvm
message that contained payload data.  Reason is, the request_mem_region()
would fail, because it overlapped the channel memory.  Since
request_mem_region() doesn't actually serve a functional purpose anyway,
this was simply removed.

Signed-off-by: Timothy Sell <timothy.sell@unisys.com>
Signed-off-by: David Kershner <david.kershner@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/staging/unisys/visorbus/visorchipset.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/staging/unisys/visorbus/visorchipset.c b/drivers/staging/unisys/visorbus/visorchipset.c
index c4c71c6704461..e1a5b672fe6d4 100644
--- a/drivers/staging/unisys/visorbus/visorchipset.c
+++ b/drivers/staging/unisys/visorbus/visorchipset.c
@@ -399,21 +399,13 @@ parser_init_byte_stream(u64 addr, u32 bytes, bool local, bool *retry)
 		p = __va((unsigned long)(addr));
 		memcpy(ctx->data, p, bytes);
 	} else {
-		void *mapping;
+		void *mapping = memremap(addr, bytes, MEMREMAP_WB);
 
-		if (!request_mem_region(addr, bytes, "visorchipset")) {
-			rc = NULL;
-			goto cleanup;
-		}
-
-		mapping = memremap(addr, bytes, MEMREMAP_WB);
 		if (!mapping) {
-			release_mem_region(addr, bytes);
 			rc = NULL;
 			goto cleanup;
 		}
 		memcpy(ctx->data, mapping, bytes);
-		release_mem_region(addr, bytes);
 		memunmap(mapping);
 	}
 
-- 
2.30.2