On Fri, Jul 08 2016, Baolin Wang wrote: > On 7 July 2016 at 20:51, Michal Nazarewicz <mina86@xxxxxxxxxx> wrote: >> On Thu, Jul 07 2016, Baolin Wang wrote: >>> Some gadget device (such as dwc3 gadget) requires quirk_ep_out_aligned_size >>> attribute, which means it need to align the request buffer's size to an ep's >>> maxpacketsize. >>> >>> Thus we add usb_ep_align_maybe() function to check if it is need to align >>> the request buffer's size to an ep's maxpacketsize. >>> >>> Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxx> >> >> Acked-by: Michal Nazarewicz <mina86@xxxxxxxxxx> >> >>> --- >>> drivers/usb/gadget/function/f_midi.c | 18 +++++++++++------- >>> 1 file changed, 11 insertions(+), 7 deletions(-) >>> >>> diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c >>> index 58fc199..2e3f11e 100644 >>> --- a/drivers/usb/gadget/function/f_midi.c >>> +++ b/drivers/usb/gadget/function/f_midi.c >>> @@ -328,7 +328,7 @@ static int f_midi_start_ep(struct f_midi *midi, >>> static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt) >>> { >>> struct f_midi *midi = func_to_midi(f); >>> - unsigned i; >>> + unsigned i, length; >>> int err; >>> >>> /* we only set alt for MIDIStreaming interface */ >>> @@ -345,9 +345,11 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt) >>> >>> /* pre-allocate write usb requests to use on f_midi_transmit. */ >>> while (kfifo_avail(&midi->in_req_fifo)) { >>> - struct usb_request *req = >>> - midi_alloc_ep_req(midi->in_ep, midi->buflen); >>> + struct usb_request *req; >>> >>> + length = usb_ep_align_maybe(midi->gadget, midi->in_ep, >>> + midi->buflen); >>> + req = midi_alloc_ep_req(midi->in_ep, length); >>> if (req == NULL) >>> return -ENOMEM; >>> >>> @@ -359,10 +361,12 @@ static int f_midi_set_alt(struct usb_function *f, unsigned intf, unsigned alt) >>> >>> /* allocate a bunch of read buffers and queue them all at once. */ >>> for (i = 0; i < midi->qlen && err == 0; i++) { >>> - struct usb_request *req = >>> - midi_alloc_ep_req(midi->out_ep, >>> - max_t(unsigned, midi->buflen, >>> - bulk_out_desc.wMaxPacketSize)); >>> + struct usb_request *req; >>> + >>> + length = usb_ep_align_maybe(midi->gadget, midi->out_ep, >>> + midi->buflen); >>> + req = midi_alloc_ep_req(midi->out_ep, >>> + max_t(unsigned, length, bulk_out_desc.wMaxPacketSize)); >> >> Perhaps: >> >> + length = midi->buflen < bulk_out_desc.wMaxPacketSize >> + ? bulk_out_desc.wMaxPacketSize >> + : usb_ep_align_maybe(midi->gadget, midi->out_ep, >> + midi->buflen); >> + req = midi_alloc_ep_req(midi->out_ep, length); >> >> I find it somewhat cleaner. Up to you. > > But if the gadget does not requires 'quirk_ep_out_aligned_size', then > we also can keep midi->buflen length although midi->buflen < > bulk_out_desc.wMaxPacketSize, right? Thanks for your comment. I don’t know. That’s not what the original code was doing. The original code was using: max_t(unsigned, midi->buflen, bulk_out_desc.wMaxPacketSize)); for some reason.> >>> if (req == NULL) >>> return -ENOMEM; >>> >> >> -- >> Best regards >> ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ >> «If at first you don’t succeed, give up skydiving» > > > > -- > Baolin.wang > Best Regards -- Best regards ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ «If at first you don’t succeed, give up skydiving» -- 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