Skip to content

Commit

Permalink
net: Rearrange loop in net_rx_action
Browse files Browse the repository at this point in the history
This patch rearranges the loop in net_rx_action to reduce the
amount of jumping back and forth when reading the code.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Herbert Xu authored and David S. Miller committed Dec 24, 2014
1 parent 6bd373e commit ceb8d5b
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -4631,25 +4631,29 @@ static void net_rx_action(struct softirq_action *h)
list_splice_init(&sd->poll_list, &list);
local_irq_enable();

while (!list_empty(&list)) {
for (;;) {
struct napi_struct *n;

if (list_empty(&list)) {
if (!sd_has_rps_ipi_waiting(sd) && list_empty(&repoll))
return;
break;
}

n = list_first_entry(&list, struct napi_struct, poll_list);
budget -= napi_poll(n, &repoll);

/* If softirq window is exhausted then punt.
* Allow this to run for 2 jiffies since which will allow
* an average latency of 1.5/HZ.
*/
if (unlikely(budget <= 0 || time_after_eq(jiffies, time_limit)))
goto softnet_break;
if (unlikely(budget <= 0 ||
time_after_eq(jiffies, time_limit))) {
sd->time_squeeze++;
break;
}
}

if (!sd_has_rps_ipi_waiting(sd) &&
list_empty(&list) &&
list_empty(&repoll))
return;
out:
local_irq_disable();

list_splice_tail_init(&sd->poll_list, &list);
Expand All @@ -4659,12 +4663,6 @@ static void net_rx_action(struct softirq_action *h)
__raise_softirq_irqoff(NET_RX_SOFTIRQ);

net_rps_action_and_irq_enable(sd);

return;

softnet_break:
sd->time_squeeze++;
goto out;
}

struct netdev_adjacent {
Expand Down

0 comments on commit ceb8d5b

Please sign in to comment.