From: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> Signed-off-by: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> Signed-off-by: Benjamin Romer <benjamin.romer@xxxxxxxxxx> --- drivers/staging/unisys/visorbus/visorchannel.c | 15 ++++++++++----- drivers/staging/unisys/visorutil/memregion.h | 2 -- .../staging/unisys/visorutil/memregion_direct.c | 22 ---------------------- 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c index 150e3df..f278739 100644 --- a/drivers/staging/unisys/visorbus/visorchannel.c +++ b/drivers/staging/unisys/visorbus/visorchannel.c @@ -57,9 +57,8 @@ visorchannel_create_guts(HOSTADDRESS physaddr, ulong channel_bytes, struct visorchannel *channel; int err; size_t size = sizeof(struct channel_header); - struct memregion *memregion; - channel = kmalloc(sizeof(*channel), GFP_KERNEL|__GFP_NORETRY); + channel = kzalloc(sizeof(*channel), GFP_KERNEL|__GFP_NORETRY); if (!channel) goto cleanup; @@ -67,11 +66,17 @@ visorchannel_create_guts(HOSTADDRESS physaddr, ulong channel_bytes, spin_lock_init(&channel->insert_lock); spin_lock_init(&channel->remove_lock); - /* prepare chan_hdr (abstraction to read/write channel memory) */ - memregion = visor_memregion_create(&channel->memregion, physaddr, size); + if (!request_mem_region(physaddr, size, MYDRVNAME)) + goto cleanup; - if (!memregion) + channel->memregion.mapped = ioremap_cache(physaddr, size); + if (!channel->memregion.mapped) { + release_mem_region(physaddr, size); goto cleanup; + } + + channel->memregion.physaddr = physaddr; + channel->memregion.nbytes = size; err = visor_memregion_read(&channel->memregion, 0, &channel->chan_hdr, sizeof(struct channel_header)); diff --git a/drivers/staging/unisys/visorutil/memregion.h b/drivers/staging/unisys/visorutil/memregion.h index 3826fe6..cb3dbc5 100644 --- a/drivers/staging/unisys/visorutil/memregion.h +++ b/drivers/staging/unisys/visorutil/memregion.h @@ -29,8 +29,6 @@ struct memregion { void __iomem *mapped; }; -struct memregion *visor_memregion_create(struct memregion *memregion, - HOSTADDRESS physaddr, ulong nbytes); int visor_memregion_resize(struct memregion *memregion, ulong newsize); int visor_memregion_read(struct memregion *memregion, ulong offset, void *dest, ulong nbytes); diff --git a/drivers/staging/unisys/visorutil/memregion_direct.c b/drivers/staging/unisys/visorutil/memregion_direct.c index a575ecc..0c7bed0 100644 --- a/drivers/staging/unisys/visorutil/memregion_direct.c +++ b/drivers/staging/unisys/visorutil/memregion_direct.c @@ -28,28 +28,6 @@ static int mapit(struct memregion *memregion); static void unmapit(struct memregion *memregion); -struct memregion * -visor_memregion_create(struct memregion *memregion, - HOSTADDRESS physaddr, ulong nbytes) -{ - struct memregion *rc = NULL; - - memregion->physaddr = physaddr; - memregion->nbytes = nbytes; - if (mapit(memregion)) { - rc = NULL; - goto cleanup; - } - rc = memregion; -cleanup: - if (rc == NULL) { - visor_memregion_destroy(memregion); - memregion = NULL; - } - return rc; -} -EXPORT_SYMBOL_GPL(visor_memregion_create); - static int mapit(struct memregion *memregion) { -- 2.1.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel