Hi Andi, Thanks for the patchset. > Using NO_PKT_PRIO_TID and tx_pkts_queued to check for an empty state, can > lead to a contradictory state, resulting in an infinite loop. > Currently queueing and dequeuing of packets is not synchronized, and can > happen concurrently. While tx_pkts_queued is incremented when adding a > packet, max prio is set to NO_PKT when the WMM list is empty. If a packet > is added right after the check for empty, but before setting max prio to > NO_PKT, that packet is trapped and creates an infinite loop. > Because of the new packet, tx_pkts_queued is at least 1, indicating wmm > lists are not empty. Opposing that max prio is NO_PKT, which means "skip > this wmm queue, it has no packets". The infinite loop results, because the > main loop checks the wmm lists for not empty via tx_pkts_queued, but when > dequeing uses max_prio to see if it can skip a list. This will never end, > unless a new packet is added which will restore max prio to the level of > the trapped packet. > The solution here is to rely on tx_pkts_queued solely for checking wmm > queue to be empty, and drop the NO_PKT define. It does not address the > locking issue. > > Signed-off-by: Andreas Fenkart <andreas.fenkart@xxxxxxxxxxxxxxxxxxx> With this patch (1/6) applied, I'm getting soft-lockup watchdog: BUG: soft lockup - CPU#3 stuck for 22s! [kworker/3:1:37] I'm running 64-bit Ubuntu 12.04 (latest wireless-testing.git) with SD8787. The BUG is hit when I enter "dhclient" command after association. # iw mlan0 scan # iw mlan0 connect MY_AP # dhclient mlan0 BTW, if I apply the first 5 patches (1/6-5/6) or all 6 patches together, the soft-lockup BUG is gone. Any ideas? Thanks, Bing -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html