net: disable preemption before call smp_processor_id()
Although netif_rx() isn't expected to be called in process context with preemption enabled, it'd better handle this case. And this is why get_cpu() is used in the non-RPS #ifdef branch. If tree RCU is selected, rcu_read_lock() won't disable preemption, so preempt_disable() should be called explictly. Signed-off-by: Changli Gao <xiaosuo@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ba78e2ddca
commit
cece1945bf
|
@ -2517,6 +2517,7 @@ int netif_rx(struct sk_buff *skb)
|
||||||
struct rps_dev_flow voidflow, *rflow = &voidflow;
|
struct rps_dev_flow voidflow, *rflow = &voidflow;
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
|
preempt_disable();
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
|
||||||
cpu = get_rps_cpu(skb->dev, skb, &rflow);
|
cpu = get_rps_cpu(skb->dev, skb, &rflow);
|
||||||
|
@ -2526,6 +2527,7 @@ int netif_rx(struct sk_buff *skb)
|
||||||
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
|
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
preempt_enable();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue