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

Commit a4f570be authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

sfc-falcon: remove ndo_poll_controller



As diagnosed by Song Liu, ndo_poll_controller() can
be very dangerous on loaded hosts, since the cpu
calling ndo_poll_controller() might steal all NAPI
contexts (for all RX/TX queues of the NIC). This capture
can last for unlimited amount of time, since one
cpu is generally not able to drain all the queues under load.

sfc-falcon uses NAPI for TX completions, so we better let core
networking stack call the napi->poll() to avoid the capture.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Cc: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
Cc: Edward Cree <ecree@solarflare.com>
Cc: Bert Kenward <bkenward@solarflare.com>
Acked-By: default avatarBert Kenward <bkenward@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9447a10f
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -2052,29 +2052,6 @@ static void ef4_fini_napi(struct ef4_nic *efx)
		ef4_fini_napi_channel(channel);
}

/**************************************************************************
 *
 * Kernel netpoll interface
 *
 *************************************************************************/

#ifdef CONFIG_NET_POLL_CONTROLLER

/* Although in the common case interrupts will be disabled, this is not
 * guaranteed. However, all our work happens inside the NAPI callback,
 * so no locking is required.
 */
static void ef4_netpoll(struct net_device *net_dev)
{
	struct ef4_nic *efx = netdev_priv(net_dev);
	struct ef4_channel *channel;

	ef4_for_each_channel(channel, efx)
		ef4_schedule_channel(channel);
}

#endif

/**************************************************************************
 *
 * Kernel net device interface
@@ -2250,9 +2227,6 @@ static const struct net_device_ops ef4_netdev_ops = {
	.ndo_set_mac_address	= ef4_set_mac_address,
	.ndo_set_rx_mode	= ef4_set_rx_mode,
	.ndo_set_features	= ef4_set_features,
#ifdef CONFIG_NET_POLL_CONTROLLER
	.ndo_poll_controller = ef4_netpoll,
#endif
	.ndo_setup_tc		= ef4_setup_tc,
#ifdef CONFIG_RFS_ACCEL
	.ndo_rx_flow_steer	= ef4_filter_rfs,