[PATCH 0/3][B][SRU] hns3: add hns3_gro_complete for HW GRO process

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH 0/3][B][SRU] hns3: add hns3_gro_complete for HW GRO process

Ike Panhc
BugLink: https://launchpad.net/bugs/1893711

We get report that kernel oops when hardware GRO enabled on hns3
interfaces. Cherry-picking patches from upstream can solve this issue.

The patches needed are
 d474d88f8826 ("net: hns3: add hns3_gro_complete for HW GRO process")
 a4d2cdcbb878 ("net: hns3: minor refactor for hns3_rx_checksum")
and they depend on
 c376fa1aae63 ("net: hns3: add rx multicast packets statistic")

e8149933b1fa ("net: hns3: remove hnae3_get_bit in data path") is also
needed but since there is no function changes, to backport patch for
hns3_gro_complete is an easier and simpler solution.

Jian Shen (1):
  net: hns3: add rx multicast packets statistic

Yunsheng Lin (2):
  net: hns3: minor refactor for hns3_rx_checksum
  net: hns3: add hns3_gro_complete for HW GRO process

 .../net/ethernet/hisilicon/hns3/hns3_enet.c   | 203 +++++++++++-------
 .../net/ethernet/hisilicon/hns3/hns3_enet.h   |   8 +
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    |   1 +
 3 files changed, 133 insertions(+), 79 deletions(-)

--
2.25.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[PATCH 1/3] net: hns3: add rx multicast packets statistic

Ike Panhc
From: Jian Shen <[hidden email]>

BugLink: https://launchpad.net/bugs/1893711

This patch adds rx multicast packets statistic for each ring.

Signed-off-by: Jian Shen <[hidden email]>
Signed-off-by: Peng Li <[hidden email]>
Signed-off-by: Huazhong Tan <[hidden email]>
Signed-off-by: David S. Miller <[hidden email]>
(cherry picked from commit c376fa1aae6328beb5551e92fa84f4441fdde399)
Signed-off-by: Ike Panhc <[hidden email]>
---
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c    | 6 ++++++
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.h    | 8 ++++++++
 drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 1 +
 3 files changed, 15 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 06d63d45e499..ee3ac4f946ef 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2590,6 +2590,7 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
      struct sk_buff **out_skb)
 {
  struct net_device *netdev = ring->tqp->handle->kinfo.netdev;
+ enum hns3_pkt_l2t_type l2_frame_type;
  struct sk_buff *skb = ring->skb;
  struct hns3_desc_cb *desc_cb;
  struct hns3_desc *desc;
@@ -2698,7 +2699,12 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
  return -EFAULT;
  }
 
+ l2_frame_type = hnae3_get_field(l234info, HNS3_RXD_DMAC_M,
+ HNS3_RXD_DMAC_S);
  u64_stats_update_begin(&ring->syncp);
+ if (l2_frame_type == HNS3_L2_TYPE_MULTICAST)
+ ring->stats.rx_multicast++;
+
  ring->stats.rx_pkts++;
  ring->stats.rx_bytes += skb->len;
  u64_stats_update_end(&ring->syncp);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
index 7104c9a12843..ab99fe02a1c6 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
@@ -205,6 +205,13 @@ enum hns3_nic_state {
 
 #define HNS3_RING_EN_B 0
 
+enum hns3_pkt_l2t_type {
+ HNS3_L2_TYPE_UNICAST,
+ HNS3_L2_TYPE_MULTICAST,
+ HNS3_L2_TYPE_BROADCAST,
+ HNS3_L2_TYPE_INVALID,
+};
+
 enum hns3_pkt_l3t_type {
  HNS3_L3T_NONE,
  HNS3_L3T_IPV6,
@@ -380,6 +387,7 @@ struct ring_stats {
  u64 err_bd_num;
  u64 l2_err;
  u64 l3l4_csum_err;
+ u64 rx_multicast;
  };
  };
 };
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index c8e3c7462105..17c72e63e35d 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -48,6 +48,7 @@ static const struct hns3_stats hns3_rxq_stats[] = {
  HNS3_TQP_STAT("err_bd_num", err_bd_num),
  HNS3_TQP_STAT("l2_err", l2_err),
  HNS3_TQP_STAT("l3l4_csum_err", l3l4_csum_err),
+ HNS3_TQP_STAT("multicast", rx_multicast),
 };
 
 #define HNS3_RXQ_STATS_COUNT ARRAY_SIZE(hns3_rxq_stats)
--
2.25.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[PATCH 2/3] net: hns3: minor refactor for hns3_rx_checksum

Ike Panhc
In reply to this post by Ike Panhc
From: Yunsheng Lin <[hidden email]>

BugLink: https://launchpad.net/bugs/1893711

Change the parameters of hns3_rx_checksum to be more specific to
what is used internally, rather than passing in a pointer to the
whole hns3_desc. Reduces duplicate code and bring this function
inline with the approach used in hns3_set_gro_param.

Signed-off-by: Yunsheng Lin <[hidden email]>
Signed-off-by: Huazhong Tan <[hidden email]>
Signed-off-by: David S. Miller <[hidden email]>
(cherry picked from commit a4d2cdcbb878d4d5828cd4124104c330d2817211)
Signed-off-by: Ike Panhc <[hidden email]>
---
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index ee3ac4f946ef..4fda2c39889f 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2312,16 +2312,11 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i,
 }
 
 static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
-     struct hns3_desc *desc)
+     u32 l234info, u32 bd_base_info)
 {
  struct net_device *netdev = ring->tqp->handle->kinfo.netdev;
  int l3_type, l4_type;
- u32 bd_base_info;
  int ol4_type;
- u32 l234info;
-
- bd_base_info = le32_to_cpu(desc->rx.bd_base_info);
- l234info = le32_to_cpu(desc->rx.l234_info);
 
  skb->ip_summed = CHECKSUM_NONE;
 
@@ -2714,7 +2709,7 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
  /* This is needed in order to enable forwarding support */
  hns3_set_gro_param(skb, l234info, bd_base_info);
 
- hns3_rx_checksum(ring, skb, desc);
+ hns3_rx_checksum(ring, skb, l234info, bd_base_info);
  *out_skb = skb;
  hns3_set_rx_skb_rss_type(ring, skb);
 
--
2.25.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

[PATCH 3/3] net: hns3: add hns3_gro_complete for HW GRO process

Ike Panhc
In reply to this post by Ike Panhc
From: Yunsheng Lin <[hidden email]>

BugLink: https://launchpad.net/bugs/1893711

When a GRO packet is received by driver, the cwr field in the
struct tcphdr needs to be checked to decide whether to set the
SKB_GSO_TCP_ECN for skb_shinfo(skb)->gso_type.

So this patch adds hns3_gro_complete to do that, and adds the
hns3_handle_bdinfo to handle the hns3_gro_complete and
hns3_rx_checksum.

Signed-off-by: Yunsheng Lin <[hidden email]>
Signed-off-by: Huazhong Tan <[hidden email]>
Signed-off-by: David S. Miller <[hidden email]>
(backported from commit d474d88f882610850abbf0ec6cf81ff90014c8ed)
Signed-off-by: Ike Panhc <[hidden email]>
---
 .../net/ethernet/hisilicon/hns3/hns3_enet.c   | 202 +++++++++++-------
 1 file changed, 123 insertions(+), 79 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 4fda2c39889f..376c121f7912 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2311,6 +2311,44 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i,
  }
 }
 
