From patchwork Wed Apr 1 09:30:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wangxiaoyun (Cloud)" X-Patchwork-Id: 67572 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0809CA057B; Wed, 1 Apr 2020 11:15:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 927F71BEB3; Wed, 1 Apr 2020 11:14:59 +0200 (CEST) Received: from huawei.com (szxga07-in.huawei.com [45.249.212.35]) by dpdk.org (Postfix) with ESMTP id 2F4891BE99 for ; Wed, 1 Apr 2020 11:14:57 +0200 (CEST) Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 340D2DED1D1A1166A29E; Wed, 1 Apr 2020 17:14:55 +0800 (CST) Received: from tester.localdomain (10.175.119.39) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.487.0; Wed, 1 Apr 2020 17:14:48 +0800 From: Xiaoyun wang To: CC: , , , , , , , , Xiaoyun wang Date: Wed, 1 Apr 2020 17:30:00 +0800 Message-ID: <5807ad3c2a214c1ed363fb36003344f731b7f1d9.1585731196.git.cloud.wangxiaoyun@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.175.119.39] X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH v3 1/2] net/hinic/base: fix FW hotactive problem X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When PF detects FW is hotactive, up returns HINIC_DEV_BUSY_ACTIVE_FW for pf driver, when cmdq reinit at txrx flush, cmdq will fail, driver should reinit the cmdq when port start. Fixes: d9ce1917941c ("net/hinic/base: add hardware operation") Signed-off-by: Xiaoyun wang --- drivers/net/hinic/base/hinic_pmd_cmdq.c | 7 ++++-- drivers/net/hinic/base/hinic_pmd_hwdev.c | 4 ++-- drivers/net/hinic/base/hinic_pmd_mgmt.c | 40 ++++++++++++++++++-------------- drivers/net/hinic/base/hinic_pmd_mgmt.h | 2 ++ drivers/net/hinic/base/hinic_pmd_nicio.c | 2 +- drivers/net/hinic/hinic_pmd_ethdev.c | 7 +----- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/drivers/net/hinic/base/hinic_pmd_cmdq.c b/drivers/net/hinic/base/hinic_pmd_cmdq.c index 685498e..2e98b9c 100644 --- a/drivers/net/hinic/base/hinic_pmd_cmdq.c +++ b/drivers/net/hinic/base/hinic_pmd_cmdq.c @@ -440,9 +440,12 @@ static int hinic_set_cmdq_ctxts(struct hinic_hwdev *hwdev) cmdq_ctxt, in_size, NULL, NULL, 0); if (err) { - if (err == HINIC_MBOX_PF_BUSY_ACTIVE_FW) + if (err == HINIC_MBOX_PF_BUSY_ACTIVE_FW || + err == HINIC_DEV_BUSY_ACTIVE_FW) { cmdqs->status |= HINIC_CMDQ_SET_FAIL; - PMD_DRV_LOG(ERR, "Set cmdq ctxt failed"); + PMD_DRV_LOG(ERR, "PF or VF fw is hot active"); + } + PMD_DRV_LOG(ERR, "Set cmdq ctxt failed, err: %d", err); return -EFAULT; } } diff --git a/drivers/net/hinic/base/hinic_pmd_hwdev.c b/drivers/net/hinic/base/hinic_pmd_hwdev.c index cf2a970..fc11ecd 100644 --- a/drivers/net/hinic/base/hinic_pmd_hwdev.c +++ b/drivers/net/hinic/base/hinic_pmd_hwdev.c @@ -529,7 +529,7 @@ static int hinic_vf_rx_tx_flush(struct hinic_hwdev *hwdev) err = hinic_reinit_cmdq_ctxts(hwdev); if (err) - PMD_DRV_LOG(WARNING, "Reinit cmdq failed"); + PMD_DRV_LOG(WARNING, "Reinit cmdq failed when vf flush"); return err; } @@ -587,7 +587,7 @@ static int hinic_pf_rx_tx_flush(struct hinic_hwdev *hwdev) err = hinic_reinit_cmdq_ctxts(hwdev); if (err) - PMD_DRV_LOG(WARNING, "Reinit cmdq failed"); + PMD_DRV_LOG(WARNING, "Reinit cmdq failed when pf flush"); return 0; } diff --git a/drivers/net/hinic/base/hinic_pmd_mgmt.c b/drivers/net/hinic/base/hinic_pmd_mgmt.c index addc9d2..06c9b68 100644 --- a/drivers/net/hinic/base/hinic_pmd_mgmt.c +++ b/drivers/net/hinic/base/hinic_pmd_mgmt.c @@ -248,6 +248,19 @@ static void free_msg_buf(struct hinic_msg_pf_to_mgmt *pf_to_mgmt) free_recv_msg(&pf_to_mgmt->recv_msg_from_mgmt); } +static int hinic_get_mgmt_channel_status(void *hwdev) +{ + struct hinic_hwif *hwif = ((struct hinic_hwdev *)hwdev)->hwif; + u32 val; + + if (hinic_func_type((struct hinic_hwdev *)hwdev) == TYPE_VF) + return false; + + val = hinic_hwif_read_reg(hwif, HINIC_ICPL_RESERVD_ADDR); + + return HINIC_GET_MGMT_CHANNEL_STATUS(val, MGMT_CHANNEL_STATUS); +} + /** * send_msg_to_mgmt_async - send async message * @pf_to_mgmt: PF to MGMT channel @@ -309,6 +322,14 @@ static int send_msg_to_mgmt_sync(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, u64 header; u16 cmd_size = mgmt_msg_len(msg_len); + /* If fw is hot active, return failed */ + if (hinic_get_mgmt_channel_status(pf_to_mgmt->hwdev)) { + if (mod == HINIC_MOD_COMM || mod == HINIC_MOD_L2NIC) + return HINIC_DEV_BUSY_ACTIVE_FW; + else + return -EBUSY; + } + if (direction == HINIC_MSG_RESPONSE) prepare_header(pf_to_mgmt, &header, msg_len, mod, ack_type, direction, cmd, resp_msg_id); @@ -449,7 +470,7 @@ static void hinic_pf_to_mgmt_free(struct hinic_hwdev *hwdev) recv_msg->msg_len); *out_size = recv_msg->msg_len; } else { - PMD_DRV_LOG(ERR, "Mgmt rsp's msg len: %u overflow.", + PMD_DRV_LOG(ERR, "Mgmt rsp's msg len:%u overflow.", recv_msg->msg_len); err = -ERANGE; } @@ -462,19 +483,6 @@ static void hinic_pf_to_mgmt_free(struct hinic_hwdev *hwdev) return err; } -static int hinic_get_mgmt_channel_status(void *hwdev) -{ - struct hinic_hwif *hwif = ((struct hinic_hwdev *)hwdev)->hwif; - u32 val; - - if (hinic_func_type((struct hinic_hwdev *)hwdev) == TYPE_VF) - return false; - - val = hinic_hwif_read_reg(hwif, HINIC_ICPL_RESERVD_ADDR); - - return HINIC_GET_MGMT_CHANNEL_STATUS(val, MGMT_CHANNEL_STATUS); -} - int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size, u32 timeout) @@ -484,10 +492,6 @@ int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, if (!hwdev || in_size > HINIC_MSG_TO_MGMT_MAX_LEN) return -EINVAL; - /* If status is hot upgrading, don't send message to mgmt */ - if (hinic_get_mgmt_channel_status(hwdev)) - return -EPERM; - if (hinic_func_type(hwdev) == TYPE_VF) { rc = hinic_mbox_to_pf(hwdev, mod, cmd, buf_in, in_size, buf_out, out_size, timeout); diff --git a/drivers/net/hinic/base/hinic_pmd_mgmt.h b/drivers/net/hinic/base/hinic_pmd_mgmt.h index cc18843..52b319e 100644 --- a/drivers/net/hinic/base/hinic_pmd_mgmt.h +++ b/drivers/net/hinic/base/hinic_pmd_mgmt.h @@ -34,6 +34,8 @@ #define HINIC_MSG_HEADER_P2P_IDX_MASK 0xF #define HINIC_MSG_HEADER_MSG_ID_MASK 0x3FF +#define HINIC_DEV_BUSY_ACTIVE_FW 0xFE + #define HINIC_MSG_HEADER_GET(val, member) \ (((val) >> HINIC_MSG_HEADER_##member##_SHIFT) & \ HINIC_MSG_HEADER_##member##_MASK) diff --git a/drivers/net/hinic/base/hinic_pmd_nicio.c b/drivers/net/hinic/base/hinic_pmd_nicio.c index fd34b03..60c4e14 100644 --- a/drivers/net/hinic/base/hinic_pmd_nicio.c +++ b/drivers/net/hinic/base/hinic_pmd_nicio.c @@ -537,7 +537,7 @@ int hinic_init_qp_ctxts(struct hinic_hwdev *hwdev) if (hwdev->cmdqs->status & HINIC_CMDQ_SET_FAIL) { err = hinic_reinit_cmdq_ctxts(hwdev); if (err) { - PMD_DRV_LOG(ERR, "Reinit cmdq context failed, rc: %d", + PMD_DRV_LOG(ERR, "Reinit cmdq context failed when dev start, err: %d", err); return err; } diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 23724a0..239a78c 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -1862,11 +1862,6 @@ static int hinic_flow_ctrl_get(struct rte_eth_dev *dev, else fc_conf->mode = RTE_FC_NONE; - PMD_DRV_LOG(INFO, "Get pause options, tx: %s, rx: %s, auto: %s\n", - nic_pause.tx_pause ? "on" : "off", - nic_pause.rx_pause ? "on" : "off", - nic_pause.auto_neg ? "on" : "off"); - return 0; } @@ -1900,7 +1895,7 @@ static int hinic_flow_ctrl_set(struct rte_eth_dev *dev, nic_dev->nic_pause.rx_pause = nic_pause.rx_pause; nic_dev->nic_pause.tx_pause = nic_pause.tx_pause; - PMD_DRV_LOG(INFO, "Get pause options, tx: %s, rx: %s, auto: %s\n", + PMD_DRV_LOG(INFO, "Set pause options, tx: %s, rx: %s, auto: %s\n", nic_pause.tx_pause ? "on" : "off", nic_pause.rx_pause ? "on" : "off", nic_pause.auto_neg ? "on" : "off"); From patchwork Wed Apr 1 09:30:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wangxiaoyun (Cloud)" X-Patchwork-Id: 67573 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6E1F8A057B; Wed, 1 Apr 2020 11:15:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5536A1BEC7; Wed, 1 Apr 2020 11:15:23 +0200 (CEST) Received: from huawei.com (szxga04-in.huawei.com [45.249.212.190]) by dpdk.org (Postfix) with ESMTP id E87061BEC6 for ; Wed, 1 Apr 2020 11:15:21 +0200 (CEST) Received: from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id BD7AACB6675E35A79A63; Wed, 1 Apr 2020 17:15:20 +0800 (CST) Received: from tester.localdomain (10.175.119.39) by DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id 14.3.487.0; Wed, 1 Apr 2020 17:15:13 +0800 From: Xiaoyun wang To: CC: , , , , , , , , Xiaoyun wang Date: Wed, 1 Apr 2020 17:30:01 +0800 Message-ID: <2f02499e5f83a09788f67022a7dc59b4b7a685cf.1585731196.git.cloud.wangxiaoyun@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.175.119.39] X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH v3 2/2] net/hinic/base: optimize log style X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The patch adds space between descriptors and variables in log files. Signed-off-by: Xiaoyun wang --- drivers/net/hinic/base/hinic_pmd_hwdev.c | 4 ++-- drivers/net/hinic/base/hinic_pmd_hwif.c | 4 ++-- drivers/net/hinic/base/hinic_pmd_mgmt.c | 2 +- drivers/net/hinic/base/hinic_pmd_niccfg.c | 3 +-- drivers/net/hinic/hinic_pmd_ethdev.c | 8 ++++---- drivers/net/hinic/hinic_pmd_flow.c | 5 ++--- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/net/hinic/base/hinic_pmd_hwdev.c b/drivers/net/hinic/base/hinic_pmd_hwdev.c index fc11ecd..cc42076 100644 --- a/drivers/net/hinic/base/hinic_pmd_hwdev.c +++ b/drivers/net/hinic/base/hinic_pmd_hwdev.c @@ -298,7 +298,7 @@ void dma_pool_destroy(struct dma_pool *pool) return; if (rte_atomic32_read(&pool->inuse) != 0) { - PMD_DRV_LOG(ERR, "Leak memory, dma_pool:%s, inuse_count:%d", + PMD_DRV_LOG(ERR, "Leak memory, dma_pool: %s, inuse_count: %d", pool->name, rte_atomic32_read(&pool->inuse)); } @@ -1068,7 +1068,7 @@ int hinic_l2nic_reset(struct hinic_hwdev *hwdev) watchdog_info->is_overflow, watchdog_info->stack_top, watchdog_info->stack_bottom); - PMD_DRV_LOG(ERR, "Mgmt pc: 0x%08x, lr: 0x%08x, cpsr:0x%08x", + PMD_DRV_LOG(ERR, "Mgmt pc: 0x%08x, lr: 0x%08x, cpsr: 0x%08x", watchdog_info->pc, watchdog_info->lr, watchdog_info->cpsr); PMD_DRV_LOG(ERR, "Mgmt register info"); diff --git a/drivers/net/hinic/base/hinic_pmd_hwif.c b/drivers/net/hinic/base/hinic_pmd_hwif.c index 0fced5b..63fba0d 100644 --- a/drivers/net/hinic/base/hinic_pmd_hwif.c +++ b/drivers/net/hinic/base/hinic_pmd_hwif.c @@ -450,8 +450,8 @@ static void hinic_parse_hwif_attr(struct hinic_hwdev *hwdev) struct hinic_hwif *hwif = hwdev->hwif; PMD_DRV_LOG(INFO, "Device %s hwif attribute:", hwdev->pcidev_hdl->name); - PMD_DRV_LOG(INFO, "func_idx:%u, p2p_idx:%u, pciintf_idx:%u, " - "vf_in_pf:%u, ppf_idx:%u, global_vf_id:%u, func_type:%u", + PMD_DRV_LOG(INFO, "func_idx: %u, p2p_idx: %u, pciintf_idx: %u, " + "vf_in_pf: %u, ppf_idx: %u, global_vf_id: %u, func_type: %u", hwif->attr.func_global_idx, hwif->attr.port_to_port_idx, hwif->attr.pci_intf_idx, hwif->attr.vf_in_pf, hwif->attr.ppf_idx, diff --git a/drivers/net/hinic/base/hinic_pmd_mgmt.c b/drivers/net/hinic/base/hinic_pmd_mgmt.c index 06c9b68..94bc45f 100644 --- a/drivers/net/hinic/base/hinic_pmd_mgmt.c +++ b/drivers/net/hinic/base/hinic_pmd_mgmt.c @@ -470,7 +470,7 @@ static void hinic_pf_to_mgmt_free(struct hinic_hwdev *hwdev) recv_msg->msg_len); *out_size = recv_msg->msg_len; } else { - PMD_DRV_LOG(ERR, "Mgmt rsp's msg len:%u overflow.", + PMD_DRV_LOG(ERR, "Mgmt rsp's msg len: %u overflow.", recv_msg->msg_len); err = -ERANGE; } diff --git a/drivers/net/hinic/base/hinic_pmd_niccfg.c b/drivers/net/hinic/base/hinic_pmd_niccfg.c index 0899a9c..c5663df 100644 --- a/drivers/net/hinic/base/hinic_pmd_niccfg.c +++ b/drivers/net/hinic/base/hinic_pmd_niccfg.c @@ -1610,8 +1610,7 @@ int hinic_set_link_status_follow(void *hwdev, return 0; if (status >= HINIC_LINK_FOLLOW_STATUS_MAX) { - PMD_DRV_LOG(ERR, - "Invalid link follow status: %d", status); + PMD_DRV_LOG(ERR, "Invalid link follow status: %d", status); return -EINVAL; } diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c index 239a78c..4091cf1 100644 --- a/drivers/net/hinic/hinic_pmd_ethdev.c +++ b/drivers/net/hinic/hinic_pmd_ethdev.c @@ -477,7 +477,7 @@ static int hinic_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, /* alloc rx_cqe and prepare rq_wqe */ rc = hinic_setup_rx_resources(rxq); if (rc) { - PMD_DRV_LOG(ERR, "Setup rxq[%d] rx_resources failed, dev_name:%s", + PMD_DRV_LOG(ERR, "Setup rxq[%d] rx_resources failed, dev_name: %s", queue_idx, dev->data->name); goto setup_rx_res_err; } @@ -1014,7 +1014,7 @@ static int hinic_dev_start(struct rte_eth_dev *dev) /* init txq and rxq context */ rc = hinic_init_qp_ctxts(nic_dev->hwdev); if (rc) { - PMD_DRV_LOG(ERR, "Initialize qp context failed, dev_name:%s", + PMD_DRV_LOG(ERR, "Initialize qp context failed, dev_name: %s", name); goto init_qp_fail; } @@ -1056,7 +1056,7 @@ static int hinic_dev_start(struct rte_eth_dev *dev) /* open physical port and start packet receiving */ rc = hinic_set_port_enable(nic_dev->hwdev, true); if (rc) { - PMD_DRV_LOG(ERR, "Enable physical port failed, dev_name:%s", + PMD_DRV_LOG(ERR, "Enable physical port failed, dev_name: %s", name); goto en_port_fail; } @@ -1203,7 +1203,7 @@ static void hinic_dev_stop(struct rte_eth_dev *dev) rc = hinic_set_vport_enable(nic_dev->hwdev, false); if (rc) - PMD_DRV_LOG(WARNING, "Disable vport failed, error: %d, dev_name:%s, port_id:%d", + PMD_DRV_LOG(WARNING, "Disable vport failed, error: %d, dev_name: %s, port_id: %d", rc, name, port_id); /* Clear recorded link status */ diff --git a/drivers/net/hinic/hinic_pmd_flow.c b/drivers/net/hinic/hinic_pmd_flow.c index c1f86ef..e620df0 100644 --- a/drivers/net/hinic/hinic_pmd_flow.c +++ b/drivers/net/hinic/hinic_pmd_flow.c @@ -2285,8 +2285,7 @@ static int hinic_add_del_ntuple_filter(struct rte_eth_dev *dev, case RTE_ETHER_TYPE_SLOW: (void)hinic_clear_fdir_tcam(nic_dev->hwdev, TCAM_PKT_LACP); - PMD_DRV_LOG(INFO, - "Del lacp tcam succeed"); + PMD_DRV_LOG(INFO, "Del lacp tcam succeed"); break; default: break; @@ -2935,7 +2934,7 @@ static int hinic_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, } break; default: - PMD_DRV_LOG(WARNING, "Filter type (%d) not supported", + PMD_DRV_LOG(WARNING, "Filter type (%d) is not supported", filter_type); ret = -EINVAL; break;