Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: u_ether: conditionally align transfer size

Unless HW sets quirk_ep_out_aligned_size, gadget driver shouldn't make
any efforts towards aligning transfers. If the UDC needs, it *must*
set the quirk flag.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>

+6 -2
+6 -2
drivers/usb/gadget/function/u_ether.c
··· 178 178 static int 179 179 rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags) 180 180 { 181 + struct usb_gadget *g = dev->gadget; 181 182 struct sk_buff *skb; 182 183 int retval = -ENOMEM; 183 184 size_t size = 0; ··· 210 209 */ 211 210 size += sizeof(struct ethhdr) + dev->net->mtu + RX_EXTRA; 212 211 size += dev->port_usb->header_len; 213 - size += out->maxpacket - 1; 214 - size -= size % out->maxpacket; 212 + 213 + if (g->quirk_ep_out_aligned_size) { 214 + size += out->maxpacket - 1; 215 + size -= size % out->maxpacket; 216 + } 215 217 216 218 if (dev->port_usb->is_fixed) 217 219 size = max_t(size_t, size, dev->port_usb->fixed_out_len);