diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 853c8b575f1d..02e7d8377c4a 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -2172,7 +2172,15 @@ static void net_rx_action(struct softirq_action *h) | |||
| 2172 | 2172 | ||
| 2173 | weight = n->weight; | 2173 | weight = n->weight; |
| 2174 | 2174 | ||
| 2175 | work = n->poll(n, weight); | 2175 | /* This NAPI_STATE_SCHED test is for avoiding a race |
| 2176 | * with netpoll's poll_napi(). Only the entity which | ||
| 2177 | * obtains the lock and sees NAPI_STATE_SCHED set will | ||
| 2178 | * actually make the ->poll() call. Therefore we avoid | ||
| 2179 | * accidently calling ->poll() when NAPI is not scheduled. | ||
| 2180 | */ | ||
| 2181 | work = 0; | ||
| 2182 | if (test_bit(NAPI_STATE_SCHED, &n->state)) | ||
| 2183 | work = n->poll(n, weight); | ||
| 2176 | 2184 | ||
| 2177 | WARN_ON_ONCE(work > weight); | 2185 | WARN_ON_ONCE(work > weight); |
| 2178 | 2186 | ||
