sfc: Add channel specific receive_skb handler and post_remove callback
Allows an extra channel to override the standard receive_skb handler and also for extra non generic operations to be performed on remove. Also set default rx strategy so only skbs can be delivered to the PTP receive function. Signed-off-by: Stuart Hodgson <smhodgson@solarflare.com> Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:

committed by
Ben Hutchings

parent
79d68b3700
commit
c31e5f9f97
@@ -575,7 +575,10 @@ static void efx_rx_deliver(struct efx_channel *channel,
|
||||
skb_record_rx_queue(skb, channel->rx_queue.core_index);
|
||||
|
||||
/* Pass the packet up */
|
||||
netif_receive_skb(skb);
|
||||
if (channel->type->receive_skb)
|
||||
channel->type->receive_skb(channel, skb);
|
||||
else
|
||||
netif_receive_skb(skb);
|
||||
|
||||
/* Update allocation strategy method */
|
||||
channel->rx_alloc_level += RX_ALLOC_FACTOR_SKB;
|
||||
@@ -617,7 +620,8 @@ void __efx_rx_packet(struct efx_channel *channel, struct efx_rx_buffer *rx_buf)
|
||||
if (unlikely(!(efx->net_dev->features & NETIF_F_RXCSUM)))
|
||||
rx_buf->flags &= ~EFX_RX_PKT_CSUMMED;
|
||||
|
||||
if (likely(rx_buf->flags & (EFX_RX_BUF_PAGE | EFX_RX_PKT_CSUMMED)))
|
||||
if (likely(rx_buf->flags & (EFX_RX_BUF_PAGE | EFX_RX_PKT_CSUMMED)) &&
|
||||
!channel->type->receive_skb)
|
||||
efx_rx_packet_gro(channel, rx_buf, eh);
|
||||
else
|
||||
efx_rx_deliver(channel, rx_buf);
|
||||
@@ -627,6 +631,11 @@ void efx_rx_strategy(struct efx_channel *channel)
|
||||
{
|
||||
enum efx_rx_alloc_method method = rx_alloc_method;
|
||||
|
||||
if (channel->type->receive_skb) {
|
||||
channel->rx_alloc_push_pages = false;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Only makes sense to use page based allocation if GRO is enabled */
|
||||
if (!(channel->efx->net_dev->features & NETIF_F_GRO)) {
|
||||
method = RX_ALLOC_METHOD_SKB;
|
||||
|
Reference in New Issue
Block a user