IPoIB: Remove LRO support
authorOr Gerlitz <ogerlitz@voltaire.com>
Tue, 11 Jan 2011 01:41:54 +0000 (17:41 -0800)
committerRoland Dreier <rolandd@cisco.com>
Tue, 11 Jan 2011 01:41:54 +0000 (17:41 -0800)
As a first step in moving from LRO to GRO, revert commit af40da894e9
("IPoIB: add LRO support").  Also eliminate the ethtool set_flags
callback which isn't needed anymore.  Finally, we need to include
<linux/sched.h> directly to get the declaration of restart_syscall()
(which used to be included implicitly through <linux/inet_lro.h>).

Cc: Ben Hutchings <bhutchings@solarflare.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Vladimir Sokolovsky <vlad@mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/ulp/ipoib/Kconfig
drivers/infiniband/ulp/ipoib/ipoib.h
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
drivers/infiniband/ulp/ipoib/ipoib_ib.c
drivers/infiniband/ulp/ipoib/ipoib_main.c

index 9d9a9dc51f18141227cc097ee63477e75235ac48..55855eeabae72c34b45ccc0890ac940dc27e8dc3 100644 (file)
@@ -1,7 +1,6 @@
 config INFINIBAND_IPOIB
        tristate "IP-over-InfiniBand"
        depends on NETDEVICES && INET && (IPV6 || IPV6=n)
-       select INET_LRO
        ---help---
          Support for the IP-over-InfiniBand protocol (IPoIB). This
          transports IP packets over InfiniBand so you can use your IB
index 753a983a5fdc8c85d6467e430f27bef4afc716b1..ab97f92fc257a9fb9741a86013542f742a0e3b29 100644 (file)
@@ -50,7 +50,7 @@
 #include <rdma/ib_verbs.h>
 #include <rdma/ib_pack.h>
 #include <rdma/ib_sa.h>
-#include <linux/inet_lro.h>
+#include <linux/sched.h>
 
 /* constants */
 
@@ -100,9 +100,6 @@ enum {
        IPOIB_MCAST_FLAG_BUSY     = 2,  /* joining or already joined */
        IPOIB_MCAST_FLAG_ATTACHED = 3,
 
-       IPOIB_MAX_LRO_DESCRIPTORS = 8,
-       IPOIB_LRO_MAX_AGGR        = 64,
-
        MAX_SEND_CQE              = 16,
        IPOIB_CM_COPYBREAK        = 256,
 };
@@ -262,11 +259,6 @@ struct ipoib_ethtool_st {
        u16     max_coalesced_frames;
 };
 
-struct ipoib_lro {
-       struct net_lro_mgr lro_mgr;
-       struct net_lro_desc lro_desc[IPOIB_MAX_LRO_DESCRIPTORS];
-};
-
 /*
  * Device private locking: network stack tx_lock protects members used
  * in TX fast path, lock protects everything else.  lock nests inside
@@ -352,8 +344,6 @@ struct ipoib_dev_priv {
        int     hca_caps;
        struct ipoib_ethtool_st ethtool;
        struct timer_list poll_timer;
-
-       struct ipoib_lro lro;
 };
 
 struct ipoib_ah {
index 1a1657c82edd61eaf3877963024516d705622e61..19f7f5206f781dfec652c4d5b0f026a9b80ac5a6 100644 (file)
@@ -106,63 +106,12 @@ static int ipoib_set_coalesce(struct net_device *dev,
        return 0;
 }
 
-static const char ipoib_stats_keys[][ETH_GSTRING_LEN] = {
-       "LRO aggregated", "LRO flushed",
-       "LRO avg aggr", "LRO no desc"
-};
-
-static void ipoib_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
-{
-       switch (stringset) {
-       case ETH_SS_STATS:
-               memcpy(data, *ipoib_stats_keys, sizeof(ipoib_stats_keys));
-               break;
-       }
-}
-
-static int ipoib_get_sset_count(struct net_device *dev, int sset)
-{
-       switch (sset) {
-       case ETH_SS_STATS:
-               return ARRAY_SIZE(ipoib_stats_keys);
-       default:
-               return -EOPNOTSUPP;
-       }
-}
-
-static void ipoib_get_ethtool_stats(struct net_device *dev,
-                               struct ethtool_stats *stats, uint64_t *data)
-{
-       struct ipoib_dev_priv *priv = netdev_priv(dev);
-       int index = 0;
-
-       /* Get LRO statistics */
-       data[index++] = priv->lro.lro_mgr.stats.aggregated;
-       data[index++] = priv->lro.lro_mgr.stats.flushed;
-       if (priv->lro.lro_mgr.stats.flushed)
-               data[index++] = priv->lro.lro_mgr.stats.aggregated /
-                               priv->lro.lro_mgr.stats.flushed;
-       else
-               data[index++] = 0;
-       data[index++] = priv->lro.lro_mgr.stats.no_desc;
-}
-
-static int ipoib_set_flags(struct net_device *dev, u32 flags)
-{
-       return ethtool_op_set_flags(dev, flags, ETH_FLAG_LRO);
-}
-
 static const struct ethtool_ops ipoib_ethtool_ops = {
        .get_drvinfo            = ipoib_get_drvinfo,
        .get_rx_csum            = ipoib_get_rx_csum,
        .set_tso                = ipoib_set_tso,
        .get_coalesce           = ipoib_get_coalesce,
        .set_coalesce           = ipoib_set_coalesce,
-       .get_flags              = ethtool_op_get_flags,
-       .set_flags              = ipoib_set_flags,
-       .get_strings            = ipoib_get_strings,
-       .get_sset_count         = ipoib_get_sset_count,
-       .get_ethtool_stats      = ipoib_get_ethtool_stats,
 };
 
 void ipoib_set_ethtool_ops(struct net_device *dev)
