From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 833602A66 for ; Mon, 19 Mar 2018 04:54:50 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Mar 2018 20:54:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,328,1517904000"; d="scan'208";a="212514030" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga006.fm.intel.com with ESMTP; 18 Mar 2018 20:54:49 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 18 Mar 2018 20:54:48 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.235]) by shsmsx102.ccr.corp.intel.com ([169.254.2.80]) with mapi id 14.03.0319.002; Mon, 19 Mar 2018 11:54:46 +0800 From: "Zhang, Qi Z" To: "Dai, Wei" , "Wang, Xiao W" CC: "dev@dpdk.org" Thread-Topic: [PATCH] net/fm10k: convert to new Rx/Tx offloads API Thread-Index: AQHTse11Kqqg/PuRQEGztLNeLPxzSaPXBPVA Date: Mon, 19 Mar 2018 03:54:46 +0000 Message-ID: <039ED4275CED7440929022BC67E706115316F4EA@SHSMSX103.ccr.corp.intel.com> References: <20180302141105.4954-1-wei.dai@intel.com> In-Reply-To: <20180302141105.4954-1-wei.dai@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] net/fm10k: convert to new Rx/Tx offloads API 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: , X-List-Received-Date: Mon, 19 Mar 2018 03:54:51 -0000 Hi Daiwei: > -----Original Message----- > From: Dai, Wei > Sent: Friday, March 2, 2018 10:11 PM > To: Zhang, Qi Z ; Wang, Xiao W > > Cc: dev@dpdk.org; Dai, Wei > Subject: [PATCH] net/fm10k: convert to new Rx/Tx offloads API >=20 > Ethdev Rx offloads API has changed since: > commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") Ethdev Tx > offloads API has changed since: > commit cba7f53b717d ("ethdev: introduce Tx queue offloads API") This > commit support the new Rx and Tx offloads API. >=20 > Signed-off-by: Wei Dai > --- > drivers/net/fm10k/fm10k.h | 7 +++++++ > drivers/net/fm10k/fm10k_ethdev.c | 33 > ++++++++++++++++++++++++--------- > drivers/net/fm10k/fm10k_rxtx_vec.c | 6 +++--- > 3 files changed, 34 insertions(+), 12 deletions(-) >=20 > diff --git a/drivers/net/fm10k/fm10k.h b/drivers/net/fm10k/fm10k.h index > 30dad3e..57bd533 100644 > --- a/drivers/net/fm10k/fm10k.h > +++ b/drivers/net/fm10k/fm10k.h > @@ -108,6 +108,11 @@ >=20 > #define FM10K_SIMPLE_TX_FLAG > ((uint32_t)ETH_TXQ_FLAGS_NOMULTSEGS | \ > ETH_TXQ_FLAGS_NOOFFLOADS) > +#define FM10K_SIMPLE_TX_OFFLOADS > ((uint64_t)(DEV_TX_OFFLOAD_MULTI_SEGS | \ > + DEV_TX_OFFLOAD_VLAN_INSERT | \ > + DEV_TX_OFFLOAD_SCTP_CKSUM | \ > + DEV_TX_OFFLOAD_UDP_CKSUM | \ > + DEV_TX_OFFLOAD_TCP_CKSUM)) >=20 > struct fm10k_macvlan_filter_info { > uint16_t vlan_num; /* Total VLAN number */ > @@ -180,6 +185,7 @@ struct fm10k_rx_queue { > uint8_t drop_en; > uint8_t rx_deferred_start; /* don't start this queue in dev start. */ > uint16_t rx_ftag_en; /* indicates FTAG RX supported */ > + uint64_t offloads; /* offloads of DEV_RX_OFFLOAD_* */ > }; >=20 > /* > @@ -212,6 +218,7 @@ struct fm10k_tx_queue { > uint16_t next_dd; /* Next pos to check DD flag */ > volatile uint32_t *tail_ptr; > uint32_t txq_flags; /* Holds flags for this TXq */ > + uint64_t offloads; /* Offloads of DEV_TX_OFFLOAD_* */ > uint16_t nb_desc; > uint16_t port_id; > uint8_t tx_deferred_start; /** don't start this queue in dev start. */ = diff > --git a/drivers/net/fm10k/fm10k_ethdev.c > b/drivers/net/fm10k/fm10k_ethdev.c > index 9423761..5105874 100644 > --- a/drivers/net/fm10k/fm10k_ethdev.c > +++ b/drivers/net/fm10k/fm10k_ethdev.c > @@ -444,7 +444,7 @@ fm10k_dev_configure(struct rte_eth_dev *dev) >=20 > PMD_INIT_FUNC_TRACE(); >=20 > - if (dev->data->dev_conf.rxmode.hw_strip_crc =3D=3D 0) > + if (dev->data->dev_conf.rxmode.offloads & > DEV_RX_OFFLOAD_CRC_STRIP) > PMD_INIT_LOG(WARNING, "fm10k always strip CRC"); > /* multipe queue mode checking */ > ret =3D fm10k_check_mq_mode(dev); > @@ -454,6 +454,8 @@ fm10k_dev_configure(struct rte_eth_dev *dev) > return ret; > } >=20 > + dev->data->scattered_rx =3D 0; > + > return 0; > } >=20 > @@ -756,7 +758,7 @@ fm10k_dev_rx_init(struct rte_eth_dev *dev) > /* It adds dual VLAN length for supporting dual VLAN */ > if ((dev->data->dev_conf.rxmode.max_rx_pkt_len + > 2 * FM10K_VLAN_TAG_SIZE) > buf_size || > - dev->data->dev_conf.rxmode.enable_scatter) { > + rxq->offloads & DEV_RX_OFFLOAD_SCATTER) { > uint32_t reg; > dev->data->scattered_rx =3D 1; > reg =3D FM10K_READ_REG(hw, FM10K_SRRCTL(i)); @@ > -1389,11 +1391,17 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev, > dev_info->vmdq_queue_base =3D 0; > dev_info->max_vmdq_pools =3D ETH_32_POOLS; > dev_info->vmdq_queue_num =3D FM10K_MAX_QUEUES_PF; > + dev_info->rx_queue_offload_capa =3D DEV_RX_OFFLOAD_SCATTER; > dev_info->rx_offload_capa =3D > - DEV_RX_OFFLOAD_VLAN_STRIP | > - DEV_RX_OFFLOAD_IPV4_CKSUM | > - DEV_RX_OFFLOAD_UDP_CKSUM | > - DEV_RX_OFFLOAD_TCP_CKSUM; > + DEV_RX_OFFLOAD_VLAN_STRIP | > + DEV_RX_OFFLOAD_VLAN_FILTER | > + DEV_RX_OFFLOAD_IPV4_CKSUM | > + DEV_RX_OFFLOAD_UDP_CKSUM | > + DEV_RX_OFFLOAD_TCP_CKSUM | > + DEV_RX_OFFLOAD_JUMBO_FRAME | > + DEV_RX_OFFLOAD_CRC_STRIP | > + DEV_RX_OFFLOAD_SCATTER; > + dev_info->tx_queue_offload_capa =3D 0; > dev_info->tx_offload_capa =3D > DEV_TX_OFFLOAD_VLAN_INSERT | > DEV_TX_OFFLOAD_IPV4_CKSUM | > @@ -1412,6 +1420,7 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev, > }, > .rx_free_thresh =3D FM10K_RX_FREE_THRESH_DEFAULT(0), > .rx_drop_en =3D 0, > + .offloads =3D 0, > }; >=20 > dev_info->default_txconf =3D (struct rte_eth_txconf) { @@ -1423,6 > +1432,7 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev, > .tx_free_thresh =3D FM10K_TX_FREE_THRESH_DEFAULT(0), > .tx_rs_thresh =3D FM10K_TX_RS_THRESH_DEFAULT(0), > .txq_flags =3D FM10K_SIMPLE_TX_FLAG, > + .offloads =3D 0, > }; >=20 > dev_info->rx_desc_lim =3D (struct rte_eth_desc_lim) { @@ -1571,19 > +1581,22 @@ static int fm10k_vlan_offload_set(struct rte_eth_dev *dev, > int mask) { > if (mask & ETH_VLAN_STRIP_MASK) { > - if (!dev->data->dev_conf.rxmode.hw_vlan_strip) > + if (!(dev->data->dev_conf.rxmode.offloads & > + DEV_RX_OFFLOAD_VLAN_STRIP)) > PMD_INIT_LOG(ERR, "VLAN stripping is " > "always on in fm10k"); > } >=20 > if (mask & ETH_VLAN_EXTEND_MASK) { > - if (dev->data->dev_conf.rxmode.hw_vlan_extend) > + if (dev->data->dev_conf.rxmode.offloads & > + DEV_RX_OFFLOAD_VLAN_EXTEND) Seems DEV_RX_OFFLOAD_VLAN_EXTEND is missed in fm10k_dev_infos_get? > PMD_INIT_LOG(ERR, "VLAN QinQ is not " > "supported in fm10k"); > } >=20 > if (mask & ETH_VLAN_FILTER_MASK) { > - if (!dev->data->dev_conf.rxmode.hw_vlan_filter) > + if (!(dev->data->dev_conf.rxmode.offloads & > + DEV_RX_OFFLOAD_VLAN_FILTER)) > PMD_INIT_LOG(ERR, "VLAN filter is always on in fm10k"); > } >=20 > @@ -1879,6 +1892,7 @@ fm10k_rx_queue_setup(struct rte_eth_dev *dev, > uint16_t queue_id, > fm10k_rxq_vec_setup(q); >=20 > dev->data->rx_queues[queue_id] =3D q; > + q->offloads =3D conf->offloads; > return 0; > } >=20 > @@ -1995,6 +2009,7 @@ fm10k_tx_queue_setup(struct rte_eth_dev *dev, > uint16_t queue_id, > q->port_id =3D dev->data->port_id; > q->queue_id =3D queue_id; > q->txq_flags =3D conf->txq_flags; > + q->offloads =3D conf->offloads; > q->ops =3D &def_txq_ops; > q->tail_ptr =3D (volatile uint32_t *) > &((uint32_t *)hw->hw_addr)[FM10K_TDT(queue_id)]; > diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c > b/drivers/net/fm10k/fm10k_rxtx_vec.c > index 498a178..e6dba04 100644 > --- a/drivers/net/fm10k/fm10k_rxtx_vec.c > +++ b/drivers/net/fm10k/fm10k_rxtx_vec.c > @@ -210,7 +210,7 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev > *dev) >=20 > #ifndef RTE_FM10K_RX_OLFLAGS_ENABLE > /* whithout rx ol_flags, no VP flag report */ > - if (rxmode->hw_vlan_extend !=3D 0) > + if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_EXTEND) > return -1; > #endif >=20 > @@ -219,7 +219,7 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev > *dev) > return -1; >=20 > /* no header split support */ > - if (rxmode->header_split =3D=3D 1) > + if (rxmode->offloads & DEV_RX_OFFLOAD_HEADER_SPLIT) DEV_RX_OFFLOAD_HEADER_SPLIT also missed in fm10k_dev_infos_get? > return -1; >=20 > return 0; > @@ -695,7 +695,7 @@ int __attribute__((cold)) > fm10k_tx_vec_condition_check(struct fm10k_tx_queue *txq) { > /* Vector TX can't offload any features yet */ > - if ((txq->txq_flags & FM10K_SIMPLE_TX_FLAG) !=3D > FM10K_SIMPLE_TX_FLAG) > + if (txq->offloads & FM10K_SIMPLE_TX_OFFLOADS) > return -1; Is this correct? an offload not include in FM10K_SIMPLE_TX_OFFLOADS will al= so fail this branch and pass check, right? The logic can be implemented like below: #define FM10K_VEC_TX_OFFLOAD_SUPPORT xxx | xxx ...=20 If (txq->offloads & FM10K_VEC_TX_OFFLOAD_SUPPORT !=3D txq->offload) return -1 Regards Qi >=20 > if (txq->tx_ftag_en) > -- > 2.9.4