fix promisc and tcam problem
cover fix promisc and tcam problem
This patch adds multi-thread resource protection when setting promiscuous or allmulticast mode, adds bufout and out size parameter for mgmt sync channel and removes unused parameters for mgmt channel with no ack, adds TCAM filter switch for FDIR, and modifies return errors.
--
v1:
- add out parameter for mgmt sync channel
- remove unused parameter
- fix setting promiscuous mode problem
- add tcam filter switch for FDIR
- modify return errors
Xiaoyun wang (5):
net/hinic/base: add out parameter for mgmt sync channel net/hinic/base: remove unused parameter net/hinic: fix setting promiscuous mode problem net/hinic: add tcam filter switch for FDIR net/hinic/base: modify return errors
drivers/net/hinic/base/hinic_pmd_cfg.c | 4 +- drivers/net/hinic/base/hinic_pmd_cmd.h | 1 + drivers/net/hinic/base/hinic_pmd_cmdq.c | 31 ++++-- drivers/net/hinic/base/hinic_pmd_hwdev.c | 147 +++++++++++++++++--------- drivers/net/hinic/base/hinic_pmd_hwif.c | 4 +- drivers/net/hinic/base/hinic_pmd_mgmt.c | 3 +- drivers/net/hinic/base/hinic_pmd_mgmt.h | 3 +- drivers/net/hinic/base/hinic_pmd_niccfg.c | 170 ++++++++++++++++++------------ drivers/net/hinic/base/hinic_pmd_niccfg.h | 11 ++ drivers/net/hinic/base/hinic_pmd_nicio.c | 42 ++++++-- drivers/net/hinic/hinic_pmd_ethdev.c | 34 +++++- drivers/net/hinic/hinic_pmd_ethdev.h | 1 + drivers/net/hinic/hinic_pmd_flow.c | 13 +++ 13 files changed, 316 insertions(+), 148 deletions(-)
Signature · 1 line
1.8.3.1
PATCH 1/5 net/hinic/base: add out parameter for mgmt sync channel
Add bufout and out size info for some cmds that use mgmt sync channel, which can improve dfx capability when send msg failed.
--- drivers/net/hinic/base/hinic_pmd_cmdq.c | 31 ++++--- drivers/net/hinic/base/hinic_pmd_hwdev.c | 129 +++++++++++++++++++++--------- drivers/net/hinic/base/hinic_pmd_niccfg.c | 27 +++---- drivers/net/hinic/base/hinic_pmd_nicio.c | 36 +++++++-- 4 files changed, 151 insertions(+), 72 deletions(-)
drivers/net/hinic/base/hinic_pmd_cmdq.c +22 -9
@@ -426,27 +426,31 @@ static int hinic_set_cmdq_ctxts(struct hinic_hwdev *hwdev) {struct hinic_cmdqs *cmdqs = hwdev->cmdqs;struct hinic_cmdq_ctxt *cmdq_ctxt; +struct hinic_cmdq_ctxt cmdq_ctxt_out;enum hinic_cmdq_type cmdq_type; +u16 out_size =sizeof (cmdq_ctxt_out);u16 in_size;int err; cmdq_type =HINIC_CMDQ_SYNC ; +memset (&cmdq_ctxt_out,0 , out_size);for (; cmdq_type <HINIC_MAX_CMDQ_TYPES ; cmdq_type++) { cmdq_ctxt = &cmdqs->cmdq[cmdq_type].cmdq_ctxt; cmdq_ctxt->resp_aeq_num =HINIC_AEQ1 ; in_size =sizeof (*cmdq_ctxt); err =hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM ,HINIC_MGMT_CMD_CMDQ_CTXT_SET , - cmdq_ctxt, in_size,NULL , -NULL ,0 ); -if (err) { + cmdq_ctxt, in_size, &cmdq_ctxt_out, + &out_size,0 ); +if (err || !out_size || cmdq_ctxt_out.status) {if (err ==HINIC_MBOX_PF_BUSY_ACTIVE_FW || err ==HINIC_DEV_BUSY_ACTIVE_FW ) { cmdqs->status |=HINIC_CMDQ_SET_FAIL ;PMD_DRV_LOG (ERR ,"PF or VF fw is hot active" ); } -PMD_DRV_LOG (ERR ,"Set cmdq ctxt failed, err: %d" , err); -return -EFAULT ; +PMD_DRV_LOG (ERR ,"Set cmdq ctxt failed, err: %d, status: 0x%x, out_size: 0x%x" , + err, cmdq_ctxt_out.status, out_size); +return -EIO ; } }
@@ -631,6 +635,8 @@ static void hinic_cmdqs_free(struct hinic_hwdev *hwdev)static int hinic_set_cmdq_depth (struct hinic_hwdev *hwdev,u16 cmdq_depth) {struct hinic_root_ctxt root_ctxt; +u16 out_size =sizeof (root_ctxt); +int err;memset (&root_ctxt,0 ,sizeof (root_ctxt)); root_ctxt.mgmt_msg_head.resp_aeq_num =HINIC_AEQ1 ;
@@ -638,10 +644,17 @@ static int hinic_set_cmdq_depth(struct hinic_hwdev *hwdev, u16 cmdq_depth) root_ctxt.ppf_idx =hinic_ppf_idx (hwdev); root_ctxt.set_cmdq_depth =1 ; root_ctxt.cmdq_depth = (u8 )ilog2 (cmdq_depth); -return hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , -HINIC_MGMT_CMD_VAT_SET , - &root_ctxt,sizeof (root_ctxt), -NULL ,NULL ,0 ); + err =hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , +HINIC_MGMT_CMD_VAT_SET , + &root_ctxt,sizeof (root_ctxt), + &root_ctxt, &out_size,0 ); +if (err || !out_size || root_ctxt.mgmt_msg_head.status) { +PMD_DRV_LOG (ERR ,"Set cmdq depth failed, err: %d, status: 0x%x, out_size: 0x%x" , + err, root_ctxt.mgmt_msg_head.status, out_size); +return -EIO ; + } + +return 0 ; }int hinic_comm_cmdqs_init (struct hinic_hwdev *hwdev)
drivers/net/hinic/base/hinic_pmd_hwdev.c +90 -39
237 lines not on this page · raw message
drivers/net/hinic/base/hinic_pmd_niccfg.c +11 -16
@@ -18,7 +18,6 @@ buf_in, in_size, \ buf_out, out_size, 0) -/** * hinic_init_function_table - Initialize function table. *
@@ -380,9 +379,8 @@ int hinic_add_remove_vlan(void *hwdev, u16 vlan_id, u16 func_id, bool add) vlan_info.func_id = func_id; vlan_info.vlan_id = vlan_id; - err =l2nic_msg_to_mgmt_sync (hwdev, cmd, &vlan_info, -sizeof (vlan_info), &vlan_info, - &out_size); + err =l2nic_msg_to_mgmt_sync (hwdev, cmd, &vlan_info,sizeof (vlan_info), + &vlan_info, &out_size);if (err || !out_size || vlan_info.mgmt_msg_head.status) { PMD_DRV_LOG(ERR, "Failed to %s vlan, err: %d, status: 0x%x, out size: 0x%x",
@@ -469,8 +467,8 @@ int hinic_set_rx_vlan_offload(void *hwdev, u8 en) vlan_cfg.vlan_rx_offload = en; err =l2nic_msg_to_mgmt_sync (hwdev,HINIC_PORT_CMD_SET_RX_VLAN_OFFLOAD , - &vlan_cfg,sizeof (vlan_cfg), - &vlan_cfg, &out_size); + &vlan_cfg,sizeof (vlan_cfg), + &vlan_cfg, &out_size);if (err || !out_size || vlan_cfg.mgmt_msg_head.status) { PMD_DRV_LOG(ERR, "Failed to set rx vlan offload, err: %d, status: 0x%x, out size: 0x%x",
@@ -626,7 +624,7 @@ int hinic_get_port_info(void *hwdev, struct nic_port_info *port_info)PMD_DRV_LOG (ERR ,"Failed to get port info, err: %d, status: 0x%x, out size: 0x%x" , err, port_msg.mgmt_msg_head.status, out_size); -return err; +return -EIO ; } port_info->autoneg_cap = port_msg.autoneg_cap;
@@ -1270,7 +1268,6 @@ int hinic_set_rx_vhd_mode(void *hwdev, u16 vhd_mode, u16 rx_buf_sz)PMD_DRV_LOG (ERR ,"Failed to set vhd mode, err: %d, status: 0x%x, out size: 0x%x" , err, vhd_mode_cfg.mgmt_msg_head.status, out_size); -return -EIO ; }
@@ -1425,8 +1422,7 @@ int hinic_set_anti_attack(void *hwdev, bool enable) rate.xbs =ANTI_ATTACK_DEFAULT_XBS ; err =l2nic_msg_to_mgmt_sync (hwdev,HINIC_PORT_CMD_SET_ANTI_ATTACK_RATE , - &rate,sizeof (rate), &rate, - &out_size); + &rate,sizeof (rate), &rate, &out_size);if (err || !out_size || rate.mgmt_msg_head.status) { PMD_DRV_LOG(ERR, "Can't %s port Anti-Attack rate limit, err: %d, status: 0x%x, out size: 0x%x", (enable ? "enable" : "disable"), err,
@@ -1530,9 +1526,9 @@ int hinic_set_fast_recycle_mode(void *hwdev, u8 mode)sizeof (fast_recycled_mode), &fast_recycled_mode, &out_size, 0);if (err || fast_recycled_mode.mgmt_msg_head.status || !out_size) { -PMD_DRV_LOG (ERR ,"Failed to set recycle mode, ret: %d" , - fast_recycled_mode.mgmt_msg_head.status); -return -EFAULT ; +PMD_DRV_LOG (ERR ,"Failed to set recycle mode, err: %d, status: 0x%x, out size: 0x%x" , + err, fast_recycled_mode.mgmt_msg_head.status, out_size); +return -EIO ; }return 0 ;
@@ -1756,12 +1752,11 @@ int hinic_vf_get_default_cos(struct hinic_hwdev *hwdev, u8 *cos_id) err =hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_L2NIC ,HINIC_PORT_CMD_GET_VF_COS , &vf_cos, -sizeof (vf_cos), &vf_cos, - &out_size,0 ); +sizeof (vf_cos), &vf_cos, &out_size,0 );if (err || !out_size || vf_cos.mgmt_msg_head.status) {PMD_DRV_LOG (ERR ,"Get VF default cos failed, err: %d, status: 0x%x, out size: 0x%x" , err, vf_cos.mgmt_msg_head.status, out_size); -return -EFAULT ; +return -EIO ; } *cos_id = vf_cos.state.default_cos;
drivers/net/hinic/base/hinic_pmd_nicio.c +28 -8
@@ -471,6 +471,8 @@ static u16 get_hw_rx_buf_size(u32 rx_buf_sz) hinic_set_root_ctxt(void *hwdev, u16 rq_depth, u16 sq_depth, int rx_buf_sz) {struct hinic_root_ctxt root_ctxt; +u16 out_size =sizeof (root_ctxt); +int err;memset (&root_ctxt,0 ,sizeof (root_ctxt)); root_ctxt.mgmt_msg_head.resp_aeq_num =HINIC_AEQ1 ;
@@ -483,10 +485,18 @@ static u16 get_hw_rx_buf_size(u32 rx_buf_sz) root_ctxt.rx_buf_sz =get_hw_rx_buf_size (rx_buf_sz); root_ctxt.sq_depth = (u16 )ilog2 (sq_depth); -return hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , -HINIC_MGMT_CMD_VAT_SET , - &root_ctxt,sizeof (root_ctxt), -NULL ,NULL ,0 ); + err =hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , +HINIC_MGMT_CMD_VAT_SET , + &root_ctxt,sizeof (root_ctxt), + &root_ctxt, &out_size,0 ); +if (err || !out_size || root_ctxt.mgmt_msg_head.status) { +PMD_DRV_LOG (ERR , +"Set root context failed, err: %d, status: 0x%x, out_size: 0x%x" , + err, root_ctxt.mgmt_msg_head.status, out_size); +return -EIO ; + } + +return 0 ; }/**
@@ -499,6 +509,8 @@ static u16 get_hw_rx_buf_size(u32 rx_buf_sz)static int hinic_clean_root_ctxt (void *hwdev) {struct hinic_root_ctxt root_ctxt; +u16 out_size =sizeof (root_ctxt); +int err;memset (&root_ctxt,0 ,sizeof (root_ctxt)); root_ctxt.mgmt_msg_head.resp_aeq_num =HINIC_AEQ1 ;
@@ -511,10 +523,18 @@ static int hinic_clean_root_ctxt(void *hwdev) root_ctxt.rx_buf_sz =0 ; root_ctxt.sq_depth =0 ; -return hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , -HINIC_MGMT_CMD_VAT_SET , - &root_ctxt,sizeof (root_ctxt), -NULL ,NULL ,0 ); + err =hinic_msg_to_mgmt_sync (hwdev,HINIC_MOD_COMM , +HINIC_MGMT_CMD_VAT_SET , + &root_ctxt,sizeof (root_ctxt), + &root_ctxt, &out_size,0 ); +if (err || !out_size || root_ctxt.mgmt_msg_head.status) { +PMD_DRV_LOG (ERR , +"Clean root context failed, err: %d, status: 0x%x, out_size: 0x%x" , + err, root_ctxt.mgmt_msg_head.status, out_size); +return -EIO ; + } + +return 0 ; }/* init qps ctxt and set sq ci attr and arm all sq and set vat page_size */
Signature · 1 line
1.8.3.1
PATCH 2/5 net/hinic/base: remove unused parameter
In reply to Xiaoyun wangRemove unused parameters for mgmt channel with no ack.
--- drivers/net/hinic/base/hinic_pmd_hwdev.c | 2 +- drivers/net/hinic/base/hinic_pmd_mgmt.c | 3 +-- drivers/net/hinic/base/hinic_pmd_mgmt.h | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-)
drivers/net/hinic/base/hinic_pmd_hwdev.c +1 -1
@@ -599,7 +599,7 @@ static int hinic_pf_rx_tx_flush(struct hinic_hwdev *hwdev) err =hinic_msg_to_mgmt_no_ack (hwdev,HINIC_MOD_COMM ,HINIC_MGMT_CMD_START_FLR , &clr_res, -sizeof (clr_res),NULL ,NULL ); +sizeof (clr_res));if (err) {PMD_DRV_LOG (WARNING ,"Notice flush msg failed, err: %d" , err); ret = err;
drivers/net/hinic/base/hinic_pmd_mgmt.c +1 -2
@@ -504,8 +504,7 @@ int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, }int hinic_msg_to_mgmt_no_ack (void *hwdev,enum hinic_mod_type mod,u8 cmd, - void *buf_in, u16 in_size, __rte_unused void *buf_out, - __rte_unused u16 *out_size) +void *buf_in,u16 in_size) {struct hinic_msg_pf_to_mgmt *pf_to_mgmt = ((struct hinic_hwdev *)hwdev)->pf_to_mgmt;
drivers/net/hinic/base/hinic_pmd_mgmt.h +1 -2
@@ -101,8 +101,7 @@ struct hinic_msg_pf_to_mgmt { };int hinic_msg_to_mgmt_no_ack (void *hwdev,enum hinic_mod_type mod,u8 cmd, -void *buf_in,u16 in_size,void *buf_out, -u16 *out_size); +void *buf_in,u16 in_size);int hinic_comm_pf_to_mgmt_init (struct hinic_hwdev *hwdev);
Signature · 1 line
1.8.3.1
PATCH 3/5 net/hinic: fix setting promiscuous mode problem
In reply to Xiaoyun wangWhen setting promiscuous or allmulticast mode, increase multi-thread resource protection, because the patch "net/bonding: prefer allmulti to promiscuous for LACP" adds trying to use allmulti when adding a slave, and EVS bond driver also sets promisc with another thread, which may lead to thread reentry and cause failure to set promiscuous mode.
--- drivers/net/hinic/hinic_pmd_ethdev.c | 34 ++++++++++++++++++++++++++++++---- drivers/net/hinic/hinic_pmd_ethdev.h | 1 + 2 files changed, 31 insertions(+), 4 deletions(-)
drivers/net/hinic/hinic_pmd_ethdev.c +30 -4
@@ -1271,14 +1271,25 @@ static void hinic_disable_interrupt(struct rte_eth_dev *dev)static int hinic_set_dev_promiscuous (struct hinic_nic_dev *nic_dev,bool enable) { -u32 rx_mode_ctrl = nic_dev->rx_mode_status; +u32 rx_mode_ctrl; +int err; + + err =hinic_mutex_lock (&nic_dev->rx_mode_mutex); +if (err) +return err; + + rx_mode_ctrl = nic_dev->rx_mode_status;if (enable) rx_mode_ctrl |=HINIC_RX_MODE_PROMISC ;else rx_mode_ctrl &= (~HINIC_RX_MODE_PROMISC ); -return hinic_config_rx_mode (nic_dev, rx_mode_ctrl); + err =hinic_config_rx_mode (nic_dev, rx_mode_ctrl); + + (void )hinic_mutex_unlock (&nic_dev->rx_mode_mutex); + +return err; }/**
@@ -1731,14 +1742,25 @@ static void hinic_remove_all_vlanid(struct rte_eth_dev *eth_dev)static int hinic_set_dev_allmulticast (struct hinic_nic_dev *nic_dev,bool enable) { -u32 rx_mode_ctrl = nic_dev->rx_mode_status; +u32 rx_mode_ctrl; +int err; + + err =hinic_mutex_lock (&nic_dev->rx_mode_mutex); +if (err) +return err; + + rx_mode_ctrl = nic_dev->rx_mode_status;if (enable) rx_mode_ctrl |=HINIC_RX_MODE_MC_ALL ;else rx_mode_ctrl &= (~HINIC_RX_MODE_MC_ALL ); -return hinic_config_rx_mode (nic_dev, rx_mode_ctrl); + err =hinic_config_rx_mode (nic_dev, rx_mode_ctrl); + + (void )hinic_mutex_unlock (&nic_dev->rx_mode_mutex); + +return err; }/**
@@ -3130,6 +3152,8 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev) }rte_bit_relaxed_set32 (HINIC_DEV_INTR_EN , &nic_dev->dev_status); +hinic_mutex_init (&nic_dev->rx_mode_mutex,NULL ); +/* initialize filter info */ filter_info = &nic_dev->filter; tcam_info = &nic_dev->tcam;
@@ -3204,6 +3228,8 @@ static int hinic_dev_uninit(struct rte_eth_dev *dev)if (rte_eal_process_type () !=RTE_PROC_PRIMARY )return 0 ; +hinic_mutex_destroy (&nic_dev->rx_mode_mutex); +hinic_dev_close (dev); dev->dev_ops =NULL ;
drivers/net/hinic/hinic_pmd_ethdev.h +1 -0
@@ -329,6 +329,7 @@ struct hinic_nic_dev {unsigned int flags;struct nic_service_cap nic_cap;u32 rx_mode_status;/* promisc or allmulticast */ +pthread_mutex_t rx_mode_mutex;u32 dev_status;char proc_dev_name[HINIC_DEV_NAME_LEN ];
Signature · 1 line
1.8.3.1
PATCH 4/5 net/hinic: add tcam filter switch for FDIR
In reply to Xiaoyun wangWhen the filter rule needs to use the TCAM method, PMD driver enables the TCAM filter switch, otherwise disables it, which can improve the performance of microcode in FDIR scenarios that not use TCAM method.
--- drivers/net/hinic/base/hinic_pmd_cmd.h | 1 + drivers/net/hinic/base/hinic_pmd_niccfg.c | 41 +++++++++++++++++++++++++++++++ drivers/net/hinic/base/hinic_pmd_niccfg.h | 11 +++++++++ drivers/net/hinic/hinic_pmd_flow.c | 13 ++++++++++ 4 files changed, 66 insertions(+)
drivers/net/hinic/base/hinic_pmd_cmd.h +1 -0
@@ -120,6 +120,7 @@ enum hinic_port_cmd {HINIC_PORT_CMD_UP_TC_GET_FLOW =0xb1 ,HINIC_PORT_CMD_UP_TC_FLUSH_TCAM =0xb2 ,HINIC_PORT_CMD_UP_TC_CTRL_TCAM_BLOCK =0xb3 , +HINIC_PORT_CMD_UP_TC_ENABLE =0xb4 ,HINIC_PORT_CMD_SET_IPSU_MAC =0xcb , HINIC_PORT_CMD_GET_IPSU_MAC = 0xcc,
drivers/net/hinic/base/hinic_pmd_niccfg.c +41 -0
44 lines not on this page · raw message
drivers/net/hinic/base/hinic_pmd_niccfg.h +11 -0
@@ -766,6 +766,15 @@ struct hinic_port_qfilter_info {u32 key; }; +struct hinic_port_tcam_info { +struct hinic_mgmt_msg_head mgmt_msg_head; + +u16 func_id; +u8 tcam_enable; +u8 rsvd1; +u32 rsvd2; +}; +#define HINIC_MAX_TCAM_RULES_NUM (10240)#define HINIC_TCAM_BLOCK_ENABLE 1#define HINIC_TCAM_BLOCK_DISABLE 0
@@ -941,4 +950,6 @@ int hinic_set_fdir_tcam(void *hwdev, u16 type_mask,int hinic_flush_tcam_rule (void *hwdev); +int hinic_set_fdir_tcam_rule_filter (void *hwdev,bool enable); +#endif /* _HINIC_PMD_NICCFG_H_ */
drivers/net/hinic/hinic_pmd_flow.c +13 -0
@@ -1900,6 +1900,8 @@ void hinic_free_fdir_filter(struct hinic_nic_dev *nic_dev) { (void )hinic_set_fdir_filter (nic_dev->hwdev,0 ,0 ,0 , false); + (void )hinic_set_fdir_tcam_rule_filter (nic_dev->hwdev, false); + (void )hinic_clear_fdir_tcam (nic_dev->hwdev,TCAM_PKT_BGP_DPORT ); (void )hinic_clear_fdir_tcam (nic_dev->hwdev,TCAM_PKT_BGP_SPORT );
@@ -2801,6 +2803,15 @@ static int hinic_add_tcam_filter(struct rte_eth_dev *dev, fdir_tcam_rule->index);return rc; } + + rc =hinic_set_fdir_tcam_rule_filter (nic_dev->hwdev, true); +if (rc && rc !=HINIC_MGMT_CMD_UNSUPPORTED ) { + (void )hinic_set_fdir_filter (nic_dev->hwdev,0 ,0 ,0 , + false); + (void )hinic_del_tcam_rule (nic_dev->hwdev, + fdir_tcam_rule->index); +return rc; + } }TAILQ_INSERT_TAIL (&tcam_info->tcam_list, tcam_filter, entries);
@@ -3197,6 +3208,8 @@ static void hinic_clear_all_fdir_filter(struct rte_eth_dev *dev) (void )hinic_set_fdir_filter (nic_dev->hwdev,0 ,0 ,0 , false); + (void )hinic_set_fdir_tcam_rule_filter (nic_dev->hwdev, false); + (void )hinic_flush_tcam_rule (nic_dev->hwdev); }
Signature · 1 line
1.8.3.1
PATCH 5/5 net/hinic/base: modify return errors
In reply to Xiaoyun wangModify return errors with linux system errors when system requests fail.
--- drivers/net/hinic/base/hinic_pmd_cfg.c | 4 +- drivers/net/hinic/base/hinic_pmd_hwdev.c | 16 ++--- drivers/net/hinic/base/hinic_pmd_hwif.c | 4 +- drivers/net/hinic/base/hinic_pmd_niccfg.c | 104 +++++++++++++++--------------- drivers/net/hinic/base/hinic_pmd_nicio.c | 6 +- 5 files changed, 66 insertions(+), 68 deletions(-)
drivers/net/hinic/base/hinic_pmd_cfg.c +2 -2
@@ -179,7 +179,7 @@ static int get_cap_from_fw(struct hinic_hwdev *dev, enum func_type type)if (err || dev_cap.mgmt_msg_head.status || !out_len) {PMD_DRV_LOG (ERR ,"Get capability from FW failed, err: %d, status: %d, out_len: %d" , err, dev_cap.mgmt_msg_head.status, out_len); -return -EFAULT ; +return -EIO ; }parse_dev_cap (dev, &dev_cap, type);
@@ -201,7 +201,7 @@ static int get_cap_from_pf(struct hinic_hwdev *dev, enum func_type type)if (err || dev_cap.mgmt_msg_head.status || !out_len) {PMD_DRV_LOG (ERR ,"Get capability from PF failed, err: %d, status: %d, out_len: %d" , err, dev_cap.mgmt_msg_head.status, out_len); -return -EFAULT ; +return -EIO ; }parse_dev_cap (dev, &dev_cap, type);
drivers/net/hinic/base/hinic_pmd_hwdev.c +7 -9
@@ -475,7 +475,7 @@ static int wait_for_flr_finish(struct hinic_hwif *hwif)rte_delay_ms (10 ); }while (time_before (jiffies, end)); -return -EFAULT ; +return -ETIME ; }#define HINIC_WAIT_CMDQ_IDLE_TIMEOUT 1000
@@ -681,17 +681,15 @@ int hinic_set_interrupt_cfg(struct hinic_hwdev *hwdev,u16 out_size =sizeof (msix_cfg);int err; -memset (&msix_cfg,0 ,sizeof (msix_cfg)); - msix_cfg.mgmt_msg_head.resp_aeq_num =HINIC_AEQ1 ; - msix_cfg.func_id =hinic_global_func_id (hwdev); - msix_cfg.msix_index = (u16 )interrupt_info.msix_index; - temp_info.msix_index = interrupt_info.msix_index; - err =hinic_get_interrupt_cfg (hwdev, &temp_info);if (err) -return -EINVAL ; +return -EIO ; +memset (&msix_cfg,0 ,sizeof (msix_cfg)); + msix_cfg.mgmt_msg_head.resp_aeq_num =HINIC_AEQ1 ; + msix_cfg.func_id =hinic_global_func_id (hwdev); + msix_cfg.msix_index = (u16 )interrupt_info.msix_index; msix_cfg.lli_credit_cnt = temp_info.lli_credit_limit; msix_cfg.lli_tmier_cnt = temp_info.lli_timer_cfg; msix_cfg.pending_cnt = temp_info.pending_limt;
@@ -1051,7 +1049,7 @@ int hinic_get_board_info(void *hwdev, struct hinic_board_info *info)if (err || board_info.mgmt_msg_head.status || !out_size) {PMD_DRV_LOG (ERR ,"Failed to get board info, err: %d, status: 0x%x, out size: 0x%x" , err, board_info.mgmt_msg_head.status, out_size); -return -EFAULT ; +return -EIO ; }memcpy (info, &board_info.info,sizeof (*info));
drivers/net/hinic/base/hinic_pmd_hwif.c +2 -2
@@ -321,7 +321,7 @@ int wait_until_doorbell_flush_states(struct hinic_hwif *hwif,rte_delay_ms (1 ); }while (time_before (jiffies, end)); -return -EFAULT ; +return -ETIME ; }static int wait_until_doorbell_and_outbound_enabled (struct hinic_hwif *hwif)
@@ -343,7 +343,7 @@ static int wait_until_doorbell_and_outbound_enabled(struct hinic_hwif *hwif)rte_delay_ms (1 ); }while (time_before (jiffies, end)); -return -EFAULT ; +return -ETIME ; }u16 hinic_global_func_id (void *hwdev)
drivers/net/hinic/base/hinic_pmd_niccfg.c +52 -52
416 lines not on this page · raw message
drivers/net/hinic/base/hinic_pmd_nicio.c +3 -3
@@ -314,7 +314,7 @@ static int init_sq_ctxts(struct hinic_nic_io *nic_io)if (err || out_param !=0 ) {PMD_DRV_LOG (ERR ,"Failed to set SQ ctxts, err: %d" , err); - err = -EFAULT ; + err = -EIO ;break ; }
@@ -371,7 +371,7 @@ static int init_rq_ctxts(struct hinic_nic_io *nic_io) cmd_buf, &out_param, 0);if ((err) || out_param !=0 ) {PMD_DRV_LOG (ERR ,"Failed to set RQ ctxts" ); - err = -EFAULT ; + err = -EIO ;break ; }
@@ -422,7 +422,7 @@ static int clean_queue_offload_ctxt(struct hinic_nic_io *nic_io,if ((err) || (out_param)) {PMD_DRV_LOG (ERR ,"Failed to clean queue offload ctxts" ); - err = -EFAULT ; + err = -EIO ; }hinic_free_cmd_buf (hwdev, cmd_buf);
Signature · 1 line
1.8.3.1
Re: [dpdk-dev] [PATCH v1 5/5] net/hinic/base: modify return errors
Quoted 4 lines · Xiaoyun wang
Modify return errors with linux system errors when system requests fail.
Signed-off-by Xiaoyun wang <[email protected]>
<...>
drivers/net/hinic/base/hinic_pmd_hwdev.c static int wait_for_flr_finish(struct hinic_hwif *hwif) · line 479
Quoted 7 lines
drivers/net/hinic/base/hinic_pmd_hwdev.c +1
-1@@ -475,7 +475,7 @@ static int wait_for_flr_finish(struct hinic_hwif *hwif)rte_delay_ms (10 ); }while (time_before (jiffies, end)); -return -EFAULT ; +return -ETIME ; }
Hi Xiaoyun,
'ETIME' is not defined in FreeBSD and was causing build error [1]. I have reverted the 'ETIME' changes in this patch (3 occurances) back.
Can you please do an incremental patch if 'EFAULT' errors needs to be replaced?
Thanks,
ferruh
[1]
http://mails.dpdk.org/archives/test-report/2020-July/142068.html
Quoted 14 lines · Xiaoyun wang
This patch adds multi-thread resource protection when setting promiscuous or allmulticast mode, adds bufout and out size parameter for mgmt sync channel and removes unused parameters for mgmt channel with no ack, adds TCAM filter switch for FDIR, and modifies return errors.
--
v1:
- add out parameter for mgmt sync channel
- remove unused parameter
- fix setting promiscuous mode problem
- add tcam filter switch for FDIR
- modify return errors
Quoted 6 lines
Xiaoyun wang (5):
net/hinic/base: add out parameter for mgmt sync channelnet/hinic/base: remove unused parameter net/hinic: fix setting promiscuous mode problem net/hinic: add tcam filter switch for FDIRnet/hinic/base: modify return errors
Series applied to dpdk-next-net/master, thanks.