firewire: ohci: replace vm_map_ram() with vmap()
authorClemens Ladisch <clemens@ladisch.de>
Sun, 16 Nov 2014 20:08:49 +0000 (21:08 +0100)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Wed, 19 Nov 2014 10:57:50 +0000 (11:57 +0100)
vm_map_ram() is intended for short-lived objects, so using it for the AR
buffers could fragment address space, especially on a 32-bit machine.
For an allocation that lives as long as the device, vmap() is the better
choice.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/ohci.c

index a66a321..aff9018 100644 (file)
@@ -689,8 +689,7 @@ static void ar_context_release(struct ar_context *ctx)
 {
        unsigned int i;
 
-       if (ctx->buffer)
-               vm_unmap_ram(ctx->buffer, AR_BUFFERS + AR_WRAPAROUND_PAGES);
+       vunmap(ctx->buffer);
 
        for (i = 0; i < AR_BUFFERS; i++)
                if (ctx->pages[i]) {
@@ -1018,8 +1017,7 @@ static int ar_context_init(struct ar_context *ctx, struct fw_ohci *ohci,
                pages[i]              = ctx->pages[i];
        for (i = 0; i < AR_WRAPAROUND_PAGES; i++)
                pages[AR_BUFFERS + i] = ctx->pages[i];
-       ctx->buffer = vm_map_ram(pages, AR_BUFFERS + AR_WRAPAROUND_PAGES,
-                                -1, PAGE_KERNEL);
+       ctx->buffer = vmap(pages, ARRAY_SIZE(pages), VM_MAP, PAGE_KERNEL);
        if (!ctx->buffer)
                goto out_of_memory;