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

Commit 718cff1e authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

sfc: Match calls to netif_napi_add() and netif_napi_del()



sfc could call netif_napi_add() multiple times for the same
napi_struct, corrupting the list of napi_structs for the associated
device and leading to a busy-loop on device removal.  Move the call to
netif_napi_add() and add a call to netif_napi_del() in the obvious
places.

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2690f8d6
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -448,9 +448,6 @@ static void efx_init_channels(struct efx_nic *efx)

		WARN_ON(channel->rx_pkt != NULL);
		efx_rx_strategy(channel);

		netif_napi_add(channel->napi_dev, &channel->napi_str,
			       efx_poll, napi_weight);
	}
}

@@ -1321,6 +1318,8 @@ static int efx_init_napi(struct efx_nic *efx)

	efx_for_each_channel(channel, efx) {
		channel->napi_dev = efx->net_dev;
		netif_napi_add(channel->napi_dev, &channel->napi_str,
			       efx_poll, napi_weight);
	}
	return 0;
}
@@ -1330,6 +1329,8 @@ static void efx_fini_napi(struct efx_nic *efx)
	struct efx_channel *channel;

	efx_for_each_channel(channel, efx) {
		if (channel->napi_dev)
			netif_napi_del(&channel->napi_str);
		channel->napi_dev = NULL;
	}
}