diff options
Diffstat (limited to 'drivers/usb/core/buffer.c')
-rw-r--r-- | drivers/usb/core/buffer.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c index 28d4972f7ad5..acd9f00a0b76 100644 --- a/drivers/usb/core/buffer.c +++ b/drivers/usb/core/buffer.c | |||
@@ -53,7 +53,8 @@ int hcd_buffer_create(struct usb_hcd *hcd) | |||
53 | char name[16]; | 53 | char name[16]; |
54 | int i, size; | 54 | int i, size; |
55 | 55 | ||
56 | if (!hcd->self.controller->dma_mask) | 56 | if (!hcd->self.controller->dma_mask && |
57 | !(hcd->driver->flags & HCD_LOCAL_MEM)) | ||
57 | return 0; | 58 | return 0; |
58 | 59 | ||
59 | for (i = 0; i < HCD_BUFFER_POOLS; i++) { | 60 | for (i = 0; i < HCD_BUFFER_POOLS; i++) { |
@@ -107,7 +108,8 @@ void *hcd_buffer_alloc( | |||
107 | int i; | 108 | int i; |
108 | 109 | ||
109 | /* some USB hosts just use PIO */ | 110 | /* some USB hosts just use PIO */ |
110 | if (!bus->controller->dma_mask) { | 111 | if (!bus->controller->dma_mask && |
112 | !(hcd->driver->flags & HCD_LOCAL_MEM)) { | ||
111 | *dma = ~(dma_addr_t) 0; | 113 | *dma = ~(dma_addr_t) 0; |
112 | return kmalloc(size, mem_flags); | 114 | return kmalloc(size, mem_flags); |
113 | } | 115 | } |
@@ -132,7 +134,8 @@ void hcd_buffer_free( | |||
132 | if (!addr) | 134 | if (!addr) |
133 | return; | 135 | return; |
134 | 136 | ||
135 | if (!bus->controller->dma_mask) { | 137 | if (!bus->controller->dma_mask && |
138 | !(hcd->driver->flags & HCD_LOCAL_MEM)) { | ||
136 | kfree(addr); | 139 | kfree(addr); |
137 | return; | 140 | return; |
138 | } | 141 | } |