aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2013-07-22 19:17:25 -0400
committerDavid S. Miller <davem@davemloft.net>2013-07-22 21:03:50 -0400
commit7aa0076c497d6f0d5d957b431d0d80e1e9780274 (patch)
treea6b0ab806d8f0214e013d4996c2d1f4ea154efad /drivers/net
parentf0e61604d747bf541808a1ebde6eeaef57e904e4 (diff)
sfc: Enable RX scatter for flows steered by RFS
Received packets are only scattered if this is enabled in both the matching filter and the receiving queue. This was not being done for filters inserted for RFS, so any packet requiring more than a single descriptor was dropped. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/sfc/filter.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/sfc/filter.c b/drivers/net/ethernet/sfc/filter.c
index b74a60ab9ac7..2a469b27a506 100644
--- a/drivers/net/ethernet/sfc/filter.c
+++ b/drivers/net/ethernet/sfc/filter.c
@@ -1209,7 +1209,9 @@ int efx_filter_rfs(struct net_device *net_dev, const struct sk_buff *skb,
1209 EFX_BUG_ON_PARANOID(skb_headlen(skb) < nhoff + 4 * ip->ihl + 4); 1209 EFX_BUG_ON_PARANOID(skb_headlen(skb) < nhoff + 4 * ip->ihl + 4);
1210 ports = (const __be16 *)(skb->data + nhoff + 4 * ip->ihl); 1210 ports = (const __be16 *)(skb->data + nhoff + 4 * ip->ihl);
1211 1211
1212 efx_filter_init_rx(&spec, EFX_FILTER_PRI_HINT, 0, rxq_index); 1212 efx_filter_init_rx(&spec, EFX_FILTER_PRI_HINT,
1213 efx->rx_scatter ? EFX_FILTER_FLAG_RX_SCATTER : 0,
1214 rxq_index);
1213 rc = efx_filter_set_ipv4_full(&spec, ip->protocol, 1215 rc = efx_filter_set_ipv4_full(&spec, ip->protocol,
1214 ip->daddr, ports[1], ip->saddr, ports[0]); 1216 ip->daddr, ports[1], ip->saddr, ports[0]);
1215 if (rc) 1217 if (rc)