| From 887986bcd0bc449c133ff124c7179167cf4718a3 Mon Sep 17 00:00:00 2001 |
| From: Yunsheng Lin <linyunsheng@huawei.com> |
| Date: Wed, 15 Jan 2020 10:46:45 +0800 |
| Subject: [PATCH] net: hns3: pad the short frame before sending to the hardware |
| |
| commit 36c67349a1a1c88b9cf11d7ca7762ababdb38867 upstream. |
| |
| The hardware can not handle short frames below or equal to 32 |
| bytes according to the hardware user manual, and it will trigger |
| a RAS error when the frame's length is below 33 bytes. |
| |
| This patch pads the SKB when skb->len is below 33 bytes before |
| sending it to hardware. |
| |
| Fixes: 76ad4f0ee747 ("net: hns3: Add support of HNS3 Ethernet Driver for hip08 SoC") |
| Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com> |
| Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c |
| index 7f8a2d66f821..7a8595967ad2 100644 |
| --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c |
| +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c |
| @@ -44,6 +44,8 @@ MODULE_PARM_DESC(debug, " Network interface message level setting"); |
| #define DEFAULT_MSG_LEVEL (NETIF_MSG_PROBE | NETIF_MSG_LINK | \ |
| NETIF_MSG_IFDOWN | NETIF_MSG_IFUP) |
| |
| +#define HNS3_MIN_TX_LEN 33U |
| + |
| /* hns3_pci_tbl - PCI Device ID Table |
| * |
| * Last entry must be all 0s |
| @@ -1300,6 +1302,10 @@ netdev_tx_t hns3_nic_net_xmit(struct sk_buff *skb, struct net_device *netdev) |
| int ret; |
| int i; |
| |
| + /* Hardware can only handle short frames above 32 bytes */ |
| + if (skb_put_padto(skb, HNS3_MIN_TX_LEN)) |
| + return NETDEV_TX_OK; |
| + |
| /* Prefetch the data used later */ |
| prefetch(skb->data); |
| |
| -- |
| 2.7.4 |
| |