[RFC PATCH] USB: usbtest: fix wrong buffer_offset() computation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



the following error pops up during "testusb -a -t 10"
| musb-hdrc musb-hdrc.1.auto: dma_pool_free buffer-128,	f134e000/be842000 (bad dma)

hcd_buffer_create() creates a few buffers, the smallest has 32 bytes of
size. ARCH_KMALLOC_MINALIGN is set to 64 bytes. This combo results in
hcd_buffer_alloc() returning memory which is 32bytes aligned and it
might by identified by buffer_offset() as another buffer. This means the
buffer which is on a 32byte boundary will not get freed, instead it
tries to free another buffer with the error message.

This patch fixes the issue by checking only if the lowest bit is set
which is the only "unaligned" offset which is currently passed to
usbtest_alloc_urb(). Another way of dealing with this would be to
respect ARCH_KMALLOC_MINALIGN in hcd_buffer_create() and having the
smallest buffer starting at 64 bytes in this case.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
---
 drivers/usb/misc/usbtest.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 0bbafe795a72..bad57d6b9e7e 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -242,6 +242,8 @@ static struct urb *usbtest_alloc_urb(
 {
 	struct urb		*urb;
 
+	if (offset > 1)
+		return NULL;
 	urb = usb_alloc_urb(0, GFP_KERNEL);
 	if (!urb)
 		return urb;
@@ -324,7 +326,7 @@ static inline void simple_fill_buf(struct urb *urb)
 
 static inline unsigned long buffer_offset(void *buf)
 {
-	return (unsigned long)buf & (ARCH_KMALLOC_MINALIGN - 1);
+	return (unsigned long)buf & 1;
 }
 
 static int check_guard_bytes(struct usbtest_dev *tdev, struct urb *urb)
-- 
2.1.3

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux