From: Chengwen Feng Date: Thu, 22 Apr 2021 01:55:50 +0000 (+0800) Subject: net/hns3: fix processing link status message on PF X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=4a2f6ab6fbc4be504e155a48665cc0d854ef36b6;p=dpdk.git net/hns3: fix processing link status message on PF The opcode of the link status notification message reported by the firmware is zero, it will be filtered out because driver treats it as already processed message. As a result, the PF can't update the link status in a timely manner. Because only VF can set opcode to zero when processing mailbox message, we add a judgment to make sure the PF messages will not be filtered out. Fixes: dbbbad23e380 ("net/hns3: fix VF handling LSC event in secondary process") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng Signed-off-by: Min Hu (Connor) --- diff --git a/drivers/net/hns3/hns3_mbx.c b/drivers/net/hns3/hns3_mbx.c index 3b35c0277f..ba04ac9e90 100644 --- a/drivers/net/hns3/hns3_mbx.c +++ b/drivers/net/hns3/hns3_mbx.c @@ -438,16 +438,19 @@ scan_next: void hns3_dev_handle_mbx_msg(struct hns3_hw *hw) { + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); struct hns3_cmq_ring *crq = &hw->cmq.crq; struct hns3_mbx_pf_to_vf_cmd *req; struct hns3_cmd_desc *desc; + bool handle_out; uint8_t opcode; uint16_t flag; rte_spinlock_lock(&hw->cmq.crq.lock); - if (rte_eal_process_type() != RTE_PROC_PRIMARY || - !rte_thread_is_intr()) { + handle_out = (rte_eal_process_type() != RTE_PROC_PRIMARY || + !rte_thread_is_intr()) && hns->is_vf; + if (handle_out) { /* * Currently, any threads in the primary and secondary processes * could send mailbox sync request, so it will need to process @@ -491,7 +494,8 @@ hns3_dev_handle_mbx_msg(struct hns3_hw *hw) continue; } - if (desc->opcode == 0) { + handle_out = hns->is_vf && desc->opcode == 0; + if (handle_out) { /* Message already processed by other thread */ crq->desc[crq->next_to_use].flag = 0; hns3_mbx_ring_ptr_move_crq(crq);