Commit cece1945 authored by Changli Gao's avatar Changli Gao Committed by David S. Miller

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: default avatarChangli Gao <xiaosuo@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ba78e2dd
...@@ -2517,6 +2517,7 @@ int netif_rx(struct sk_buff *skb) ...@@ -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) ...@@ -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
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment