summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>2019-06-26 16:06:33 +0300
committerFelipe Balbi <felipe.balbi@linux.intel.com>2019-07-03 11:00:50 +0300
commitb2357839c56ab7d06bcd4e866ebc2d0e2b7997f3 (patch)
tree2c7d39d5ef4eda08f971cf77a7dab195c1f68b81 /drivers/usb/gadget
parent4aef7966060439bb4f9d440feacd5ce7697bce37 (diff)
downloadlinux-b2357839c56ab7d06bcd4e866ebc2d0e2b7997f3.tar.xz
usb: renesas_usbhs: add a workaround for a race condition of workqueue
The old commit 6e4b74e4690d ("usb: renesas: fix scheduling in atomic context bug") fixed an atomic issue by using workqueue for the shdmac dmaengine driver. However, this has a potential race condition issue between the work pending and usbhsg_ep_free_request() in gadget mode. When usbhsg_ep_free_request() is called while pending the queue, since the work_struct will be freed and then the work handler is called, kernel panic happens on process_one_work(). To fix the issue, if we could call cancel_work_sync() at somewhere before the free request, it could be easy. However, the usbhsg_ep_free_request() is called on atomic (e.g. f_ncm driver calls free request via gether_disconnect()). For now, almost all users are having "USB-DMAC" and the DMAengine driver can be used on atomic. So, this patch adds a workaround for a race condition to call the DMAengine APIs without the workqueue. This means we still have TODO on shdmac environment (SH7724), but since it doesn't have SMP, the race condition might not happen. Fixes: ab330cf3888d ("usb: renesas_usbhs: add support for USB-DMAC") Cc: <stable@vger.kernel.org> # v4.1+ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/gadget')
0 files changed, 0 insertions, 0 deletions