linux_dsm_epyc7002/drivers/usb
Guido Kiener 9d6a54c143 usb: gadget: net2280: Fix overrun of OUT messages
The OUT endpoint normally blocks (NAK) subsequent packets when a
short packet was received and returns an incomplete queue entry to
the gadget driver. Thereby the gadget driver can detect a short packet
when reading queue entries with a length that is not equal to a
multiple of packet size.

The start_queue() function enables receiving OUT packets regardless of
the content of the OUT FIFO. This results in a race: With the current
code, it's possible that the "!ep->is_in && (readl(&ep->regs->ep_stat)
& BIT(NAK_OUT_PACKETS))" test in start_dma() will fail, then a short
packet will be received, and then start_queue() will call
stop_out_naking(). That's what we don't want (OUT naking gets turned
off while there is data in the FIFO) because then the next driver
request might receive a mixture of old and new packets.

With the patch, this race can't occur because the FIFO's state is
tested after we know that OUT naking is already turned on, and OUT
naking is stopped only when both of the conditions are met.  This
ensures that all received data is delivered to the gadget driver,
which can detect a short packet now before new packets are appended
to the last short packet.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Guido Kiener <guido.kiener@rohde-schwarz.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2019-03-20 08:50:02 +02:00
..
atm USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
c67x00
chipidea usb: chipidea: Refactor USB PHY selection and keep a single PHY 2019-02-27 15:51:02 +01:00
class cdc-wdm: pass return value of recover_from_urb_loss 2019-02-19 14:41:38 +01:00
common usb: roles: Add a description for the class to Kconfig 2018-12-17 14:07:59 +01:00
core USB/PHY patches for 5.1-rc1 2019-03-06 16:48:27 -08:00
dwc2 usb: dwc2: use struct_size() in kzalloc() 2019-02-19 14:41:38 +01:00
dwc3 usb: dwc3: pci: add support for Comet Lake PCH ID 2019-03-20 08:46:03 +02:00
early memblock: drop memblock_alloc_*_nopanic() variants 2019-03-12 10:04:02 -07:00
gadget usb: gadget: net2280: Fix overrun of OUT messages 2019-03-20 08:50:02 +02:00
host DMA mapping updates for 5.1 2019-03-10 11:54:48 -07:00
image USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
isp1760 USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
misc USB: changes for v5.1 merge window 2019-02-15 09:08:57 +01:00
mon USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
mtu3 USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
musb USB: musb: mark expected switch fall-through 2019-02-13 19:40:20 +01:00
phy USB: changes for v5.1 merge window 2019-02-15 09:08:57 +01:00
renesas_usbhs USB: renesas_usbhs: fix spelling mistake "doens't" -> "doesn't" 2019-02-19 14:41:38 +01:00
roles usb: roles: Find the muxes by also matching against the device node 2019-02-14 10:52:25 +01:00
serial USB-serial fixes for 5.1-rc1 2019-02-21 17:28:50 +01:00
storage SCSI misc on 20190306 2019-03-09 16:53:47 -08:00
typec usb: typec: tps6598x: handle block writes separately with plain-I2C adapters 2019-02-21 10:54:23 +01:00
usbip usbip: Fix vep_free_request() null pointer checks on input args 2019-01-30 09:22:35 +01:00
wusbcore wusb: Remove unnecessary static function ckhdid_printf 2019-03-01 20:53:41 +01:00
Kconfig USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
Makefile
usb-skeleton.c