* [PATCH net 0/2] There are some bugfix for the HNS ethernet driver
@ 2023-12-01 10:27 Jijie Shao
2023-12-01 10:27 ` [PATCH net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao
2023-12-01 10:27 ` [PATCH net 2/2] net: hns: fix fake link up on xge port Jijie Shao
0 siblings, 2 replies; 6+ messages in thread
From: Jijie Shao @ 2023-12-01 10:27 UTC (permalink / raw)
To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni
Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev,
linux-kernel
There are some bugfix for the HNS ethernet driver
Yonglong Liu (2):
net: hns: fix wrong head when modify the tx feature when sending
packets
net: hns: fix fake link up on xge port
.../net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 28 ++++++++++
drivers/net/ethernet/hisilicon/hns/hns_enet.c | 53 +++++++++++--------
drivers/net/ethernet/hisilicon/hns/hns_enet.h | 3 +-
3 files changed, 61 insertions(+), 23 deletions(-)
--
2.30.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets 2023-12-01 10:27 [PATCH net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao @ 2023-12-01 10:27 ` Jijie Shao 2023-12-01 10:27 ` [PATCH net 2/2] net: hns: fix fake link up on xge port Jijie Shao 1 sibling, 0 replies; 6+ messages in thread From: Jijie Shao @ 2023-12-01 10:27 UTC (permalink / raw) To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel From: Yonglong Liu <liuyonglong@huawei.com> When modify the tx feature, the hns driver will modify the maybe_stop_tx() and fill_desc() functions, if the modify happens during packet sending, will cause the hardware and software pointers do not match, and the port can not work anymore. This patch deletes the maybe_stop_tx() and fill_desc() functions modification when setting tx feature, and use the skb_is_gro() to determine use tso functions or non-tso functions when packets sending. Fixes: 38f616da1c28 ("net:hns: Add support of ethtool TSO set option for Hip06 in HNS") Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: Jijie Shao <shaojijie@huawei.com> --- drivers/net/ethernet/hisilicon/hns/hns_enet.c | 53 +++++++++++-------- drivers/net/ethernet/hisilicon/hns/hns_enet.h | 3 +- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c index 0900abf5c508..8a713eed4465 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c @@ -142,7 +142,8 @@ MODULE_DEVICE_TABLE(acpi, hns_enet_acpi_match); static void fill_desc(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, - int buf_num, enum hns_desc_type type, int mtu) + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso) { struct hnae_desc *desc = &ring->desc[ring->next_to_use]; struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use]; @@ -275,6 +276,15 @@ static int hns_nic_maybe_stop_tso( return 0; } +static int hns_nic_maybe_stop_tx_v2(struct sk_buff **out_skb, int *bnum, + struct hnae_ring *ring) +{ + if (skb_is_gso(*out_skb)) + return hns_nic_maybe_stop_tso(out_skb, bnum, ring); + else + return hns_nic_maybe_stop_tx(out_skb, bnum, ring); +} + static void fill_tso_desc(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, int buf_num, enum hns_desc_type type, int mtu) @@ -300,6 +310,19 @@ static void fill_tso_desc(struct hnae_ring *ring, void *priv, mtu); } +static void fill_desc_v2(struct hnae_ring *ring, void *priv, + int size, dma_addr_t dma, int frag_end, + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso) +{ + if (is_gso) + fill_tso_desc(ring, priv, size, dma, frag_end, buf_num, type, + mtu); + else + fill_v2_desc(ring, priv, size, dma, frag_end, buf_num, type, + mtu); +} + netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, struct sk_buff *skb, struct hns_nic_ring_data *ring_data) @@ -313,6 +336,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, int seg_num; dma_addr_t dma; int size, next_to_use; + bool is_gso; int i; switch (priv->ops.maybe_stop_tx(&skb, &buf_num, ring)) { @@ -339,8 +363,9 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, ring->stats.sw_err_cnt++; goto out_err_tx_ok; } + is_gso = skb_is_gso(skb); priv->ops.fill_desc(ring, skb, size, dma, seg_num == 1 ? 1 : 0, - buf_num, DESC_TYPE_SKB, ndev->mtu); + buf_num, DESC_TYPE_SKB, ndev->mtu, is_gso); /* fill the fragments */ for (i = 1; i < seg_num; i++) { @@ -354,7 +379,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, } priv->ops.fill_desc(ring, skb_frag_page(frag), size, dma, seg_num - 1 == i ? 1 : 0, buf_num, - DESC_TYPE_PAGE, ndev->mtu); + DESC_TYPE_PAGE, ndev->mtu, is_gso); } /*complete translate all packets*/ @@ -1776,15 +1801,6 @@ static int hns_nic_set_features(struct net_device *netdev, netdev_info(netdev, "enet v1 do not support tso!\n"); break; default: - if (features & (NETIF_F_TSO | NETIF_F_TSO6)) { - priv->ops.fill_desc = fill_tso_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; - /* The chip only support 7*4096 */ - netif_set_tso_max_size(netdev, 7 * 4096); - } else { - priv->ops.fill_desc = fill_v2_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; - } break; } netdev->features = features; @@ -2159,16 +2175,9 @@ static void hns_nic_set_priv_ops(struct net_device *netdev) priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; } else { priv->ops.get_rxd_bnum = get_v2rx_desc_bnum; - if ((netdev->features & NETIF_F_TSO) || - (netdev->features & NETIF_F_TSO6)) { - priv->ops.fill_desc = fill_tso_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; - /* This chip only support 7*4096 */ - netif_set_tso_max_size(netdev, 7 * 4096); - } else { - priv->ops.fill_desc = fill_v2_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; - } + priv->ops.fill_desc = fill_desc_v2; + priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx_v2; + netif_set_tso_max_size(netdev, 7 * 4096); /* enable tso when init * control tso on/off through TSE bit in bd */ diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.h b/drivers/net/ethernet/hisilicon/hns/hns_enet.h index ffa9d6573f54..3f3ee032f631 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.h +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.h @@ -44,7 +44,8 @@ struct hns_nic_ring_data { struct hns_nic_ops { void (*fill_desc)(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, - int buf_num, enum hns_desc_type type, int mtu); + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso); int (*maybe_stop_tx)(struct sk_buff **out_skb, int *bnum, struct hnae_ring *ring); void (*get_rxd_bnum)(u32 bnum_flag, int *out_bnum); -- 2.30.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net 2/2] net: hns: fix fake link up on xge port 2023-12-01 10:27 [PATCH net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao 2023-12-01 10:27 ` [PATCH net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao @ 2023-12-01 10:27 ` Jijie Shao 2023-12-02 5:19 ` Jakub Kicinski 2023-12-06 1:21 ` kernel test robot 1 sibling, 2 replies; 6+ messages in thread From: Jijie Shao @ 2023-12-01 10:27 UTC (permalink / raw) To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel From: Yonglong Liu <liuyonglong@huawei.com> If a xge port just connect with an optical module and no fiber, it may have a fake link up because there may be interference on the hardware. This patch adds an anti-shake to avoid the problem. And the time of anti-shake is base on tests. Fixes: b917078c1c10 ("net: hns: Add ACPI support to check SFP present") Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: Jijie Shao <shaojijie@huawei.com> --- .../net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c index 928d934cb21a..3d923756e439 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c @@ -66,6 +66,26 @@ static enum mac_mode hns_get_enet_interface(const struct hns_mac_cb *mac_cb) } } +void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) +{ +#define HNS_MAC_LINK_WAIT_TIME 5 +#define HNS_MAC_LINK_WAIT_CNT 40 + + int i; + + if (!mac_ctrl_drv->get_link_status) { + *link_status = 0; + return; + } + + for (i = 0; i < HNS_MAC_LINK_WAIT_CNT; i++) { + msleep(HNS_MAC_LINK_WAIT_TIME); + mac_ctrl_drv->get_link_status(mac_ctrl_drv, link_status); + if (!*link_status) + break; + } +} + void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) { struct mac_driver *mac_ctrl_drv; @@ -83,6 +103,14 @@ void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) &sfp_prsnt); if (!ret) *link_status = *link_status && sfp_prsnt; + + /* for FIBER port, it may have a fake link up. + * when the link status changes from down to up, we need to do + * anti-shake. the anti-shake time is base on tests. + * only FIBER port need to do this. + */ + if (*link_status && !mac_cb->link) + hns_mac_link_anti_shake(mac_ctrl_drv, link_status); } mac_cb->link = *link_status; -- 2.30.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net 2/2] net: hns: fix fake link up on xge port 2023-12-01 10:27 ` [PATCH net 2/2] net: hns: fix fake link up on xge port Jijie Shao @ 2023-12-02 5:19 ` Jakub Kicinski 2023-12-04 1:20 ` Jijie Shao 2023-12-06 1:21 ` kernel test robot 1 sibling, 1 reply; 6+ messages in thread From: Jakub Kicinski @ 2023-12-02 5:19 UTC (permalink / raw) To: Jijie Shao Cc: yisen.zhuang, salil.mehta, davem, edumazet, pabeni, shenjian15, wangjie125, liuyonglong, netdev, linux-kernel On Fri, 1 Dec 2023 18:27:03 +0800 Jijie Shao wrote: > +void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c:69:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 69 | void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) | ^ | static -- pw-bot: cr ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net 2/2] net: hns: fix fake link up on xge port 2023-12-02 5:19 ` Jakub Kicinski @ 2023-12-04 1:20 ` Jijie Shao 0 siblings, 0 replies; 6+ messages in thread From: Jijie Shao @ 2023-12-04 1:20 UTC (permalink / raw) To: Jakub Kicinski Cc: shaojijie, yisen.zhuang, salil.mehta, davem, edumazet, pabeni, shenjian15, wangjie125, liuyonglong, netdev, linux-kernel on 2023/12/2 13:19, Jakub Kicinski wrote: > On Fri, 1 Dec 2023 18:27:03 +0800 Jijie Shao wrote: >> +void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) > drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c:69:1: note: declare 'static' if the function is not intended to be used outside of this translation unit > 69 | void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) > | ^ > | static Thanks, v2 patch is sent to fix it. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net 2/2] net: hns: fix fake link up on xge port 2023-12-01 10:27 ` [PATCH net 2/2] net: hns: fix fake link up on xge port Jijie Shao 2023-12-02 5:19 ` Jakub Kicinski @ 2023-12-06 1:21 ` kernel test robot 1 sibling, 0 replies; 6+ messages in thread From: kernel test robot @ 2023-12-06 1:21 UTC (permalink / raw) To: Jijie Shao, yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: llvm, oe-kbuild-all, shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel Hi Jijie, kernel test robot noticed the following build warnings: [auto build test WARNING on net/main] url: https://github.com/intel-lab-lkp/linux/commits/Jijie-Shao/net-hns-fix-wrong-head-when-modify-the-tx-feature-when-sending-packets/20231201-183325 base: net/main patch link: https://lore.kernel.org/r/20231201102703.4134592-3-shaojijie%40huawei.com patch subject: [PATCH net 2/2] net: hns: fix fake link up on xge port config: i386-buildonly-randconfig-001-20231202 (https://download.01.org/0day-ci/archive/20231206/202312060909.F00QN1zB-lkp@intel.com/config) compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231206/202312060909.F00QN1zB-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312060909.F00QN1zB-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c:69:6: warning: no previous prototype for function 'hns_mac_link_anti_shake' [-Wmissing-prototypes] void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) ^ drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c:69:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) ^ static 1 warning generated. vim +/hns_mac_link_anti_shake +69 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c 68 > 69 void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, u32 *link_status) 70 { 71 #define HNS_MAC_LINK_WAIT_TIME 5 72 #define HNS_MAC_LINK_WAIT_CNT 40 73 74 int i; 75 76 if (!mac_ctrl_drv->get_link_status) { 77 *link_status = 0; 78 return; 79 } 80 81 for (i = 0; i < HNS_MAC_LINK_WAIT_CNT; i++) { 82 msleep(HNS_MAC_LINK_WAIT_TIME); 83 mac_ctrl_drv->get_link_status(mac_ctrl_drv, link_status); 84 if (!*link_status) 85 break; 86 } 87 } 88 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-12-06 1:22 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-01 10:27 [PATCH net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao 2023-12-01 10:27 ` [PATCH net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao 2023-12-01 10:27 ` [PATCH net 2/2] net: hns: fix fake link up on xge port Jijie Shao 2023-12-02 5:19 ` Jakub Kicinski 2023-12-04 1:20 ` Jijie Shao 2023-12-06 1:21 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).