+static int hns3_gro_complete(struct sk_buff *skb)
+{
+ __be16 type = skb->protocol;
+ struct tcphdr *th;
+ int depth = 0;
+
+ while (type == htons(ETH_P_8021Q)) {
+ struct vlan_hdr *vh;
+
+ if ((depth + VLAN_HLEN) > skb_headlen(skb))
+ return -EFAULT;
+
+ vh = (struct vlan_hdr *)(skb->data + depth);
+ type = vh->h_vlan_encapsulated_proto;
+ depth += VLAN_HLEN;
+ }
+
+ if (type == htons(ETH_P_IP)) {
+ depth += sizeof(struct iphdr);
+ } else if (type == htons(ETH_P_IPV6)) {
+ depth += sizeof(struct ipv6hdr);
+ } else {
+ netdev_err(skb->dev,
+   "Error: FW GRO supports only IPv4/IPv6, not 0x%04x, depth: %d\n",
+   be16_to_cpu(type), depth);
+ return -EFAULT;
+ }
+
+ th = (struct tcphdr *)(skb->data + depth);
+ skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
+ if (th->cwr)
+ skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
+
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
+
+ return 0;
+}
+
 static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
      u32 l234info, u32 bd_base_info)
 {
@@ -2325,12 +2363,6 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb,
  if (!(netdev->features & NETIF_F_RXCSUM))
  return;
 
- /* We MUST enable hardware checksum before enabling hardware GRO */
- if (skb_shinfo(skb)->gso_size) {
- skb->ip_summed = CHECKSUM_UNNECESSARY;
- return;
- }
-
  /* check if hardware has done checksum */
  if (!hnae3_get_bit(bd_base_info, HNS3_RXD_L3L4P_B))
  return;
@@ -2526,8 +2558,9 @@ static int hns3_add_frag(struct hns3_enet_ring *ring, struct hns3_desc *desc,
  return 0;
 }
 
-static void hns3_set_gro_param(struct sk_buff *skb, u32 l234info,
-       u32 bd_base_info)
+static int hns3_set_gro_and_checksum(struct hns3_enet_ring *ring,
+     struct sk_buff *skb, u32 l234info,
+     u32 bd_base_info)
 {
  u16 gro_count;
  u32 l3_type;
@@ -2535,12 +2568,11 @@ static void hns3_set_gro_param(struct sk_buff *skb, u32 l234info,
  gro_count = hnae3_get_field(l234info, HNS3_RXD_GRO_COUNT_M,
     HNS3_RXD_GRO_COUNT_S);
  /* if there is no HW GRO, do not set gro params */
- if (!gro_count)
- return;
+ if (!gro_count) {
+ hns3_rx_checksum(ring, skb, l234info, bd_base_info);
+ return 0;
+ }
 
- /* tcp_gro_complete() will copy NAPI_GRO_CB(skb)->count
- * to skb_shinfo(skb)->gso_segs
- */
  NAPI_GRO_CB(skb)->count = gro_count;
 
  l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M,
@@ -2550,13 +2582,13 @@ static void hns3_set_gro_param(struct sk_buff *skb, u32 l234info,
  else if (l3_type == HNS3_L3_TYPE_IPV6)
  skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
  else
- return;
+ return -EFAULT;
 
  skb_shinfo(skb)->gso_size = hnae3_get_field(bd_base_info,
     HNS3_RXD_GRO_SIZE_M,
     HNS3_RXD_GRO_SIZE_S);
- if (skb_shinfo(skb)->gso_size)
- tcp_gro_complete(skb);
+
+ return  hns3_gro_complete(skb);
 }
 
 static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
@@ -2581,16 +2613,85 @@ static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
  skb_set_hash(skb, le32_to_cpu(desc->rx.rss_hash), rss_type);
 }
 
-static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
-     struct sk_buff **out_skb)
+static int hns3_handle_bdinfo(struct hns3_enet_ring *ring, struct sk_buff *skb,
+      struct hns3_desc *desc)
 {
  struct net_device *netdev = ring->tqp->handle->kinfo.netdev;
+ u32 bd_base_info = le32_to_cpu(desc->rx.bd_base_info);
+ u32 l234info = le32_to_cpu(desc->rx.l234_info);
  enum hns3_pkt_l2t_type l2_frame_type;
+ unsigned int len;
+ int ret;
+
+ /* Based on hw strategy, the tag offloaded will be stored at
+ * ot_vlan_tag in two layer tag case, and stored at vlan_tag
+ * in one layer tag case.
+ */
+ if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
+ u16 vlan_tag;
+
+ if (hns3_parse_vlan_tag(ring, desc, l234info, &vlan_tag))
+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+       vlan_tag);
+ }
+
+ if (unlikely(!(bd_base_info & BIT(HNS3_RXD_VLD_B)))) {
+ u64_stats_update_begin(&ring->syncp);
+ ring->stats.non_vld_descs++;
+ u64_stats_update_end(&ring->syncp);
+
+ return -EINVAL;
+ }
+
+ if (unlikely(!desc->rx.pkt_len || (l234info & (BIT(HNS3_RXD_TRUNCAT_B) |
+  BIT(HNS3_RXD_L2E_B))))) {
+ u64_stats_update_begin(&ring->syncp);
+ if (l234info & BIT(HNS3_RXD_L2E_B))
+ ring->stats.l2_err++;
+ else
+ ring->stats.err_pkt_len++;
+ u64_stats_update_end(&ring->syncp);
+
+ return -EFAULT;
+ }
+
+ len = skb->len;
+
+ /* Do update ip stack process */
+ skb->protocol = eth_type_trans(skb, netdev);
+
+ /* This is needed in order to enable forwarding support */
+ ret = hns3_set_gro_and_checksum(ring, skb, l234info, bd_base_info);
+ if (unlikely(ret)) {
+ u64_stats_update_begin(&ring->syncp);
+ ring->stats.rx_err_cnt++;
+ u64_stats_update_end(&ring->syncp);
+ return ret;
+ }
+
+ l2_frame_type = hnae3_get_field(l234info, HNS3_RXD_DMAC_M,
+ HNS3_RXD_DMAC_S);
+
+ u64_stats_update_begin(&ring->syncp);
+ ring->stats.rx_pkts++;
+ ring->stats.rx_bytes += len;
+
+ if (l2_frame_type == HNS3_L2_TYPE_MULTICAST)
+ ring->stats.rx_multicast++;
+
+ u64_stats_update_end(&ring->syncp);
+
+ ring->tqp_vector->rx_group.total_bytes += len;
+ return 0;
+}
+
+static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
+     struct sk_buff **out_skb)
+{
  struct sk_buff *skb = ring->skb;
  struct hns3_desc_cb *desc_cb;
  struct hns3_desc *desc;
  u32 bd_base_info;
- u32 l234info;
  int length;
  int ret;
 
@@ -2650,66 +2751,12 @@ static int hns3_handle_rx_bd(struct hns3_enet_ring *ring,
        ALIGN(ring->pull_len, sizeof(long)));
  }
 
