staging: unisys: visorbus: fix payload memory usage in controlvm channel
authorTim Sell <Timothy.Sell@unisys.com>
Wed, 2 Mar 2016 00:45:02 +0000 (19:45 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 2 Mar 2016 03:14:07 +0000 (19:14 -0800)
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

index c4c71c6704461f1a123cd3399d7ea6968a8ece3a..e1a5b672fe6d4a22504d02d7853df40eaf89a965 100644 (file)
@@ -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);
        }