Hi All,
I am facing one issue with Linux kernel 4.0.4. CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.0.4+ #19
First Scenario:
At the time when I start using PCIe based Atheros wifi card along with my Ethernet controller. If I am using both standalone then I am not facing this issue.
(I think this is not hardware related issue as with the same combination of h/w but on different linux kernel version (3.4), I am not facing this issue.)
Second Scenario:
This issue also repeated if I keep on executing below mentioned command:
This issue also repeated if I keep on executing below mentioned command:
By digging out into Linux kernel and observing dump stack log(at the time CPU STALL), I found culprit function 'ieee80211_wake_queues_by_reason'.
I go through the series of functions calling by this function, and stuck at one point. I found there are two 'rcu_read_lock();' in sequence.
So my question is can we call rcu_read_lock() function is sequence(two times) and later call rcu_read_unlock() one by one;??
So my question is can we call rcu_read_lock() function is sequence(two times) and later call rcu_read_unlock() one by one;??
Please look into the pictorial representation of my question:
ieee80211_wake_queues_by_reason --
|----> __ieee80211_wake_queue ---> if (skb_queue_empty(&local->pending[queue])) {
rcu_read_lock();
ieee80211_propagate_queue_wake(local, queue);
rcu_read_unlock();
}
ieee80211_propagate_queue_wake(local, queue)
| --> netif_wake_subqueue(sdata->dev, ac)
| --> rcu_read_lock();
q = rcu_dereference(txq->qdisc);
__netif_schedule(q);
rcu_read_unlock();
|----> __ieee80211_wake_queue ---> if (skb_queue_empty(&local->pending[queue])) {
rcu_read_lock();
ieee80211_propagate_queue_wake(local, queue);
rcu_read_unlock();
}
ieee80211_propagate_queue_wake(local, queue)
| --> netif_wake_subqueue(sdata->dev, ac)
| --> rcu_read_lock();
q = rcu_dereference(txq->qdisc);
__netif_schedule(q);
rcu_read_unlock();
My Approach:
I increased RCU stall time from 21 jiffies to 60 jiffies.
-- CONFIG_RCU_CPU_STALL_TIMEOUT=21
++ CONFIG_RCU_CPU_STALL_TIMEOUT=60
-- CONFIG_RCU_CPU_STALL_TIMEOUT=21
++ CONFIG_RCU_CPU_STALL_TIMEOUT=60
But this does not solve my problem.
Please suggest me any approach to solve this problem.
Thanks,
Amit Gupta
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies