X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fhns3%2Fhns3_dcb.c;h=90c0d041c9023ec2836f08b64765ef6ed98c1d96;hb=3186a3a49c3a33502ba6189a80b8317c0a064830;hp=8fcb284cf14a2257240e0e347693fd83f15c4aa3;hpb=47ce649fd30c89d95c420a015f9eef7f215bb386;p=dpdk.git diff --git a/drivers/net/hns3/hns3_dcb.c b/drivers/net/hns3/hns3_dcb.c index 8fcb284cf1..90c0d041c9 100644 --- a/drivers/net/hns3/hns3_dcb.c +++ b/drivers/net/hns3/hns3_dcb.c @@ -1543,6 +1543,7 @@ hns3_dcb_hw_configure(struct hns3_adapter *hns) enum hns3_fc_status fc_status = hw->current_fc_status; enum hns3_fc_mode requested_fc_mode = hw->requested_fc_mode; uint8_t hw_pfc_map = hw->dcb_info.hw_pfc_map; + uint8_t pfc_en = hw->dcb_info.pfc_en; int ret; if (pf->tx_sch_mode != HNS3_FLAG_TC_BASE_SCH_MODE && @@ -1596,6 +1597,7 @@ pfc_setup_fail: hw->current_fc_status = fc_status; buffer_alloc_fail: + hw->dcb_info.pfc_en = pfc_en; hw->dcb_info.hw_pfc_map = hw_pfc_map; return ret; @@ -1615,8 +1617,7 @@ hns3_dcb_configure(struct hns3_adapter *hns) int ret; hns3_dcb_cfg_validate(hns, &num_tc, &map_changed); - if (map_changed || - __atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED)) { + if (map_changed) { ret = hns3_dcb_info_update(hns, num_tc); if (ret) { hns3_err(hw, "dcb info update failed: %d", ret); @@ -1712,14 +1713,18 @@ hns3_dcb_init(struct hns3_hw *hw) return 0; } -static int +int hns3_update_queue_map_configure(struct hns3_adapter *hns) { struct hns3_hw *hw = &hns->hw; + enum rte_eth_rx_mq_mode mq_mode = hw->data->dev_conf.rxmode.mq_mode; uint16_t nb_rx_q = hw->data->nb_rx_queues; uint16_t nb_tx_q = hw->data->nb_tx_queues; int ret; + if ((uint32_t)mq_mode & ETH_MQ_RX_DCB_FLAG) + return 0; + ret = hns3_dcb_update_tc_queue_mapping(hw, nb_rx_q, nb_tx_q); if (ret) { hns3_err(hw, "failed to update tc queue mapping, ret = %d.", @@ -1733,32 +1738,6 @@ hns3_update_queue_map_configure(struct hns3_adapter *hns) return ret; } -int -hns3_dcb_cfg_update(struct hns3_adapter *hns) -{ - struct hns3_hw *hw = &hns->hw; - enum rte_eth_rx_mq_mode mq_mode = hw->data->dev_conf.rxmode.mq_mode; - int ret; - - if ((uint32_t)mq_mode & ETH_MQ_RX_DCB_FLAG) { - ret = hns3_dcb_configure(hns); - if (ret) - hns3_err(hw, "Failed to config dcb: %d", ret); - } else { - /* - * Update queue map without PFC configuration, - * due to queues reconfigured by user. - */ - ret = hns3_update_queue_map_configure(hns); - if (ret) - hns3_err(hw, - "Failed to update queue mapping configure: %d", - ret); - } - - return ret; -} - static void hns3_get_fc_mode(struct hns3_hw *hw, enum rte_eth_fc_mode mode) {