Commit 6bd373eb authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller

net: Always poll at least one device in net_rx_action

We should only perform the softnet_break check after we have polled
at least one device in net_rx_action.  Otherwise a zero or negative
setting of netdev_budget can lock up the whole system.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 001ce546
...@@ -4634,16 +4634,15 @@ static void net_rx_action(struct softirq_action *h) ...@@ -4634,16 +4634,15 @@ static void net_rx_action(struct softirq_action *h)
while (!list_empty(&list)) { while (!list_empty(&list)) {
struct napi_struct *n; struct napi_struct *n;
n = list_first_entry(&list, struct napi_struct, poll_list);
budget -= napi_poll(n, &repoll);
/* If softirq window is exhausted then punt. /* If softirq window is exhausted then punt.
* Allow this to run for 2 jiffies since which will allow * Allow this to run for 2 jiffies since which will allow
* an average latency of 1.5/HZ. * an average latency of 1.5/HZ.
*/ */
if (unlikely(budget <= 0 || time_after_eq(jiffies, time_limit))) if (unlikely(budget <= 0 || time_after_eq(jiffies, time_limit)))
goto softnet_break; goto softnet_break;
n = list_first_entry(&list, struct napi_struct, poll_list);
budget -= napi_poll(n, &repoll);
} }
if (!sd_has_rps_ipi_waiting(sd) && if (!sd_has_rps_ipi_waiting(sd) &&
......
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