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 28d4972f7a..acd9f00a0b 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 | } |
