]> git.openfabrics.org - compat-rdma/compat-rdma.git/commitdiff
qede: Backport to SLES12SP3
authorMichal Kalderon <michal.kalderon@cavium.com>
Tue, 25 Sep 2018 16:08:09 +0000 (19:08 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Tue, 25 Sep 2018 16:49:09 +0000 (11:49 -0500)
This patch includes BACKPORTS to SLES12SP3
This backport required modifying a linux-next-cherry-pick patch as well
so that it will be applied cleanly over backports

Signed-off-by: Michal Kalderon <michal.kalderon@cavium.com>
linux-next-cherry-picks/0014-qede-Add-build_skb-support.patch
patches/0031-qede-Backport-to-SLES12SP3.patch [new file with mode: 0644]

index 7fdc71e394cd8411f77ff38eafe9d0fcaa8a13b8..03d7a93eb96aa14cb23cf0723d01a63e1d245605 100644 (file)
@@ -1,4 +1,4 @@
-From 8a8633978b842c88fbcfe00d4e5dde96048f630e Mon Sep 17 00:00:00 2001
+From 9cd318eacf44d8febca72286ac1e6ceeec041f1c Mon Sep 17 00:00:00 2001
 From: Manish Chopra <manish.chopra@cavium.com>
 Date: Thu, 17 May 2018 12:05:00 -0700
 Subject: [PATCH 14/44] qede: Add build_skb() support.
@@ -51,14 +51,14 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
  drivers/net/ethernet/qlogic/qede/qede.h         |   5 +-
  drivers/net/ethernet/qlogic/qede/qede_ethtool.c |   3 +-
  drivers/net/ethernet/qlogic/qede/qede_fp.c      | 227 +++++++++++++-----------
- drivers/net/ethernet/qlogic/qede/qede_main.c    |  76 ++------
- 4 files changed, 137 insertions(+), 174 deletions(-)
+ drivers/net/ethernet/qlogic/qede/qede_main.c    |  74 ++------
+ 4 files changed, 136 insertions(+), 173 deletions(-)
 
 diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
-index 9935978c..2d3f09e 100644
+index 88ea270..a003bec 100644
 --- a/drivers/net/ethernet/qlogic/qede/qede.h
 +++ b/drivers/net/ethernet/qlogic/qede/qede.h
-@@ -290,15 +290,12 @@ struct qede_agg_info {
+@@ -301,15 +301,12 @@ struct qede_agg_info {
         * aggregation.
         */
        struct sw_rx_data buffer;
@@ -90,10 +90,10 @@ index ecbf1de..8c6fdad 100644
                    ether_addr_equal(data_ptr + ETH_ALEN,
                                     edev->ndev->dev_addr)) {
 diff --git a/drivers/net/ethernet/qlogic/qede/qede_fp.c b/drivers/net/ethernet/qlogic/qede/qede_fp.c
-index 1494130..6c70239 100644
+index b589b70..8a99e4d 100644
 --- a/drivers/net/ethernet/qlogic/qede/qede_fp.c
 +++ b/drivers/net/ethernet/qlogic/qede/qede_fp.c
-@@ -660,7 +660,8 @@ static int qede_fill_frag_skb(struct qede_dev *edev,
+@@ -668,7 +668,8 @@ static int qede_fill_frag_skb(struct qede_dev *edev,
  
        /* Add one frag and update the appropriate fields in the skb */
        skb_fill_page_desc(skb, tpa_info->frag_id++,
@@ -103,7 +103,7 @@ index 1494130..6c70239 100644
                           len_on_bd);
  
        if (unlikely(qede_realloc_rx_buffer(rxq, current_bd))) {
-@@ -671,8 +672,7 @@ static int qede_fill_frag_skb(struct qede_dev *edev,
+@@ -679,8 +680,7 @@ static int qede_fill_frag_skb(struct qede_dev *edev,
                goto out;
        }
  
@@ -113,7 +113,7 @@ index 1494130..6c70239 100644
  
        skb->data_len += len_on_bd;
        skb->truesize += rxq->rx_buf_seg_size;
-@@ -721,64 +721,129 @@ static u8 qede_check_tunn_csum(u16 flag)
+@@ -729,64 +729,129 @@ static u8 qede_check_tunn_csum(u16 flag)
        return QEDE_CSUM_UNNECESSARY | tcsum;
  }
  
@@ -282,7 +282,7 @@ index 1494130..6c70239 100644
        if ((le16_to_cpu(cqe->pars_flags.flags) >>
             PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT) &
            PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK)
-@@ -899,6 +964,10 @@ static int qede_tpa_end(struct qede_dev *edev,
+@@ -907,6 +972,10 @@ static int qede_tpa_end(struct qede_dev *edev,
        tpa_info = &rxq->tpa_info[cqe->tpa_agg_index];
        skb = tpa_info->skb;
  
@@ -293,7 +293,7 @@ index 1494130..6c70239 100644
        for (i = 0; cqe->len_list[i]; i++)
                qede_fill_frag_skb(edev, rxq, cqe->tpa_agg_index,
                                   le16_to_cpu(cqe->len_list[i]));
-@@ -919,11 +988,6 @@ static int qede_tpa_end(struct qede_dev *edev,
+@@ -927,11 +996,6 @@ static int qede_tpa_end(struct qede_dev *edev,
                       "Strange - total packet len [cqe] is %4x but SKB has len %04x\n",
                       le16_to_cpu(cqe->total_packet_len), skb->len);
  
@@ -305,7 +305,7 @@ index 1494130..6c70239 100644
        /* Finalize the SKB */
        skb->protocol = eth_type_trans(skb, edev->ndev);
        skb->ip_summed = CHECKSUM_UNNECESSARY;
-@@ -940,6 +1004,12 @@ static int qede_tpa_end(struct qede_dev *edev,
+@@ -948,6 +1012,12 @@ static int qede_tpa_end(struct qede_dev *edev,
        return 1;
  err:
        tpa_info->state = QEDE_AGG_STATE_NONE;
@@ -318,9 +318,9 @@ index 1494130..6c70239 100644
        dev_kfree_skb_any(tpa_info->skb);
        tpa_info->skb = NULL;
        return 0;
-@@ -1058,65 +1128,6 @@ static bool qede_rx_xdp(struct qede_dev *edev,
-       return false;
+@@ -1071,65 +1141,6 @@ static bool qede_rx_xdp(struct qede_dev *edev,
  }
+ #endif
  
 -static struct sk_buff *qede_rx_allocate_skb(struct qede_dev *edev,
 -                                          struct qede_rx_queue *rxq,
@@ -384,7 +384,7 @@ index 1494130..6c70239 100644
  static int qede_rx_build_jumbo(struct qede_dev *edev,
                               struct qede_rx_queue *rxq,
                               struct sk_buff *skb,
-@@ -1157,7 +1168,7 @@ static int qede_rx_build_jumbo(struct qede_dev *edev,
+@@ -1170,7 +1181,7 @@ static int qede_rx_build_jumbo(struct qede_dev *edev,
                               PAGE_SIZE, DMA_FROM_DEVICE);
  
                skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags++,
@@ -393,7 +393,7 @@ index 1494130..6c70239 100644
  
                skb->truesize += PAGE_SIZE;
                skb->data_len += cur_size;
-@@ -1256,7 +1267,7 @@ static int qede_rx_process_cqe(struct qede_dev *edev,
+@@ -1273,7 +1284,7 @@ static int qede_rx_process_cqe(struct qede_dev *edev,
        /* Basic validation passed; Need to prepare an SKB. This would also
         * guarantee to finally consume the first BD upon success.
         */
@@ -403,10 +403,10 @@ index 1494130..6c70239 100644
                rxq->rx_alloc_errors++;
                qede_recycle_rx_bd_ring(rxq, fp_cqe->bd_num);
 diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
-index 89c581c..40e2b92 100644
+index 9540bc7..daf766b 100644
 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c
 +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
-@@ -1197,30 +1197,8 @@ static void qede_free_rx_buffers(struct qede_dev *edev,
+@@ -1242,30 +1242,8 @@ static void qede_free_rx_buffers(struct qede_dev *edev,
        }
  }
  
@@ -437,7 +437,7 @@ index 89c581c..40e2b92 100644
        /* Free rx buffers */
        qede_free_rx_buffers(edev, rxq);
  
-@@ -1232,45 +1210,15 @@ static void qede_free_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
+@@ -1277,45 +1255,15 @@ static void qede_free_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
        edev->ops->common->chain_free(edev->cdev, &rxq->rx_comp_ring);
  }
  
@@ -484,39 +484,43 @@ index 89c581c..40e2b92 100644
  }
  
  /* This function allocates all memory needed per Rx queue */
-@@ -1281,19 +1229,24 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
-       rxq->num_rx_buffers = edev->q_num_rx_buffers;
+@@ -1327,24 +1275,29 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
  
        rxq->rx_buf_size = NET_IP_ALIGN + ETH_OVERHEAD + edev->ndev->mtu;
+ #ifdef HAVE_XDP
 -      rxq->rx_headroom = edev->xdp_prog ? XDP_PACKET_HEADROOM : 0;
-+
 +      rxq->rx_headroom = edev->xdp_prog ? XDP_PACKET_HEADROOM : NET_SKB_PAD;
+ #else
+       rxq->rx_headroom = 0;
+ #endif
 +      size = rxq->rx_headroom +
-+             SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
++               SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
++
        /* Make sure that the headroom and  payload fit in a single page */
 -      if (rxq->rx_buf_size + rxq->rx_headroom > PAGE_SIZE)
 -              rxq->rx_buf_size = PAGE_SIZE - rxq->rx_headroom;
 +      if (rxq->rx_buf_size + size > PAGE_SIZE)
 +              rxq->rx_buf_size = PAGE_SIZE - size;
  
--      /* Segment size to spilt a page in multiple equal parts,
-+      /* Segment size to spilt a page in multiple equal parts ,
+       /* Segment size to spilt a page in multiple equal parts,
         * unless XDP is used in which case we'd use the entire page.
         */
+ #ifdef HAVE_XDP
 -      if (!edev->xdp_prog)
--              rxq->rx_buf_seg_size = roundup_pow_of_two(rxq->rx_buf_size);
--      else
 +      if (!edev->xdp_prog) {
+ #endif
+-              rxq->rx_buf_seg_size = roundup_pow_of_two(rxq->rx_buf_size);
 +              size = size + rxq->rx_buf_size;
 +              rxq->rx_buf_seg_size = roundup_pow_of_two(size);
+ #ifdef HAVE_XDP
+-      else
 +      } else {
                rxq->rx_buf_seg_size = PAGE_SIZE;
 +      }
+ #endif
  
        /* Allocate the parallel driver ring for Rx buffers */
-       size = sizeof(*rxq->sw_rx_ring) * RX_RING_SIZE;
-@@ -1337,7 +1290,8 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
+@@ -1389,7 +1342,8 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
                }
        }
  
@@ -527,5 +531,5 @@ index 89c581c..40e2b92 100644
        return rc;
  }
 -- 
-2.9.5
+1.8.3.1
 
diff --git a/patches/0031-qede-Backport-to-SLES12SP3.patch b/patches/0031-qede-Backport-to-SLES12SP3.patch
new file mode 100644 (file)
index 0000000..9220b50
--- /dev/null
@@ -0,0 +1,129 @@
+From 2963fb1c60c84751a0f95ddb0f3f631ce308f344 Mon Sep 17 00:00:00 2001
+From: Michal Kalderon <michal.kalderon@cavium.com>
+Date: Tue, 25 Sep 2018 18:32:27 +0300
+Subject: [PATCH] qede: SLES12SP3 BACKPORT
+
+Signed-off-by: Michal Kalderon <michal.kalderon@cavium.com>
+---
+ drivers/net/ethernet/qlogic/qede/qede.h        |  4 ++++
+ drivers/net/ethernet/qlogic/qede/qede_filter.c |  2 ++
+ drivers/net/ethernet/qlogic/qede/qede_fp.c     |  4 ++++
+ drivers/net/ethernet/qlogic/qede/qede_main.c   | 14 ++++++++++++--
+ 4 files changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
+index 0386a7a..88ea270 100644
+--- a/drivers/net/ethernet/qlogic/qede/qede.h
++++ b/drivers/net/ethernet/qlogic/qede/qede.h
+@@ -39,7 +39,9 @@
+ #include <linux/bitmap.h>
+ #include <linux/kernel.h>
+ #include <linux/mutex.h>
++#ifdef HAVE_XDP
+ #include <linux/bpf.h>
++#endif
+ #ifdef HAVE_NET_XDP_H
+ #include <net/xdp.h>
+ #endif
+@@ -515,8 +517,10 @@ void qede_config_rx_mode(struct net_device *ndev);
+ void qede_fill_rss_params(struct qede_dev *edev,
+                         struct qed_update_vport_rss_params *rss, u8 *update);
++#ifdef HAVE_UDP_TUNNEL_GET_RX_INFO
+ void qede_udp_tunnel_add(struct net_device *dev, struct udp_tunnel_info *ti);
+ void qede_udp_tunnel_del(struct net_device *dev, struct udp_tunnel_info *ti);
++#endif
+ #ifdef HAVE_NETDEV_BPF
+ int qede_xdp(struct net_device *dev, struct netdev_bpf *xdp);
+diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
+index 9da9e1e..57edea4 100644
+--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
++++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
+@@ -955,6 +955,7 @@ int qede_set_features(struct net_device *dev, netdev_features_t features)
+       return 0;
+ }
++#ifdef HAVE_UDP_TUNNEL_GET_RX_INFO
+ void qede_udp_tunnel_add(struct net_device *dev, struct udp_tunnel_info *ti)
+ {
+       struct qede_dev *edev = netdev_priv(dev);
+@@ -1065,6 +1066,7 @@ void qede_udp_tunnel_del(struct net_device *dev,
+               return;
+       }
+ }
++#endif
+ #ifdef HAVE_XDP
+ static void qede_xdp_reload_func(struct qede_dev *edev,
+diff --git a/drivers/net/ethernet/qlogic/qede/qede_fp.c b/drivers/net/ethernet/qlogic/qede/qede_fp.c
+index 766b1c9..b589b70 100644
+--- a/drivers/net/ethernet/qlogic/qede/qede_fp.c
++++ b/drivers/net/ethernet/qlogic/qede/qede_fp.c
+@@ -44,6 +44,10 @@
+ #include <linux/qed/qed_if.h>
+ #include "qede.h"
++
++#ifndef HAVE_LINUX_PAGE_REF_H
++#define page_ref_inc(val) atomic_inc(&val->_count)
++#endif
+ /*********************************
+  * Content also used by slowpath *
+  *********************************/
+diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
+index 1b0bcb5..5b05683 100644
+--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
++++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
+@@ -47,7 +47,9 @@
+ #include <linux/netdev_features.h>
+ #include <linux/udp.h>
+ #include <linux/tcp.h>
++#ifdef HAVE_UDP_TUNNEL_GET_RX_INFO
+ #include <net/udp_tunnel.h>
++#endif
+ #include <linux/ip.h>
+ #include <net/ipv6.h>
+ #include <net/tcp.h>
+@@ -1324,8 +1326,11 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
+       rxq->num_rx_buffers = edev->q_num_rx_buffers;
+       rxq->rx_buf_size = NET_IP_ALIGN + ETH_OVERHEAD + edev->ndev->mtu;
++#ifdef HAVE_XDP
+       rxq->rx_headroom = edev->xdp_prog ? XDP_PACKET_HEADROOM : 0;
+-
++#else
++      rxq->rx_headroom = 0;
++#endif
+       /* Make sure that the headroom and  payload fit in a single page */
+       if (rxq->rx_buf_size + rxq->rx_headroom > PAGE_SIZE)
+               rxq->rx_buf_size = PAGE_SIZE - rxq->rx_headroom;
+@@ -1333,10 +1338,14 @@ static int qede_alloc_mem_rxq(struct qede_dev *edev, struct qede_rx_queue *rxq)
+       /* Segment size to spilt a page in multiple equal parts,
+        * unless XDP is used in which case we'd use the entire page.
+        */
++#ifdef HAVE_XDP
+       if (!edev->xdp_prog)
++#endif
+               rxq->rx_buf_seg_size = roundup_pow_of_two(rxq->rx_buf_size);
++#ifdef HAVE_XDP
+       else
+               rxq->rx_buf_seg_size = PAGE_SIZE;
++#endif
+       /* Allocate the parallel driver ring for Rx buffers */
+       size = sizeof(*rxq->sw_rx_ring) * RX_RING_SIZE;
+@@ -2182,8 +2191,9 @@ static int qede_open(struct net_device *ndev)
+       rc = qede_load(edev, QEDE_LOAD_NORMAL, false);
+       if (rc)
+               return rc;
+-
++#ifdef HAVE_UDP_TUNNEL_GET_RX_INFO
+       udp_tunnel_get_rx_info(ndev);
++#endif
+       edev->ops->common->update_drv_state(edev->cdev, true);
+-- 
+1.8.3.1
+