925995d635
Deadlock condition: The return value of TDQ_LOCKPTR(td) is the same for two threads. 1) The first thread signals a wakeup while keeping the rcu_read_lock(). This invokes sched_add() which in turn will try to lock TDQ_LOCK(). 2) The second thread is calling synchronize_rcu() calling mi_switch() over and over again trying to yield(). This prevents the first thread from running and releasing the RCU reader lock. Solution: Release the thread lock while yielding to allow other threads to acquire the lock pointed to by TDQ_LOCKPTR(td). Found by: KrishnamRaju ErapaRaju <Krishna2@chelsio.com> MFC after: 1 week Sponsored by: Mellanox Technologies |
||
---|---|---|
.. | ||
cloudabi | ||
cloudabi32 | ||
cloudabi64 | ||
freebsd32 | ||
ia32 | ||
linprocfs | ||
linsysfs | ||
linux | ||
linuxkpi/common | ||
ndis | ||
netbsd | ||
x86bios |