]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: hns3: fix the max tx size according to user manual
authorYunsheng Lin <linyunsheng@huawei.com>
Tue, 19 Oct 2021 14:16:31 +0000 (22:16 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Oct 2021 10:38:11 +0000 (11:38 +0100)
Currently the max tx size supported by the hw is calculated by
using the max BD num supported by the hw. According to the hw
user manual, the max tx size is fixed value for both non-TSO and
TSO skb.

This patch updates the max tx size according to the manual.

Fixes: 8ae10cfb5089("net: hns3: support tx-scatter-gather-fraglist feature")
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
drivers/net/ethernet/hisilicon/hns3/hns3_enet.h

index 468b8f07bf47c57463b6f4d3174df5a2e84484cb..ea89772e8952e1ad6bcaaad0c5e571649d09ca3f 100644 (file)
@@ -1847,7 +1847,6 @@ void hns3_shinfo_pack(struct skb_shared_info *shinfo, __u32 *size)
 
 static int hns3_skb_linearize(struct hns3_enet_ring *ring,
                              struct sk_buff *skb,
-                             u8 max_non_tso_bd_num,
                              unsigned int bd_num)
 {
        /* 'bd_num == UINT_MAX' means the skb' fraglist has a
@@ -1864,8 +1863,7 @@ static int hns3_skb_linearize(struct hns3_enet_ring *ring,
         * will not help.
         */
        if (skb->len > HNS3_MAX_TSO_SIZE ||
-           (!skb_is_gso(skb) && skb->len >
-            HNS3_MAX_NON_TSO_SIZE(max_non_tso_bd_num))) {
+           (!skb_is_gso(skb) && skb->len > HNS3_MAX_NON_TSO_SIZE)) {
                u64_stats_update_begin(&ring->syncp);
                ring->stats.hw_limitation++;
                u64_stats_update_end(&ring->syncp);
@@ -1900,8 +1898,7 @@ static int hns3_nic_maybe_stop_tx(struct hns3_enet_ring *ring,
                        goto out;
                }
 
-               if (hns3_skb_linearize(ring, skb, max_non_tso_bd_num,
-                                      bd_num))
+               if (hns3_skb_linearize(ring, skb, bd_num))
                        return -ENOMEM;
 
                bd_num = hns3_tx_bd_count(skb->len);
index 6162d9f88e373bb7a796e46a7de3ed4d7ec7dc3d..9d9be3665bb1f6de06516de114a2d47709758c90 100644 (file)
@@ -186,11 +186,9 @@ enum hns3_nic_state {
 
 #define HNS3_MAX_BD_SIZE                       65535
 #define HNS3_MAX_TSO_BD_NUM                    63U
-#define HNS3_MAX_TSO_SIZE \
-       (HNS3_MAX_BD_SIZE * HNS3_MAX_TSO_BD_NUM)
+#define HNS3_MAX_TSO_SIZE                      1048576U
+#define HNS3_MAX_NON_TSO_SIZE                  9728U
 
-#define HNS3_MAX_NON_TSO_SIZE(max_non_tso_bd_num) \
-       (HNS3_MAX_BD_SIZE * (max_non_tso_bd_num))
 
 #define HNS3_VECTOR_GL0_OFFSET                 0x100
 #define HNS3_VECTOR_GL1_OFFSET                 0x200