diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h index 79bc5d531ce3fbebb0768fa1fc89127615a7d87a..068e42bbd797432da1c7fab2f8fcd8d665db9f8c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h @@ -387,6 +387,7 @@ enum hnae3_dbg_cmd { HNAE3_DBG_CMD_GUID_SPEC, HNAE3_DBG_CMD_IP_LIST, HNAE3_DBG_CMD_GUID_LIST, + HNAE3_DBG_CMD_FASTPATH_INFO, HNAE3_DBG_CMD_UNKNOWN, }; @@ -867,6 +868,7 @@ struct hnae3_ae_ops { enum hnae3_unic_addr_type addr_type); int (*get_func_guid)(struct hnae3_handle *handle, u8 *guid); void (*set_func_guid)(struct hnae3_handle *handle, u8 *guid); + int (*set_fastpath)(struct hnae3_ae_dev *ae_dev, bool fastpath_en); }; struct hnae3_dcb_ops { diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h index c5e67a422160efda954ffdf6f01e21344f5ccab4..e9bb4d4e9aafb1eefcb1a070bc9192ebbde72912 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_cmd.h @@ -317,6 +317,7 @@ enum hclge_opcode_type { /* UB commands */ HCLGE_OPC_COMM_GET_FUNC_GUID = 0xA001, + HCLGE_OPC_COMM_CFG_FASTPATH = 0xA003, HCLGE_OPC_ADD_IP_TBL = 0xA100, HCLGE_OPC_DEL_IP_TBL = 0xA101, HCLGE_OPC_COMM_CFG_FUNC_GUID = 0xA122, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index 756ec8c26c72c2dc77459543eefe96cfa131926f..f5df9515034b03fbaac6cd977dd6d89787013f37 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -1782,16 +1782,7 @@ static bool hns3_check_hw_tx_csum(struct sk_buff *skb) return true; } -struct hns3_desc_param { - u32 paylen_fdop_ol4cs; - u32 ol_type_vlan_len_msec; - u32 type_cs_vlan_tso; - u16 mss_hw_csum; - u16 inner_vtag; - u16 out_vtag; -}; - -static void hns3_init_desc_data(struct sk_buff *skb, struct hns3_desc_param *pa) +void hns3_init_desc_data(struct sk_buff *skb, struct hns3_desc_param *pa) { pa->paylen_fdop_ol4cs = skb->len; pa->ol_type_vlan_len_msec = 0; @@ -1918,10 +1909,6 @@ static int hns3_fill_skb_desc(struct hns3_nic_priv *priv, } /* Set txbd */ -#ifdef CONFIG_HNS3_UBL - if (hns3_ubl_supported(priv->ae_handle)) - hns3_unic_set_l3_type(skb, ¶m.type_cs_vlan_tso); -#endif desc->tx.ol_type_vlan_len_msec = cpu_to_le32(param.ol_type_vlan_len_msec); desc->tx.type_cs_vlan_tso_len = cpu_to_le32(param.type_cs_vlan_tso); @@ -2534,8 +2521,19 @@ static int hns3_handle_skb_desc(struct hns3_nic_priv *priv, { int ret; +#ifdef CONFIG_HNS3_UBL + if (hns3_ubl_supported(priv->ae_handle)) + ret = hns3_unic_fill_skb_desc(priv, ring, skb, + &ring->desc[ring->next_to_use], + desc_cb); + else + ret = hns3_fill_skb_desc(priv, ring, skb, + &ring->desc[ring->next_to_use], + desc_cb); +#else ret = hns3_fill_skb_desc(priv, ring, skb, &ring->desc[ring->next_to_use], desc_cb); +#endif if (unlikely(ret < 0)) goto fill_err; @@ -2585,7 +2583,7 @@ netdev_tx_t hns3_nic_net_xmit(struct sk_buff *skb, struct net_device *netdev) } #ifdef CONFIG_HNS3_UBL if (hns3_ubl_supported(hns3_get_handle(netdev))) { - if (!ubl_rmv_sw_ctype(skb)) + if (unlikely(!ubl_rmv_sw_ctype(skb))) goto out_err_tx_ok; hns3_unic_set_default_cc(skb); @@ -3456,6 +3454,23 @@ static void hns3_remove(struct pci_dev *pdev) pci_set_drvdata(pdev, NULL); } +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) +static int hns3_fastpath_configure(struct pci_dev *pdev, bool fastpath_en) +{ + struct hnae3_ae_dev *ae_dev = pci_get_drvdata(pdev); + int ret; + + if (!hnae3_dev_udma_supported(ae_dev) || !ae_dev->ops->set_fastpath) + return 0; + + rtnl_lock(); + ret = ae_dev->ops->set_fastpath(ae_dev, fastpath_en); + rtnl_unlock(); + + return ret; +} +#endif + /** * hns3_pci_sriov_configure * @pdev: pointer to a pci_dev structure @@ -3466,6 +3481,7 @@ static void hns3_remove(struct pci_dev *pdev) **/ static int hns3_pci_sriov_configure(struct pci_dev *pdev, int num_vfs) { + int num_vfs_pre; int ret; if (!(hns3_is_phys_func(pdev) && IS_ENABLED(CONFIG_PCI_IOV))) { @@ -3475,12 +3491,26 @@ static int hns3_pci_sriov_configure(struct pci_dev *pdev, int num_vfs) if (num_vfs) { ret = pci_enable_sriov(pdev, num_vfs); - if (ret) + if (ret) { dev_err(&pdev->dev, "SRIOV enable failed %d\n", ret); - else - return num_vfs; + return 0; + } + +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + ret = hns3_fastpath_configure(pdev, false); + if (ret) { + pci_disable_sriov(pdev); + return 0; + } +#endif + + return num_vfs; } else if (!pci_vfs_assigned(pdev)) { - int num_vfs_pre = pci_num_vf(pdev); +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + (void)hns3_fastpath_configure(pdev, true); +#endif + + num_vfs_pre = pci_num_vf(pdev); pci_disable_sriov(pdev); hns3_clean_vf_config(pdev, num_vfs_pre); @@ -4387,7 +4417,7 @@ static int hns3_alloc_skb(struct hns3_enet_ring *ring, unsigned int length, hns3_ring_stats_update(ring, seg_pkt_cnt); #ifdef CONFIG_HNS3_UBL if (hns3_ubl_supported(hns3_get_handle(netdev))) - ring->pull_len = HNS3_RX_HEAD_SIZE; + ring->pull_len = HNS3_UNIC_RX_HEAD_SIZE; else ring->pull_len = eth_get_headlen(netdev, va, HNS3_RX_HEAD_SIZE); #else @@ -5660,7 +5690,7 @@ static int hns3_client_init(struct hnae3_handle *handle) &max_rss_size); #ifdef CONFIG_HNS3_UBL if (hns3_ubl_supported(handle)) - netdev = alloc_ubndev_mq(sizeof(struct hns3_nic_priv), alloc_tqps); + netdev = alloc_ubldev_mq(sizeof(struct hns3_nic_priv), alloc_tqps); else netdev = alloc_etherdev_mq(sizeof(struct hns3_nic_priv), alloc_tqps); #else diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h index c0237202feae7be7b48f018219113a7bd7918518..78c6f25dd99cca4ece63a00f3e93ba5052e9e65f 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h @@ -693,6 +693,15 @@ struct hns3_reset_type_map { enum hnae3_reset_type rst_type; }; +struct hns3_desc_param { + u32 paylen_fdop_ol4cs; + u32 ol_type_vlan_len_msec; + u32 type_cs_vlan_tso; + u16 mss_hw_csum; + u16 inner_vtag; + u16 out_vtag; +}; + static inline int ring_space(struct hns3_enet_ring *ring) { /* This smp_load_acquire() pairs with smp_store_release() in @@ -834,4 +843,5 @@ void hns3_cq_period_mode_init(struct hns3_nic_priv *priv, void hns3_external_lb_prepare(struct net_device *ndev, bool if_running); void hns3_external_lb_restore(struct net_device *ndev, bool if_running); bool hns3_is_page_pool_enabled(void); +void hns3_init_desc_data(struct sk_buff *skb, struct hns3_desc_param *pa); #endif diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_unic.c b/drivers/net/ethernet/hisilicon/hns3/hns3_unic.c index 7e904c23c8b7d65519631c643c1780b9937ff9c5..df328a50ed3fcec1d370b543be43f49c1dd54e5e 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_unic.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_unic.c @@ -63,7 +63,7 @@ int hns3_unic_init(struct net_device *netdev) * to actively inform the chip of the message type, which is unrelated * to checksum offloading. */ -void hns3_unic_set_l3_type(struct sk_buff *skb, u32 *type_cs_vlan_tso) +static void hns3_unic_set_l3_type(struct sk_buff *skb, u32 *type_cs_vlan_tso) { if (skb->protocol == htons(ETH_P_IP)) hnae3_set_field(*type_cs_vlan_tso, HNS3_TXD_L3T_M, @@ -79,7 +79,6 @@ u8 hns3_unic_get_l3_type(struct net_device *netdev, u32 ol_info, u32 l234info) u32 l3_type; l3_type = hns3_get_l3_type(priv, l234info, ol_info); - if (l3_type == HNS3_L3_TYPE_IPV4) return UB_IPV4_CFG_TYPE; else if (l3_type == HNS3_L3_TYPE_IPV6) @@ -209,6 +208,8 @@ void hns3_unic_lp_setup_skb(struct sk_buff *skb) void hns3_unic_lb_check_skb_data(struct hns3_enet_ring *ring, struct sk_buff *skb) { +#define HNS3_UNIC_DUMP_ROW_SIZE 16 + unsigned int nip_ctrl_len = sizeof(struct ub_nip_ctrl_fld); struct hns3_enet_tqp_vector *tqp_vector = ring->tqp_vector; struct net_device *ndev = skb->dev; @@ -238,8 +239,8 @@ void hns3_unic_lb_check_skb_data(struct hns3_enet_ring *ring, if (is_success) tqp_vector->rx_group.total_packets++; else - print_hex_dump(KERN_ERR, "ubn selftest:", DUMP_PREFIX_OFFSET, - 16, 1, skb->data, len, true); + print_hex_dump(KERN_ERR, "ubl selftest:", DUMP_PREFIX_OFFSET, + HNS3_UNIC_DUMP_ROW_SIZE, 1, skb->data, len, true); dev_kfree_skb_any(skb); } @@ -358,3 +359,19 @@ int hns3_unic_init_guid(struct net_device *netdev) return 0; } + +int hns3_unic_fill_skb_desc(struct hns3_nic_priv *priv, + struct hns3_enet_ring *ring, + struct sk_buff *skb, struct hns3_desc *desc, + struct hns3_desc_cb *desc_cb) +{ + struct hns3_desc_param param; + + desc_cb->send_bytes = skb->len; + + hns3_init_desc_data(skb, ¶m); + hns3_unic_set_l3_type(skb, ¶m.type_cs_vlan_tso); + desc->tx.type_cs_vlan_tso_len = cpu_to_le32(param.type_cs_vlan_tso); + + return 0; +} diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_unic.h b/drivers/net/ethernet/hisilicon/hns3/hns3_unic.h index 028405e39da940fc2a470134e19ea9c5ae2db671..8245f887f67c1f5545d4bd90ce601103f7db0b9f 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_unic.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_unic.h @@ -19,6 +19,7 @@ #include "ubl.h" #define UNIC_CC_DEFAULT_FECN_MODE 0x4000 +#define HNS3_UNIC_RX_HEAD_SIZE 128 struct ub_nip_ctrl_fld { __be16 proto; @@ -52,7 +53,6 @@ static inline void hns3_unic_format_sim_guid_addr(char *format_simple_guid_addr, void hns3_unic_set_default_cc(struct sk_buff *skb); int hns3_unic_init(struct net_device *netdev); -void hns3_unic_set_l3_type(struct sk_buff *skb, u32 *type_cs_vlan_tso); u8 hns3_unic_get_l3_type(struct net_device *netdev, u32 ol_info, u32 l234info); void hns3_unic_lp_setup_skb(struct sk_buff *skb); void hns3_unic_lb_check_skb_data(struct hns3_enet_ring *ring, @@ -61,5 +61,9 @@ void register_ipaddr_notifier(void); void unregister_ipaddr_notifier(void); void hns3_unic_set_rx_mode(struct net_device *netdev); int hns3_unic_init_guid(struct net_device *netdev); +int hns3_unic_fill_skb_desc(struct hns3_nic_priv *priv, + struct hns3_enet_ring *ring, + struct sk_buff *skb, struct hns3_desc *desc, + struct hns3_desc_cb *desc_cb); #endif diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.c index 1d68fd31636e1e79ed59bcdf6c3e1ac448fb661d..2b2727c6b0b0837836834e5a7aa5b69ed8fc1d70 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.c @@ -30,6 +30,9 @@ static struct hns3_dbg_dentry_info ub_dbg_dentry[] = { { .name = "guid_tbl" }, + { + .name = "fastpath_info" + }, }; static int hns3_unic_dbg_file_init(struct hnae3_handle *handle, u32 cmd); @@ -63,6 +66,13 @@ static const struct hns3_dbg_cmd_info ub_dbg_cmd[] = { .buf_len = HNS3_DBG_READ_LEN, .init = hns3_unic_dbg_file_init, }, + { + .name = "fastpath_info", + .cmd = HNAE3_DBG_CMD_FASTPATH_INFO, + .dentry = UB_DBG_DENTRY_FASTPATH, + .buf_len = HNS3_DBG_READ_LEN, + .init = hns3_unic_dbg_file_init, + }, }; static int hns3_unic_dbg_get_cmd_index(struct hns3_dbg_data *dbg_data, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.h b/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.h index 2e1e2a2138ec373b8101c7efb25220b10f92b3ce..dfac780d827afc8029184e435303eb3ce785595a 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_unic_debugfs.h @@ -19,6 +19,7 @@ enum hns3_dbg_ub_dentry_type { UB_DBG_DENTRY_IP, UB_DBG_DENTRY_GUID, + UB_DBG_DENTRY_FASTPATH, UB_DBG_DENTRY_END, }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index c22fbf37f5b2fe8e0987aa42f362d70880efcccb..7e5736e8af20b5c89bd892d12bd1d0f1ca09ee10 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h @@ -933,6 +933,15 @@ struct hclge_query_wol_supported_cmd { u8 rsv[20]; }; +struct hclge_config_fastpath_cmd { + u8 fastpath_en; + u8 rsv0[3]; + __le32 ssu_cfg_status; + __le32 igu_cfg_status; + __le32 ppp_cfg_status; + u8 rsv1[8]; +}; + struct hclge_hw; int hclge_cmd_send(struct hclge_hw *hw, struct hclge_desc *desc, int num); enum hclge_comm_cmd_status hclge_cmd_mdio_write(struct hclge_hw *hw, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c index e293d1b941fbf16487666313e1dc82b0e3673cad..3c8e8bfc0b5c369f5aece4eac2e237220c7c1562 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c @@ -2725,6 +2725,37 @@ static int hclge_dbg_dump_guid_list(struct hclge_dev *hdev, char *buf, int len) return 0; } +static int hclge_dbg_dump_fastpath_info(struct hclge_dev *hdev, char *buf, + int len) +{ + struct hclge_config_fastpath_cmd *fp_info; + struct hclge_desc desc; + int pos = 0; + int ret; + + hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMM_CFG_FASTPATH, true); + + ret = hclge_cmd_send(&hdev->hw, &desc, 1); + if (ret) { + dev_err(&hdev->pdev->dev, + "failed to dump fastpath_info, ret = %d\n", ret); + return ret; + } + + fp_info = (struct hclge_config_fastpath_cmd *)desc.data; + + pos += scnprintf(buf + pos, len - pos, "fastpath_en: %u\n", + fp_info->fastpath_en); + pos += scnprintf(buf + pos, len - pos, "ssu_cfg_status: 0x%x\n", + le32_to_cpu(fp_info->ssu_cfg_status)); + pos += scnprintf(buf + pos, len - pos, "igu_cfg_status: 0x%x\n", + le32_to_cpu(fp_info->igu_cfg_status)); + pos += scnprintf(buf + pos, len - pos, "ppp_cfg_status: 0x%x\n", + le32_to_cpu(fp_info->ppp_cfg_status)); + + return 0; +} + static const struct hclge_dbg_func hclge_dbg_cmd_func[] = { { .cmd = HNAE3_DBG_CMD_TM_NODES, @@ -2894,6 +2925,10 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = { .cmd = HNAE3_DBG_CMD_GUID_LIST, .dbg_dump = hclge_dbg_dump_guid_list, }, + { + .cmd = HNAE3_DBG_CMD_FASTPATH_INFO, + .dbg_dump = hclge_dbg_dump_fastpath_info, + }, }; int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index b21ac29106cbc767ab312590e22685402fc6a8a4..db0a7def6b0befec0f315facb5639d395e0c5d0c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -12422,6 +12422,56 @@ static int hclge_set_wol(struct hnae3_handle *handle, return ret; } +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) +static int hclge_set_fastpath_cmd(struct hnae3_ae_dev *ae_dev, bool fastpath_en) +{ + struct hclge_dev *hdev = ae_dev->priv; + struct hclge_config_fastpath_cmd *req; + struct hclge_desc desc; + + if (!hnae3_dev_udma_supported(ae_dev)) + return 0; + + hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_COMM_CFG_FASTPATH, false); + req = (struct hclge_config_fastpath_cmd *)desc.data; + req->fastpath_en = fastpath_en; + + return hclge_cmd_send(&hdev->hw, &desc, 1); +} + +static int hclge_set_fastpath(struct hnae3_ae_dev *ae_dev, bool fastpath_en) +{ + struct hclge_dev *hdev = ae_dev->priv; + int last_bad_ret = 0; + int ret; + + ret = hclge_notify_client(hdev, HNAE3_DOWN_CLIENT); + if (ret) + return ret; + + ret = hclge_tm_flush_cfg(hdev, true); + if (ret) + return ret; + + ret = hclge_set_fastpath_cmd(ae_dev, fastpath_en); + if (ret) { + dev_err(&hdev->pdev->dev, + "failed to set fastpath, ret = %d\n", ret); + last_bad_ret = ret; + } + + ret = hclge_tm_flush_cfg(hdev, false); + if (ret) + last_bad_ret = ret; + + ret = hclge_notify_client(hdev, HNAE3_UP_CLIENT); + if (ret) + last_bad_ret = ret; + + return last_bad_ret; +} +#endif + static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) { struct pci_dev *pdev = ae_dev->pdev; @@ -12605,6 +12655,14 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) if (ret) goto err_sysfs_unregister; +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + ret = hclge_set_fastpath_cmd(ae_dev, true); + if (ret) { + dev_err(&pdev->dev, "failed to init fastpath, ret = %d\n", ret); + goto err_sysfs_unregister; + } +#endif + INIT_KFIFO(hdev->mac_tnl_log); hclge_dcb_ops_set(hdev); @@ -13036,6 +13094,15 @@ static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev) dev_warn(&pdev->dev, "failed to update wol config, ret = %d\n", ret); +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + ret = hclge_set_fastpath_cmd(ae_dev, pci_num_vf(pdev) ? false : true); + if (ret) { + dev_err(&pdev->dev, "failed to reset fastpath, ret = %d\n", + ret); + return ret; + } +#endif + dev_info(&pdev->dev, "Reset done, %s driver initialization finished.\n", HCLGE_DRIVER_NAME); @@ -13047,6 +13114,10 @@ static void hclge_uninit_ae_dev(struct hnae3_ae_dev *ae_dev) struct hclge_dev *hdev = ae_dev->priv; struct hclge_mac *mac = &hdev->hw.mac; +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + (void)hclge_set_fastpath_cmd(ae_dev, false); +#endif + hclge_unregister_sysfs(hdev); hclge_reset_vf_rate(hdev); hclge_clear_vf_vlan(hdev); @@ -13642,6 +13713,9 @@ struct hnae3_ae_ops hclge_ops = { .get_func_guid = hclge_unic_get_func_guid, .set_func_guid = hclge_unic_set_func_guid, #endif +#if IS_ENABLED(CONFIG_UB_UDMA_HNS3) + .set_fastpath = hclge_set_fastpath, +#endif }; static struct hnae3_ae_algo ae_algo = { diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c index b3c11cfcddd11049886fb0a849a7e67f3615835e..132b6446d48597598055dfbc0805b4994cb5d5fc 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c @@ -1697,7 +1697,7 @@ int hclge_tm_set_tc_rate_limit(struct hclge_dev *hdev, int ret; int i; - for (i = 0; i < tc_info->num_tc; i++) { + for (i = 0; i < hdev->tc_max; i++) { /* mac speed unit is Mbps, tc max_rate is Bps */ speed = hclge_tm_rate_2_port_rate(tc_info->max_rate[i]); if (!speed) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_udma.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_udma.c index f4ca53136b69c8ff6c9231afe74ca058f1cc3828..a3bbb6dd17d5739dc3db8005ec6e8bd09aa9d2a2 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_udma.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_udma.c @@ -28,11 +28,10 @@ static int hclge_init_udma_base_info(struct hclge_vport *vport) struct hnae3_handle *nic = &vport->nic; struct hclge_dev *hdev = vport->back; - udma->udmainfo.num_vectors = vport->back->num_udma_msi; - if (hdev->num_msi < hdev->num_nic_msi + hdev->num_udma_msi) return -EINVAL; + udma->udmainfo.num_vectors = hdev->num_udma_msi; udma->udmainfo.base_vector = hdev->num_nic_msi; udma->udmainfo.netdev = nic->kinfo.netdev; @@ -72,7 +71,7 @@ int hclge_init_udma_client_instance(struct hnae3_ae_dev *ae_dev, { struct hclge_dev *hdev = ae_dev->priv; struct hnae3_client *client; - int rst_cnt; + u32 rst_cnt; int ret; if (!hnae3_dev_udma_supported(ae_dev) || !hdev->udma_client || diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_guid.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_guid.c index 376c5dc1de747f884328dd2281881b08c9676a74..efb760f0c209ff7ac2e9189ff2f0fa760987e73c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_guid.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_guid.c @@ -48,7 +48,6 @@ int hclge_unic_update_guid_list(struct hclge_vport *vport, ret = hclge_comm_unic_update_addr_list(&vport->mc_guid_list, &vport->mguid_list_lock, state, addr); - if (ret == -ENOENT) { hclge_comm_format_guid_addr(format_guid_addr, addr); dev_err(&hdev->pdev->dev, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.c index 9028fc080aa0db219428f0b7c983d1da491301a2..39b2a6a07d853309dff4508a057f4702d664b2df 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.c @@ -41,7 +41,7 @@ static int hclge_unic_get_ip_tbl_cmd_status(struct hclge_vport *vport, } if (op == HCLGE_IP_TBL_ADD) { - if (!resp_code || resp_code == 1) + if (!resp_code || resp_code == HCLGE_UNIC_IP_TBL_MISS) return 0; else if (resp_code == HCLGE_ADD_IP_TBL_OVERFLOW) return -ENOSPC; @@ -53,7 +53,7 @@ static int hclge_unic_get_ip_tbl_cmd_status(struct hclge_vport *vport, } else if (op == HCLGE_IP_TBL_REMOVE) { if (!resp_code) { return 0; - } else if (resp_code == 1) { + } else if (resp_code == HCLGE_UNIC_IP_TBL_MISS) { dev_dbg(&hdev->pdev->dev, "remove ip addr failed for miss.\n"); return -ENOENT; @@ -66,7 +66,7 @@ static int hclge_unic_get_ip_tbl_cmd_status(struct hclge_vport *vport, } else if (op == HCLGE_IP_TBL_LKUP) { if (!resp_code) { return 0; - } else if (resp_code == 1) { + } else if (resp_code == HCLGE_UNIC_IP_TBL_MISS) { dev_dbg(&hdev->pdev->dev, "lookup ip addr failed for miss.\n"); return -ENOENT; @@ -251,7 +251,6 @@ int hclge_unic_update_ip_list(struct hclge_vport *vport, &vport->ip_list_lock, state, (const unsigned char *)&ip_addr); - if (ret == -ENOENT) dev_err(&hdev->pdev->dev, "failed to delete ip %pI6c from ip list\n", @@ -383,7 +382,6 @@ static void hclge_unic_sync_vport_ip_table(struct hclge_vport *vport) &vport->ip_list, &vport->ip_list_lock, sync, unsync); - if (all_added) vport->overflow_promisc_flags &= ~HNAE3_OVERFLOW_MPE; else diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.h index f5f6339b7db2e5a5c38628116c576718ef3f68d2..5c0cd5af9fb4a09ede91b33ab3d376c276ceb088 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_unic_ip.h @@ -22,6 +22,7 @@ struct hclge_dev; #define HCLGE_UNIC_IP_ADDR_NOTSET 255 +#define HCLGE_UNIC_IP_TBL_MISS 1 int hclge_unic_init_iptbl_info(struct hclge_dev *hdev); void hclge_unic_reset_iptbl_space(struct hclge_dev *hdev); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_udma.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_udma.c index 6e839a54040eb36e1853d4a4df1874803d520bb4..eb0164ba2855b8c44da93512ad96d991a18f7200 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_udma.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_udma.c @@ -41,12 +41,11 @@ static int hclgevf_init_udma_base_info(struct hclgevf_dev *hdev) struct hnae3_handle *udma = &hdev->udma; struct hnae3_handle *nic = &hdev->nic; - udma->udmainfo.num_vectors = hdev->num_udma_msix; - if (hdev->num_msi_left < udma->udmainfo.num_vectors || hdev->num_msi_left == 0) return -EINVAL; + udma->udmainfo.num_vectors = hdev->num_udma_msix; udma->udmainfo.base_vector = hdev->roce_base_msix_offset; udma->udmainfo.netdev = nic->kinfo.netdev; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_guid.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_guid.c index 8762690c5ac73644826e2360ca58c3bcab69eaa5..f4632495c48f0ed27b347c4b541558765e23e74a 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_guid.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_guid.c @@ -21,7 +21,6 @@ int hclgevf_unic_update_guid_list(struct hnae3_handle *handle, ret = hclge_comm_unic_update_addr_list(&hdev->mc_guid_list, &hdev->mguid_list_lock, state, addr); - if (ret == -ENOENT) { hclge_comm_format_guid_addr(format_guid_addr, addr); dev_err(&hdev->pdev->dev, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_ip.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_ip.c index 08ee7fc154a123aaa3e537ca87ad3235ced8ba19..79131ca418a59d7dc20c8bf046d52662797101ac 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_ip.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_unic_ip.c @@ -35,7 +35,6 @@ int hclgevf_unic_update_ip_list(struct hnae3_handle *handle, &hdev->ip_table.ip_list_lock, state, (const unsigned char *)&ip_addr); - if (ret == -ENOENT) dev_err(&hdev->pdev->dev, "failed to delete ip %pI6c from ip list\n", diff --git a/drivers/net/ub/dev/ubl.c b/drivers/net/ub/dev/ubl.c index d94fcd1dab16d65e21c474ec7092906e7c50deba..b49a6b0e30b8469c2d118fae48d7fe0c4aee96fd 100644 --- a/drivers/net/ub/dev/ubl.c +++ b/drivers/net/ub/dev/ubl.c @@ -145,13 +145,13 @@ void ubl_setup(struct net_device *dev) EXPORT_SYMBOL(ubl_setup); /** - * alloc_ubndev_mqs - Allocates and sets up an ub-n device + * alloc_ubldev_mqs - Allocates and sets up an ub-n device * @sizeof_priv: Size of additional driver-private structure to be allocated - * for this ubn device + * for this ubl device * @txqs: The number of TX queues this device has. * @rxqs: The number of RX queues this device has. * - * Fill in the fields of the device structure with ubn-generic + * Fill in the fields of the device structure with ubl-generic * values. Basically does everything except registering the device. * * Constructs a new net device, complete with a private data area of @@ -159,13 +159,13 @@ EXPORT_SYMBOL(ubl_setup); * this private data area. */ -struct net_device *alloc_ubndev_mqs(int sizeof_priv, unsigned int txqs, +struct net_device *alloc_ubldev_mqs(int sizeof_priv, unsigned int txqs, unsigned int rxqs) { return alloc_netdev_mqs(sizeof_priv, "ubl%d", NET_NAME_UNKNOWN, ubl_setup, txqs, rxqs); } -EXPORT_SYMBOL(alloc_ubndev_mqs); +EXPORT_SYMBOL(alloc_ubldev_mqs); /** * ubl_type_trans - obtains skb->protocol and adds sw_ptype to the packet diff --git a/drivers/net/ub/dev/ubl.h b/drivers/net/ub/dev/ubl.h index 8e646158d07ce18584be49434092118145520ba2..74a3df38abb83e8c52517f3b1c40289946a6967d 100644 --- a/drivers/net/ub/dev/ubl.h +++ b/drivers/net/ub/dev/ubl.h @@ -76,10 +76,10 @@ int ubl_create_header(struct sk_buff *skb, struct net_device *dev, const void *saddr, unsigned int len); void ubl_setup(struct net_device *dev); __be16 ubl_type_trans(struct sk_buff *skb, struct net_device *dev, u8 type); -struct net_device *alloc_ubndev_mqs(int sizeof_priv, unsigned int txqs, +struct net_device *alloc_ubldev_mqs(int sizeof_priv, unsigned int txqs, unsigned int rxqs); int ubl_add_sw_ctype(struct sk_buff *skb, u8 ctype); -#define alloc_ubndev_mq(sizeof_priv, count) \ - alloc_ubndev_mqs((sizeof_priv), (count), (count)) +#define alloc_ubldev_mq(sizeof_priv, count) \ + alloc_ubldev_mqs((sizeof_priv), (count), (count)) #endif