mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 07:40:54 +07:00
37bea42fec
When a gadget is disabled, kill_all_requests() can be called simultaneously from both a user process via dwc2_hsotg_pullup() and from the interrupt handler if the hardware detects disconnection. Since we drop the lock in dwc2_hsotg_complete_request() in order to call the completion handler, this means that the list is modified concurrently and leads to an infinite loop in kill_all_requests(). Replace the foreach loop with a while-not-empty loop in order to remove the danger of this concurrent modification. Note: I observed this with threadirqs, I'm not sure if it can be triggered without threaded interrupts. Signed-off-by: John Keeping <john@metanate.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> |
||
---|---|---|
.. | ||
core_intr.c | ||
core.c | ||
core.h | ||
debug.h | ||
debugfs.c | ||
gadget.c | ||
hcd_ddma.c | ||
hcd_intr.c | ||
hcd_queue.c | ||
hcd.c | ||
hcd.h | ||
hw.h | ||
Kconfig | ||
Makefile | ||
params.c | ||
pci.c | ||
platform.c |