Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d64e38ae authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

hv_netvsc: fix race in napi poll when rescheduling



There is a race between napi_reschedule and re-enabling interrupts
which could lead to missed host interrrupts.  This occurs when
interrupts are re-enabled (hv_end_read) and vmbus irq callback
(netvsc_channel_cb) has already scheduled NAPI.

Signed-off-by: default avatarStephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a7483ec0
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1207,9 +1207,10 @@ int netvsc_poll(struct napi_struct *napi, int budget)
	if (send_recv_completions(ndev, net_device, nvchan) == 0 &&
	    work_done < budget &&
	    napi_complete_done(napi, work_done) &&
	    hv_end_read(&channel->inbound)) {
	    hv_end_read(&channel->inbound) &&
	    napi_schedule_prep(napi)) {
		hv_begin_read(&channel->inbound);
		napi_reschedule(napi);
		__napi_schedule(napi);
	}

	/* Driver may overshoot since multiple packets per descriptor */