sfc-falcon: get rid of custom busy polling code
In linux-4.5, busy polling was implemented in core NAPI stack, meaning that all custom implementation can be removed from drivers. Not only we remove lot's of tricky code, we also remove one lock operation in fast path. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Edward Cree <ecree@solarflare.com> Cc: Bert Kenward <bkenward@solarflare.com> Acked-by: Bert Kenward <bkenward@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e7fe949126
commit
86bc8b310f
@@ -304,9 +304,6 @@ static int ef4_poll(struct napi_struct *napi, int budget)
|
||||
struct ef4_nic *efx = channel->efx;
|
||||
int spent;
|
||||
|
||||
if (!ef4_channel_lock_napi(channel))
|
||||
return budget;
|
||||
|
||||
netif_vdbg(efx, intr, efx->net_dev,
|
||||
"channel %d NAPI poll executing on CPU %d\n",
|
||||
channel->channel, raw_smp_processor_id());
|
||||
@@ -331,7 +328,6 @@ static int ef4_poll(struct napi_struct *napi, int budget)
|
||||
ef4_nic_eventq_read_ack(channel);
|
||||
}
|
||||
|
||||
ef4_channel_unlock_napi(channel);
|
||||
return spent;
|
||||
}
|
||||
|
||||
@@ -387,7 +383,6 @@ void ef4_start_eventq(struct ef4_channel *channel)
|
||||
channel->enabled = true;
|
||||
smp_wmb();
|
||||
|
||||
ef4_channel_enable(channel);
|
||||
napi_enable(&channel->napi_str);
|
||||
ef4_nic_eventq_read_ack(channel);
|
||||
}
|
||||
@@ -399,8 +394,6 @@ void ef4_stop_eventq(struct ef4_channel *channel)
|
||||
return;
|
||||
|
||||
napi_disable(&channel->napi_str);
|
||||
while (!ef4_channel_disable(channel))
|
||||
usleep_range(1000, 20000);
|
||||
channel->enabled = false;
|
||||
}
|
||||
|
||||
@@ -2029,7 +2022,6 @@ static void ef4_init_napi_channel(struct ef4_channel *channel)
|
||||
channel->napi_dev = efx->net_dev;
|
||||
netif_napi_add(channel->napi_dev, &channel->napi_str,
|
||||
ef4_poll, napi_weight);
|
||||
ef4_channel_busy_poll_init(channel);
|
||||
}
|
||||
|
||||
static void ef4_init_napi(struct ef4_nic *efx)
|
||||
@@ -2079,37 +2071,6 @@ static void ef4_netpoll(struct net_device *net_dev)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NET_RX_BUSY_POLL
|
||||
static int ef4_busy_poll(struct napi_struct *napi)
|
||||
{
|
||||
struct ef4_channel *channel =
|
||||
container_of(napi, struct ef4_channel, napi_str);
|
||||
struct ef4_nic *efx = channel->efx;
|
||||
int budget = 4;
|
||||
int old_rx_packets, rx_packets;
|
||||
|
||||
if (!netif_running(efx->net_dev))
|
||||
return LL_FLUSH_FAILED;
|
||||
|
||||
if (!ef4_channel_try_lock_poll(channel))
|
||||
return LL_FLUSH_BUSY;
|
||||
|
||||
old_rx_packets = channel->rx_queue.rx_packets;
|
||||
ef4_process_channel(channel, budget);
|
||||
|
||||
rx_packets = channel->rx_queue.rx_packets - old_rx_packets;
|
||||
|
||||
/* There is no race condition with NAPI here.
|
||||
* NAPI will automatically be rescheduled if it yielded during busy
|
||||
* polling, because it was not able to take the lock and thus returned
|
||||
* the full budget.
|
||||
*/
|
||||
ef4_channel_unlock_poll(channel);
|
||||
|
||||
return rx_packets;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* Kernel net device interface
|
||||
@@ -2289,9 +2250,6 @@ static const struct net_device_ops ef4_netdev_ops = {
|
||||
.ndo_poll_controller = ef4_netpoll,
|
||||
#endif
|
||||
.ndo_setup_tc = ef4_setup_tc,
|
||||
#ifdef CONFIG_NET_RX_BUSY_POLL
|
||||
.ndo_busy_poll = ef4_busy_poll,
|
||||
#endif
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
.ndo_rx_flow_steer = ef4_filter_rfs,
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user