bnx2: Add support for skb->rxhash.
Add skb->rxhash support for TCP packets only because the bnx2 RSS hash does not hash UDP ports. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
3d5f3a7bbd
commit
fdc8541d69
@@ -3219,6 +3219,10 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
|
|||||||
L2_FHDR_ERRORS_UDP_XSUM)) == 0))
|
L2_FHDR_ERRORS_UDP_XSUM)) == 0))
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
}
|
}
|
||||||
|
if ((bp->dev->features & NETIF_F_RXHASH) &&
|
||||||
|
((status & L2_FHDR_STATUS_USE_RXHASH) ==
|
||||||
|
L2_FHDR_STATUS_USE_RXHASH))
|
||||||
|
skb->rxhash = rx_hdr->l2_fhdr_hash;
|
||||||
|
|
||||||
skb_record_rx_queue(skb, bnapi - &bp->bnx2_napi[0]);
|
skb_record_rx_queue(skb, bnapi - &bp->bnx2_napi[0]);
|
||||||
|
|
||||||
@@ -7558,6 +7562,12 @@ bnx2_set_tx_csum(struct net_device *dev, u32 data)
|
|||||||
return (ethtool_op_set_tx_csum(dev, data));
|
return (ethtool_op_set_tx_csum(dev, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bnx2_set_flags(struct net_device *dev, u32 data)
|
||||||
|
{
|
||||||
|
return ethtool_op_set_flags(dev, data, ETH_FLAG_RXHASH);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct ethtool_ops bnx2_ethtool_ops = {
|
static const struct ethtool_ops bnx2_ethtool_ops = {
|
||||||
.get_settings = bnx2_get_settings,
|
.get_settings = bnx2_get_settings,
|
||||||
.set_settings = bnx2_set_settings,
|
.set_settings = bnx2_set_settings,
|
||||||
@@ -7587,6 +7597,8 @@ static const struct ethtool_ops bnx2_ethtool_ops = {
|
|||||||
.phys_id = bnx2_phys_id,
|
.phys_id = bnx2_phys_id,
|
||||||
.get_ethtool_stats = bnx2_get_ethtool_stats,
|
.get_ethtool_stats = bnx2_get_ethtool_stats,
|
||||||
.get_sset_count = bnx2_get_sset_count,
|
.get_sset_count = bnx2_get_sset_count,
|
||||||
|
.set_flags = bnx2_set_flags,
|
||||||
|
.get_flags = ethtool_op_get_flags,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Called with rtnl_lock */
|
/* Called with rtnl_lock */
|
||||||
@@ -8333,7 +8345,8 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
memcpy(dev->dev_addr, bp->mac_addr, 6);
|
memcpy(dev->dev_addr, bp->mac_addr, 6);
|
||||||
memcpy(dev->perm_addr, bp->mac_addr, 6);
|
memcpy(dev->perm_addr, bp->mac_addr, 6);
|
||||||
|
|
||||||
dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_GRO;
|
dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_GRO |
|
||||||
|
NETIF_F_RXHASH;
|
||||||
vlan_features_add(dev, NETIF_F_IP_CSUM | NETIF_F_SG);
|
vlan_features_add(dev, NETIF_F_IP_CSUM | NETIF_F_SG);
|
||||||
if (CHIP_NUM(bp) == CHIP_NUM_5709) {
|
if (CHIP_NUM(bp) == CHIP_NUM_5709) {
|
||||||
dev->features |= NETIF_F_IPV6_CSUM;
|
dev->features |= NETIF_F_IPV6_CSUM;
|
||||||
|
@@ -295,6 +295,9 @@ struct l2_fhdr {
|
|||||||
#define L2_FHDR_ERRORS_TCP_XSUM (1<<28)
|
#define L2_FHDR_ERRORS_TCP_XSUM (1<<28)
|
||||||
#define L2_FHDR_ERRORS_UDP_XSUM (1<<31)
|
#define L2_FHDR_ERRORS_UDP_XSUM (1<<31)
|
||||||
|
|
||||||
|
#define L2_FHDR_STATUS_USE_RXHASH \
|
||||||
|
(L2_FHDR_STATUS_TCP_SEGMENT | L2_FHDR_STATUS_RSS_HASH)
|
||||||
|
|
||||||
u32 l2_fhdr_hash;
|
u32 l2_fhdr_hash;
|
||||||
#if defined(__BIG_ENDIAN)
|
#if defined(__BIG_ENDIAN)
|
||||||
u16 l2_fhdr_pkt_len;
|
u16 l2_fhdr_pkt_len;
|
||||||
|
Reference in New Issue
Block a user