index dfa71903d6e467c59071e3cc01b04fea98c256b3..44c33bd979523049809b1256f52dcbd5a3bcb3cf 100644 (file)
@@ -295,10 +295,7 @@ static void ipoib_ib_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
        if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
                skb->ip_summed = CHECKSUM_UNNECESSARY;
 
-       if (dev->features & NETIF_F_LRO)
-               lro_receive_skb(&priv->lro.lro_mgr, skb, NULL);
-       else
-               netif_receive_skb(skb);
+       netif_receive_skb(skb);
 
 repost:
        if (unlikely(ipoib_ib_post_receive(dev, wr_id)))
@@ -450,9 +447,6 @@ poll_more:
        }
 
        if (done < budget) {
-               if (dev->features & NETIF_F_LRO)
-                       lro_flush_all(&priv->lro.lro_mgr);
-
                napi_complete(napi);
                if (unlikely(ib_req_notify_cq(priv->recv_cq,
                                              IB_CQ_NEXT_COMP |
index 9ff7bc73ed95e8689bede687e30086acc99fe4fe..c434a856a787dea6c235f56a7c666e5a3c22aee7 100644 (file)
@@ -60,15 +60,6 @@ MODULE_PARM_DESC(send_queue_size, "Number of descriptors in send queue");
 module_param_named(recv_queue_size, ipoib_recvq_size, int, 0444);
 MODULE_PARM_DESC(recv_queue_size, "Number of descriptors in receive queue");
 
-static int lro;
-module_param(lro, bool, 0444);
-MODULE_PARM_DESC(lro,  "Enable LRO (Large Receive Offload)");
-
-static int lro_max_aggr = IPOIB_LRO_MAX_AGGR;
-module_param(lro_max_aggr, int, 0644);
-MODULE_PARM_DESC(lro_max_aggr, "LRO: Max packets to be aggregated "
-               "(default = 64)");
-
 #ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
 int ipoib_debug_level;
 
@@ -976,54 +967,6 @@ static const struct header_ops ipoib_header_ops = {
        .create = ipoib_hard_header,
 };
 
-static int get_skb_hdr(struct sk_buff *skb, void **iphdr,
-                      void **tcph, u64 *hdr_flags, void *priv)
-{
-       unsigned int ip_len;
-       struct iphdr *iph;
-
-       if (unlikely(skb->protocol != htons(ETH_P_IP)))
-               return -1;
-
-       /*
-        * In the future we may add an else clause that verifies the
-        * checksum and allows devices which do not calculate checksum
-        * to use LRO.
-        */
-       if (unlikely(skb->ip_summed != CHECKSUM_UNNECESSARY))
-               return -1;
-
-       /* Check for non-TCP packet */
-       skb_reset_network_header(skb);
-       iph = ip_hdr(skb);
-       if (iph->protocol != IPPROTO_TCP)
-               return -1;
-
-       ip_len = ip_hdrlen(skb);
-       skb_set_transport_header(skb, ip_len);
-       *tcph = tcp_hdr(skb);
-
-       /* check if IP header and TCP header are complete */
-       if (ntohs(iph->tot_len) < ip_len + tcp_hdrlen(skb))
-               return -1;
-
-       *hdr_flags = LRO_IPV4 | LRO_TCP;
-       *iphdr = iph;
-
-       return 0;
-}
-
-static void ipoib_lro_setup(struct ipoib_dev_priv *priv)
-{
-       priv->lro.lro_mgr.max_aggr       = lro_max_aggr;
-       priv->lro.lro_mgr.max_desc       = IPOIB_MAX_LRO_DESCRIPTORS;
-       priv->lro.lro_mgr.lro_arr        = priv->lro.lro_desc;
-       priv->lro.lro_mgr.get_skb_header = get_skb_hdr;
-       priv->lro.lro_mgr.features       = LRO_F_NAPI;
-       priv->lro.lro_mgr.dev            = priv->dev;
-       priv->lro.lro_mgr.ip_summed_aggr = CHECKSUM_UNNECESSARY;
-}
-
 static const struct net_device_ops ipoib_netdev_ops = {
        .ndo_open                = ipoib_open,
        .ndo_stop                = ipoib_stop,
@@ -1067,8 +1010,6 @@ static void ipoib_setup(struct net_device *dev)
 
        priv->dev = dev;
 
-       ipoib_lro_setup(priv);
-
        spin_lock_init(&priv->lock);
 
        mutex_init(&priv->vlan_mutex);
@@ -1218,9 +1159,6 @@ int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca)
                priv->dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
        }
 
-       if (lro)
-               priv->dev->features |= NETIF_F_LRO;
-
        if (priv->dev->features & NETIF_F_SG && priv->hca_caps & IB_DEVICE_UD_TSO)
                priv->dev->features |= NETIF_F_TSO;