Re: [PATCH] USB: usbtmc: Fix RCU stall warning
From: Zhang, Qiang <hidden>
Date: 2021-07-21 08:59:41
________________________________________ From: dave penkler <dpenkler@gmail.com> Sent: Wednesday, 21 July 2021 15:41 To: Greg KH Cc: Zhang, Qiang; Alan Stern; Dmitry Vyukov; paulmck@kernel.org; Guido; USB Subject: Re: [PATCH] USB: usbtmc: Fix RCU stall warning [Please note: This e-mail is from an EXTERNAL e-mail address] On Wed, 21 Jul 2021 at 09:08, Greg KH [off-list ref] wrote:
On Tue, Jun 29, 2021 at 11:32:36AM +0800, qiang.zhang@windriver.com wrote:quoted
From: Zqiang <redacted>I need a "full" name here, and in the signed-off-by line please.quoted
rcu: INFO: rcu_preempt self-detected stall on CPU rcu: 1-...!: (2 ticks this GP) idle=d92/1/0x4000000000000000 softirq=25390/25392 fqs=3 (t=12164 jiffies g=31645 q=43226) rcu: rcu_preempt kthread starved for 12162 jiffies! g31645 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x0 ->cpu=0 rcu: Unless rcu_preempt kthread gets sufficient CPU time, OOM is now expected behavior. rcu: RCU grace-period kthread stack dump: task:rcu_preempt state:R running task In the case of system use dummy_hcd as usb controller, when the usbtmc devices is disconnected, in usbtmc_interrupt(), if the urb status is unknown, the urb will be resubmit, the urb may be insert to dum_hcd->urbp_list again, this will cause the dummy_timer() not to exit for a long time, beacause the dummy_timer() be called in softirq and local_bh is disable, this not only causes the RCU reading critical area to consume too much time but also makes the tasks in the current CPU runq not run in time, and that triggered RCU stall. return directly when find the urb status is not zero to fix it. Reported-by: syzbot+e2eae5639e7203360018@syzkaller.appspotmail.com Signed-off-by: Zqiang <redacted>What commit does this fix? Does it need to go to stable kernels? What about the usbtmc maintainers, what do they think about this?
This patch makes the babbling endpoint retry/recovery code in the real world usb host controller drivers redundant and would prevent usbtmc applications from benefiting from it.
Due to use dummy_hcd host, as explained earlier the RCU stall happens all the time, Is there a better way to solve it ? Thanks Qiang
thanks, greg k-h