Explorar o código

usb: musb: gadget: fix DMA length for OUT transfer

DMA length should not go beyond the availabe space of request buffer,
so fix it.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Acked-by: Anand Gadiyar <gadiyar@ti.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Anand Gadiyar <gadiyar@ti.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Ming Lei %!s(int64=15) %!d(string=hai) anos
pai
achega
1018b4e44f
Modificáronse 1 ficheiros con 3 adicións e 2 borrados
  1. 3 2
      drivers/usb/musb/musb_gadget.c

+ 3 - 2
drivers/usb/musb/musb_gadget.c

@@ -659,10 +659,11 @@ static void rxstate(struct musb *musb, struct musb_request *req)
 				if (request->actual < request->length) {
 				if (request->actual < request->length) {
 					int transfer_size = 0;
 					int transfer_size = 0;
 #ifdef USE_MODE1
 #ifdef USE_MODE1
-					transfer_size = min(request->length,
+					transfer_size = min(request->length - request->actual,
 							channel->max_len);
 							channel->max_len);
 #else
 #else
-					transfer_size = len;
+					transfer_size = min(request->length - request->actual,
+							(unsigned)len);
 #endif
 #endif
 					if (transfer_size <= musb_ep->packet_sz)
 					if (transfer_size <= musb_ep->packet_sz)
 						musb_ep->dma->desired_mode = 0;
 						musb_ep->dma->desired_mode = 0;