From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 83F30A04C2; Fri, 15 Nov 2019 10:07:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id ED414374E; Fri, 15 Nov 2019 10:07:03 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 5E3502C27 for ; Fri, 15 Nov 2019 10:07:02 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Nov 2019 01:07:01 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,307,1569308400"; d="scan'208";a="208075389" Received: from fyigit-mobl.ger.corp.intel.com (HELO [10.237.221.96]) ([10.237.221.96]) by orsmga003.jf.intel.com with ESMTP; 15 Nov 2019 01:06:58 -0800 To: Ye Xiaolong , Yahui Cao Cc: Qiming Yang , Wenzhuo Lu , dev@dpdk.org, Qi Zhang , Beilei Xing References: <20191113160921.90573-1-yahui.cao@intel.com> <20191114072305.GI66623@intel.com> From: Ferruh Yigit Openpgp: preference=signencrypt Autocrypt: addr=ferruh.yigit@intel.com; prefer-encrypt=mutual; keydata= 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 cA== Message-ID: <4640e8aa-c50a-887d-0dac-b07a4ffcdacd@intel.com> Date: Fri, 15 Nov 2019 09:06:58 +0000 MIME-Version: 1.0 In-Reply-To: <20191114072305.GI66623@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH] net/ice: fix FDIR programming status check issue 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" On 11/14/2019 7:23 AM, Ye Xiaolong wrote: > On 11/14, Yahui Cao wrote: >> To make sure if FDIR programming succeed or fail, legacy programming >> status descriptor WB format is enabled and FDIR queue irq is opened. >> >> Fixes: 84dc7a95a2d3 ("net/ice: enable flow director engine") >> Cc: beilei.xing@intel.com >> >> Signed-off-by: Yahui Cao >> Signed-off-by: Beilei Xing >> --- >> drivers/net/ice/ice_ethdev.c | 1 + >> drivers/net/ice/ice_rxtx.c | 93 +++++++++++++++++++++++++++++++++--- >> 2 files changed, 88 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c >> index 3b20ea423..27b0fbc83 100644 >> --- a/drivers/net/ice/ice_ethdev.c >> +++ b/drivers/net/ice/ice_ethdev.c >> @@ -2726,6 +2726,7 @@ ice_rxq_intr_setup(struct rte_eth_dev *dev) >> >> /* Enable FDIR MSIX interrupt */ >> if (pf->fdir.fdir_vsi) { >> + pf->fdir.fdir_vsi->nb_used_qps = 1; >> ice_vsi_queues_bind_intr(pf->fdir.fdir_vsi); >> ice_vsi_enable_queues_intr(pf->fdir.fdir_vsi); >> } >> diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c >> index 18c02979e..2db174456 100644 >> --- a/drivers/net/ice/ice_rxtx.c >> +++ b/drivers/net/ice/ice_rxtx.c >> @@ -535,7 +535,7 @@ ice_fdir_program_hw_rx_queue(struct ice_rx_queue *rxq) >> { >> struct ice_vsi *vsi = rxq->vsi; >> struct ice_hw *hw = ICE_VSI_TO_HW(vsi); >> - uint32_t rxdid = ICE_RXDID_COMMS_GENERIC; >> + uint32_t rxdid = ICE_RXDID_LEGACY_1; >> struct ice_rlan_ctx rx_ctx; >> enum ice_status err; >> uint32_t regval; >> @@ -550,9 +550,7 @@ ice_fdir_program_hw_rx_queue(struct ice_rx_queue *rxq) >> rx_ctx.dbuf = rxq->rx_buf_len >> ICE_RLAN_CTX_DBUF_S; >> rx_ctx.hbuf = rxq->rx_hdr_len >> ICE_RLAN_CTX_HBUF_S; >> rx_ctx.dtype = 0; /* No Header Split mode */ >> -#ifndef RTE_LIBRTE_ICE_16BYTE_RX_DESC >> rx_ctx.dsize = 1; /* 32B descriptors */ >> -#endif >> rx_ctx.rxmax = RTE_ETHER_MAX_LEN; >> /* TPH: Transaction Layer Packet (TLP) processing hints */ >> rx_ctx.tphrdesc_ena = 1; >> @@ -2077,7 +2075,7 @@ ice_fdir_setup_rx_resources(struct ice_pf *pf) >> } >> >> /* Allocate RX hardware ring descriptors. */ >> - ring_size = sizeof(union ice_rx_flex_desc) * ICE_FDIR_NUM_RX_DESC; >> + ring_size = sizeof(union ice_32byte_rx_desc) * ICE_FDIR_NUM_RX_DESC; >> ring_size = RTE_ALIGN(ring_size, ICE_DMA_MEM_ALIGN); >> >> rz = rte_eth_dma_zone_reserve(dev, "fdir_rx_ring", >> @@ -2096,7 +2094,7 @@ ice_fdir_setup_rx_resources(struct ice_pf *pf) >> >> rxq->rx_ring_dma = rz->iova; >> memset(rz->addr, 0, ICE_FDIR_NUM_RX_DESC * >> - sizeof(union ice_rx_flex_desc)); >> + sizeof(union ice_32byte_rx_desc)); >> rxq->rx_ring = (union ice_rx_flex_desc *)rz->addr; >> >> /* >> @@ -3607,12 +3605,81 @@ ice_set_default_ptype_table(struct rte_eth_dev *dev) >> ad->ptype_tbl[i] = ice_get_default_pkt_type(i); >> } >> >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_PROGID_S 1 >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_PROGID_M \ >> + (0x3UL << ICE_RX_PROG_STATUS_DESC_WB_QW1_PROGID_S) >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_PROG_ADD 0 >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_PROG_DEL 0x1 >> + >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_S 4 >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_M \ >> + (1 << ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_S) >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_PROF_S 5 >> +#define ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_PROF_M \ >> + (1 << ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_PROF_S) >> + >> +/* >> + * check the programming status descriptor in rx queue. >> + * done after Programming Flow Director is programmed on >> + * tx queue >> + */ >> +static inline int >> +ice_check_fdir_programming_status(struct ice_rx_queue *rxq) >> +{ >> + volatile union ice_32byte_rx_desc *rxdp; >> + uint64_t qword1; >> + uint32_t rx_status; >> + uint32_t error; >> + uint32_t id; >> + int ret = -EAGAIN; >> + >> + rxdp = (volatile union ice_32byte_rx_desc *) >> + (&rxq->rx_ring[rxq->rx_tail]); >> + qword1 = rte_le_to_cpu_64(rxdp->wb.qword1.status_error_len); >> + rx_status = (qword1 & ICE_RXD_QW1_STATUS_M) >> + >> ICE_RXD_QW1_STATUS_S; >> + >> + if (rx_status & (1 << ICE_RX_DESC_STATUS_DD_S)) { >> + ret = 0; >> + error = (qword1 & ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_M) >> >> + ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_S; >> + id = (qword1 & ICE_RX_PROG_STATUS_DESC_WB_QW1_PROGID_M) >> >> + ICE_RX_PROG_STATUS_DESC_WB_QW1_PROGID_S; >> + if (error) { >> + if (id == ICE_RX_PROG_STATUS_DESC_WB_QW1_PROG_ADD) >> + PMD_DRV_LOG(ERR, "Failed to add FDIR rule."); >> + else if (id == ICE_RX_PROG_STATUS_DESC_WB_QW1_PROG_DEL) >> + PMD_DRV_LOG(ERR, "Failed to remove FDIR rule."); >> + ret = -EINVAL; >> + goto err; >> + } >> + error = (qword1 & ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_PROF_M) >> >> + ICE_RX_PROG_STATUS_DESC_WB_QW1_FAIL_PROF_S; >> + if (error) { >> + PMD_DRV_LOG(ERR, "Failed to create FDIR profile."); >> + ret = -EINVAL; >> + } >> +err: >> + rxdp->wb.qword1.status_error_len = 0; >> + rxq->rx_tail++; >> + if (unlikely(rxq->rx_tail == rxq->nb_rx_desc)) >> + rxq->rx_tail = 0; >> + if (rxq->rx_tail == 0) >> + ICE_PCI_REG_WRITE(rxq->qrx_tail, rxq->nb_rx_desc - 1); >> + else >> + ICE_PCI_REG_WRITE(rxq->qrx_tail, rxq->rx_tail - 1); >> + } >> + >> + return ret; >> +} >> + >> #define ICE_FDIR_MAX_WAIT_US 10000 >> >> int >> ice_fdir_programming(struct ice_pf *pf, struct ice_fltr_desc *fdir_desc) >> { >> struct ice_tx_queue *txq = pf->fdir.txq; >> + struct ice_rx_queue *rxq = pf->fdir.rxq; >> volatile struct ice_fltr_desc *fdirdp; >> volatile struct ice_tx_desc *txdp; >> uint32_t td_cmd; >> @@ -3650,5 +3717,19 @@ ice_fdir_programming(struct ice_pf *pf, struct ice_fltr_desc *fdir_desc) >> return -ETIMEDOUT; >> } >> >> - return 0; >> + for (; i < ICE_FDIR_MAX_WAIT_US; i++) { >> + int ret; >> + >> + ret = ice_check_fdir_programming_status(rxq); >> + if (ret == -EAGAIN) >> + rte_delay_us(1); >> + else >> + return ret; >> + } >> + >> + PMD_DRV_LOG(ERR, >> + "Failed to program FDIR filter: programming status reported."); >> + return -ETIMEDOUT; >> + >> + >> } >> -- >> 2.17.1 >> > > Acked-by: Xiaolong Ye > > Applied to dpdk-next-net-intel, Thanks. > Dropped in next-net.