aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core/buffer.c')
-rw-r--r--drivers/usb/core/buffer.c9
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 }