net: add softnet_data.in_net_rx_action
We want to make two optimizations in napi_schedule_rps() and ____napi_schedule() which require to know if these helpers are called from net_rx_action(), instead of being called from other contexts. sd.in_net_rx_action is only read/written by the owning cpu. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Jason Xing <kerneljasonxing@gmail.com> Tested-by: Jason Xing <kerneljasonxing@gmail.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
8fcb76b934
commit
c59647c0dc
2 changed files with 5 additions and 0 deletions
|
@ -3188,6 +3188,7 @@ struct softnet_data {
|
|||
#ifdef CONFIG_RPS
|
||||
struct softnet_data *rps_ipi_list;
|
||||
#endif
|
||||
bool in_net_rx_action;
|
||||
#ifdef CONFIG_NET_FLOW_LIMIT
|
||||
struct sd_flow_limit __rcu *flow_limit;
|
||||
#endif
|
||||
|
|
|
@ -6646,6 +6646,7 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
|
|||
LIST_HEAD(list);
|
||||
LIST_HEAD(repoll);
|
||||
|
||||
sd->in_net_rx_action = true;
|
||||
local_irq_disable();
|
||||
list_splice_init(&sd->poll_list, &list);
|
||||
local_irq_enable();
|
||||
|
@ -6656,6 +6657,7 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
|
|||
skb_defer_free_flush(sd);
|
||||
|
||||
if (list_empty(&list)) {
|
||||
sd->in_net_rx_action = false;
|
||||
if (!sd_has_rps_ipi_waiting(sd) && list_empty(&repoll))
|
||||
goto end;
|
||||
break;
|
||||
|
@ -6682,6 +6684,8 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
|
|||
list_splice(&list, &sd->poll_list);
|
||||
if (!list_empty(&sd->poll_list))
|
||||
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
|
||||
else
|
||||
sd->in_net_rx_action = false;
|
||||
|
||||
net_rps_action_and_irq_enable(sd);
|
||||
end:;
|
||||
|
|
Loading…
Reference in a new issue