[ewg] [PATCH] RDMA/nes: Updated backports
Tatyana Nikolova
Tatyana.E.Nikolova at intel.com
Sat Aug 25 18:39:12 PDT 2012
OFED-3.5/NES: Updated backports to be applied on top of the previously submitted backport patch.
Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova at intel.com>
---
drivers/infiniband/hw/nes/nes_hw.c | 11 ++++++++
drivers/infiniband/hw/nes/nes_hw.h | 3 ++
drivers/infiniband/hw/nes/nes_nic.c | 49 ++++++++++++++++++++++++++++------
3 files changed, 54 insertions(+), 9 deletions(-)
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index d42c9f4..151cefe 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -2951,7 +2951,18 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
nes_debug(NES_DBG_CQ, "%s: Reporting stripped VLAN packet. Tag = 0x%04X\n",
nesvnic->netdev->name, vlan_tag);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+ if (nesvnic->vlan_grp != NULL) {
+ if (nes_use_lro)
+ lro_vlan_hwaccel_receive_skb(&nesvnic->lro_mgr, rx_skb,
+ nesvnic->vlan_grp, vlan_tag, NULL);
+ else
+ vlan_hwaccel_receive_skb(rx_skb, nesvnic->vlan_grp, vlan_tag);
+ goto skip_rx_indicate0;
+ }
+#endif
__vlan_hwaccel_put_tag(rx_skb, vlan_tag);
+
}
if (nes_use_lro)
lro_receive_skb(&nesvnic->lro_mgr, rx_skb, NULL);
diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h
index d748e4b..b4a31de 100644
--- a/drivers/infiniband/hw/nes/nes_hw.h
+++ b/drivers/infiniband/hw/nes/nes_hw.h
@@ -1236,6 +1236,9 @@ struct nes_vnic {
/* void *mem; */
struct nes_device *nesdev;
struct net_device *netdev;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+ struct vlan_group *vlan_grp;
+#endif
atomic_t rx_skbs_needed;
atomic_t rx_skb_timer_running;
int budget;
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index 8544d0a..864469f 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -1597,6 +1597,33 @@ static const struct ethtool_ops nes_ethtool_ops = {
.set_pauseparam = nes_netdev_set_pauseparam,
};
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
+{
+ struct nes_vnic *nesvnic = netdev_priv(netdev);
+ struct nes_device *nesdev = nesvnic->nesdev;
+ struct nes_adapter *nesadapter = nesdev->nesadapter;
+ u32 u32temp;
+ unsigned long flags;
+
+ spin_lock_irqsave(&nesadapter->phy_lock, flags);
+ nesvnic->vlan_grp = grp;
+
+ nes_debug(NES_DBG_NETDEV, "%s: %s\n", __func__, netdev->name);
+
+ /* Enable/Disable VLAN Stripping */
+ u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG);
+ if (grp)
+ u32temp &= 0xfdffffff;
+ else
+ u32temp |= 0x02000000;
+
+ nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp);
+ spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
+}
+#endif
+
static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, netdev_features_t features)
{
struct nes_adapter *nesadapter = nesdev->nesadapter;
@@ -1618,6 +1645,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev,
spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
}
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features)
{
@@ -1656,6 +1684,9 @@ static const struct net_device_ops nes_netdev_ops = {
.ndo_set_rx_mode = nes_netdev_set_multicast_list,
.ndo_change_mtu = nes_netdev_change_mtu,
.ndo_validate_addr = eth_validate_addr,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+ .ndo_vlan_rx_register = nes_netdev_vlan_rx_register,
+#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
.ndo_fix_features = nes_fix_features,
.ndo_set_features = nes_set_features,
@@ -1691,12 +1722,10 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
netdev->hard_header_len = ETH_HLEN;
netdev->addr_len = ETH_ALEN;
netdev->type = ARPHRD_ETHER;
- netdev->features = NETIF_F_HIGHDMA;
netdev->netdev_ops = &nes_netdev_ops;
netdev->ethtool_ops = &nes_ethtool_ops;
netif_napi_add(netdev, &nesvnic->napi, nes_netdev_poll, 128);
nes_debug(NES_DBG_INIT, "Enabling VLAN Insert/Delete.\n");
- netdev->features |= NETIF_F_HW_VLAN_TX;
/* Fill in the port structure */
nesvnic->netdev = netdev;
@@ -1723,19 +1752,20 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
netdev->dev_addr[5] = (u8)u64temp;
memcpy(netdev->perm_addr, netdev->dev_addr, 6);
- netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
+ netdev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_RX;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
- netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM |
- NETIF_F_HW_VLAN_RX;
- netdev->features |= netdev->hw_features;
- netdev->hw_features |= NETIF_F_LRO;
+ netdev->hw_features |= netdev->features | NETIF_F_LRO;
#endif
+ netdev->features |= NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_TX;
+
if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) {
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3,3,0))
+ netdev->features |= NETIF_F_TSO;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
netdev->hw_features |= NETIF_F_TSO;
#endif
- netdev->features |= NETIF_F_TSO | NETIF_F_GSO;
+#endif
}
nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid = %d,"
@@ -1864,8 +1894,9 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
nes_init_phy(nesdev);
}
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
nes_vlan_mode(netdev, nesdev, netdev->features);
-
+#endif
return netdev;
}
--
1.7.4.2
More information about the ewg
mailing list