Skip to contentSkip to conversation

USB: make usb_buffer_map_sg consistent with doc

PATCH New Jiri Slaby 1 participant 1 message Aug 22, 2009 USB

lore
Share & tools
lore

Jiri Slaby

author
#0 lore raw

PATCH 1/1 USB: make usb_buffer_map_sg consistent with doc

usb_buffer_map_sg should return negative on error according to its documentation. But dma_map_sg returns 0 on error. Take this into account and return -ENOMEM in such situation.

While at it, return -EINVAL instead of -1 when wrong input is passed in.

If this wasn't done, usb_sg_* operations used after usb_sg_init which returned 0 may cause oopses/deadlocks since we don't init structures/entries, esp. completion and status entry.

Cc Greg Kroah-Hartman <[email protected]>
---
 drivers/usb/core/usb.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/usb/core/usb.c +2 -2
index a26f738..ba480c2 100644
@@ -914,11 +914,11 @@ int usb_buffer_map_sg(const struct usb_device *dev, int is_in,
 			|| !(bus = dev->bus)
 			|| !(controller = bus->controller)
 			|| !controller->dma_mask)
-		return -1;
+		return -EINVAL;
 
 	/* FIXME generic api broken like pci, can't report errors */
 	return dma_map_sg(controller, sg, nents,
-			is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
+			is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE) ? : -ENOMEM;
 }
 EXPORT_SYMBOL_GPL(usb_buffer_map_sg);
 
Signature · 1 line
1.6.3.3