diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c index 42fabeafc01e..cfbb19f78139 100644 --- a/drivers/staging/unisys/visorbus/visorchannel.c +++ b/drivers/staging/unisys/visorbus/visorchannel.c @@ -89,10 +89,23 @@ visorchannel_create_guts(HOSTADDRESS physaddr, ulong channel_bytes, if (uuid_le_cmp(guid, NULL_UUID_LE) == 0) guid = channel->chan_hdr.chtype; - err = visor_memregion_resize(&channel->memregion, channel_bytes); - if (err) + iounmap(channel->memregion.mapped); + release_mem_region(channel->memregion.physaddr, + channel->memregion.nbytes); + channel->memregion.mapped = NULL; + if (!request_mem_region(channel->memregion.physaddr, channel_bytes, + MYDRVNAME)) goto cleanup; + channel->memregion.mapped = ioremap_cache(channel->memregion.physaddr, + channel_bytes); + if (!channel->memregion.mapped) { + release_mem_region(channel->memregion.physaddr, channel_bytes); + goto cleanup; + } + + channel->memregion.nbytes = channel_bytes; + channel->size = channel_bytes; channel->guid = guid; return channel; diff --git a/drivers/staging/unisys/visorutil/memregion.h b/drivers/staging/unisys/visorutil/memregion.h index 60d0dc9f07bc..57d617f90129 100644 --- a/drivers/staging/unisys/visorutil/memregion.h +++ b/drivers/staging/unisys/visorutil/memregion.h @@ -29,7 +29,6 @@ struct memregion { void __iomem *mapped; }; -int visor_memregion_resize(struct memregion *memregion, ulong newsize); int visor_memregion_read(struct memregion *memregion, ulong offset, void *dest, ulong nbytes); int visor_memregion_write(struct memregion *memregion, diff --git a/drivers/staging/unisys/visorutil/memregion_direct.c b/drivers/staging/unisys/visorutil/memregion_direct.c index 79ef4c5c686b..fa7a4060c20c 100644 --- a/drivers/staging/unisys/visorutil/memregion_direct.c +++ b/drivers/staging/unisys/visorutil/memregion_direct.c @@ -76,22 +76,6 @@ visor_memregion_get_pointer(struct memregion *memregion) } EXPORT_SYMBOL_GPL(visor_memregion_get_pointer); -int -visor_memregion_resize(struct memregion *memregion, ulong newsize) -{ - int rc; - - if (newsize == memregion->nbytes) - return 0; - - unmapit(memregion); - memregion->nbytes = newsize; - rc = mapit(memregion); - - return rc; -} -EXPORT_SYMBOL_GPL(visor_memregion_resize); - int visor_memregion_read(struct memregion *memregion, ulong offset, void *dest, ulong nbytes)