usb: detect stop endpoint race using pending timer instead of counter. [1/1]
authorYue Wang <yue.wang@amlogic.com>
Fri, 23 Aug 2019 07:19:27 +0000 (15:19 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Fri, 23 Aug 2019 10:38:54 +0000 (03:38 -0700)
commit2596c65b168d68e3673d21f0ae3c484a48000bfe
tree7ff084255a377c179766ef6df5e4848d1478aabb
parent66d07045d39dad07e4704e9e156f166528936bc7
usb: detect stop endpoint race using pending timer instead of counter. [1/1]

PD#SWPL-13177

Problem:
stop endpoint race

Solution:
A counter was used to find out if the stop endpoint completion raced with
the stop endpoint timeout timer. This was needed in case the stop ep
completion failed to delete the timer as it was running on anoter cpu.

The EP_STOP_CMD_PENDING flag was not enough as a new stop endpoint command
may be queued between the command completion and timeout function, which
would set the flag back.

Instead of the separate counter that was used we can detect the race by
checking both the STOP_EP_PENDING flag and timer_pending in the timeout
function.

Verify:
franklin

Change-Id: Ie958ffd530a6bd176d0cf451894a5bd4dece38da
Signed-off-by: Yue Wang <yue.wang@amlogic.com>
drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci.c
drivers/usb/host/xhci.h