- l234info = le32_to_cpu(desc->rx.l234_info);
- bd_base_info = le32_to_cpu(desc->rx.bd_base_info);
-
- /* Based on hw strategy, the tag offloaded will be stored at
- * ot_vlan_tag in two layer tag case, and stored at vlan_tag
- * in one layer tag case.
- */
- if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX) {
- u16 vlan_tag;
-
- if (hns3_parse_vlan_tag(ring, desc, l234info, &vlan_tag))
- __vlan_hwaccel_put_tag(skb,
-       htons(ETH_P_8021Q),
-       vlan_tag);
- }
-
- if (unlikely(!hnae3_get_bit(bd_base_info, HNS3_RXD_VLD_B))) {
- u64_stats_update_begin(&ring->syncp);
- ring->stats.non_vld_descs++;
- u64_stats_update_end(&ring->syncp);
-
- dev_kfree_skb_any(skb);
- return -EINVAL;
- }
-
- if (unlikely((!desc->rx.pkt_len) ||
-     hnae3_get_bit(l234info, HNS3_RXD_TRUNCAT_B))) {
- u64_stats_update_begin(&ring->syncp);
- ring->stats.err_pkt_len++;
- u64_stats_update_end(&ring->syncp);
-
- dev_kfree_skb_any(skb);
- return -EFAULT;
- }
-
- if (unlikely(hnae3_get_bit(l234info, HNS3_RXD_L2E_B))) {
- u64_stats_update_begin(&ring->syncp);
- ring->stats.l2_err++;
- u64_stats_update_end(&ring->syncp);
-
+ ret = hns3_handle_bdinfo(ring, skb, desc);
+ if (unlikely(ret)) {
  dev_kfree_skb_any(skb);
- return -EFAULT;
+ return ret;
  }
 
- l2_frame_type = hnae3_get_field(l234info, HNS3_RXD_DMAC_M,
- HNS3_RXD_DMAC_S);
- u64_stats_update_begin(&ring->syncp);
- if (l2_frame_type == HNS3_L2_TYPE_MULTICAST)
- ring->stats.rx_multicast++;
-
- ring->stats.rx_pkts++;
- ring->stats.rx_bytes += skb->len;
- u64_stats_update_end(&ring->syncp);
-
- ring->tqp_vector->rx_group.total_bytes += skb->len;
-
- /* This is needed in order to enable forwarding support */
- hns3_set_gro_param(skb, l234info, bd_base_info);
-
- hns3_rx_checksum(ring, skb, l234info, bd_base_info);
  *out_skb = skb;
  hns3_set_rx_skb_rss_type(ring, skb);
 
@@ -2721,7 +2768,6 @@ int hns3_clean_rx_ring(
  void (*rx_fn)(struct hns3_enet_ring *, struct sk_buff *))
 {
 #define RCB_NOF_ALLOC_RX_BUFF_ONCE 16
- struct net_device *netdev = ring->tqp->handle->kinfo.netdev;
  int recv_pkts, recv_bds, clean_count, err;
  int unused_count = hns3_desc_unused(ring) - ring->pending_buf;
  struct sk_buff *skb = ring->skb;
@@ -2758,8 +2804,6 @@ int hns3_clean_rx_ring(
  continue;
  }
 
- /* Do update ip stack process */
- skb->protocol = eth_type_trans(skb, netdev);
  rx_fn(ring, skb);
  recv_bds += ring->pending_buf;
  clean_count += ring->pending_buf;
--
2.25.1


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

ACK: [PATCH 0/3][B][SRU] hns3: add hns3_gro_complete for HW GRO process

Stefan Bader-2
In reply to this post by Ike Panhc
On 08.10.20 07:31, Ike Panhc wrote:

> BugLink: https://launchpad.net/bugs/1893711
>
> We get report that kernel oops when hardware GRO enabled on hns3
> interfaces. Cherry-picking patches from upstream can solve this issue.
>
> The patches needed are
>  d474d88f8826 ("net: hns3: add hns3_gro_complete for HW GRO process")
>  a4d2cdcbb878 ("net: hns3: minor refactor for hns3_rx_checksum")
> and they depend on
>  c376fa1aae63 ("net: hns3: add rx multicast packets statistic")
>
> e8149933b1fa ("net: hns3: remove hnae3_get_bit in data path") is also
> needed but since there is no function changes, to backport patch for
> hns3_gro_complete is an easier and simpler solution.
>
> Jian Shen (1):
>   net: hns3: add rx multicast packets statistic
>
> Yunsheng Lin (2):
>   net: hns3: minor refactor for hns3_rx_checksum
>   net: hns3: add hns3_gro_complete for HW GRO process
>
>  .../net/ethernet/hisilicon/hns3/hns3_enet.c   | 203 +++++++++++-------
>  .../net/ethernet/hisilicon/hns3/hns3_enet.h   |   8 +
>  .../ethernet/hisilicon/hns3/hns3_ethtool.c    |   1 +
>  3 files changed, 133 insertions(+), 79 deletions(-)
>
Acked-by: Stefan Bader <[hidden email]>


--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team

signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

ACK: [PATCH 0/3][B][SRU] hns3: add hns3_gro_complete for HW GRO process

Kleber Souza
In reply to this post by Ike Panhc
On 08.10.20 07:31, Ike Panhc wrote:

> BugLink: https://launchpad.net/bugs/1893711
>
> We get report that kernel oops when hardware GRO enabled on hns3
> interfaces. Cherry-picking patches from upstream can solve this issue.
>
> The patches needed are
>  d474d88f8826 ("net: hns3: add hns3_gro_complete for HW GRO process")
>  a4d2cdcbb878 ("net: hns3: minor refactor for hns3_rx_checksum")
> and they depend on
>  c376fa1aae63 ("net: hns3: add rx multicast packets statistic")
>
> e8149933b1fa ("net: hns3: remove hnae3_get_bit in data path") is also
> needed but since there is no function changes, to backport patch for
> hns3_gro_complete is an easier and simpler solution.
>
> Jian Shen (1):
>   net: hns3: add rx multicast packets statistic
>
> Yunsheng Lin (2):
>   net: hns3: minor refactor for hns3_rx_checksum
>   net: hns3: add hns3_gro_complete for HW GRO process
>
>  .../net/ethernet/hisilicon/hns3/hns3_enet.c   | 203 +++++++++++-------
>  .../net/ethernet/hisilicon/hns3/hns3_enet.h   |   8 +
>  .../ethernet/hisilicon/hns3/hns3_ethtool.c    |   1 +
>  3 files changed, 133 insertions(+), 79 deletions(-)
>


Acked-by: Kleber Sacilotto de Souza <[hidden email]>

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team
Reply | Threaded
Open this post in threaded view
|

APPLIED: [PATCH 0/3][B][SRU] hns3: add hns3_gro_complete for HW GRO process

Ian May
In reply to this post by Ike Panhc
Applied to Bionic/master-next.  

Thanks!
Ian

On 2020-10-08 13:31:59 , Ike Panhc wrote:

> BugLink: https://launchpad.net/bugs/1893711
>
> We get report that kernel oops when hardware GRO enabled on hns3
> interfaces. Cherry-picking patches from upstream can solve this issue.
>
> The patches needed are
>  d474d88f8826 ("net: hns3: add hns3_gro_complete for HW GRO process")
>  a4d2cdcbb878 ("net: hns3: minor refactor for hns3_rx_checksum")
> and they depend on
>  c376fa1aae63 ("net: hns3: add rx multicast packets statistic")
>
> e8149933b1fa ("net: hns3: remove hnae3_get_bit in data path") is also
> needed but since there is no function changes, to backport patch for
> hns3_gro_complete is an easier and simpler solution.
>
> Jian Shen (1):
>   net: hns3: add rx multicast packets statistic
>
> Yunsheng Lin (2):
>   net: hns3: minor refactor for hns3_rx_checksum
>   net: hns3: add hns3_gro_complete for HW GRO process
>
>  .../net/ethernet/hisilicon/hns3/hns3_enet.c   | 203 +++++++++++-------
>  .../net/ethernet/hisilicon/hns3/hns3_enet.h   |   8 +
>  .../ethernet/hisilicon/hns3/hns3_ethtool.c    |   1 +
>  3 files changed, 133 insertions(+), 79 deletions(-)
>
> --
> 2.25.1
>
>
> --
> kernel-team mailing list
> [hidden email]
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

--
kernel-team mailing list
[hidden email]
https://lists.ubuntu.com/mailman/listinfo/kernel-team