DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
@ 2018-05-01 18:10 Louis Luo
  2018-05-01 19:01 ` Thomas Monjalon
  2018-05-01 21:22 ` Louis Luo
  0 siblings, 2 replies; 9+ messages in thread
From: Louis Luo @ 2018-05-01 18:10 UTC (permalink / raw)
  To: yongwang; +Cc: dev, Louis Luo

Ethdev RX offloads API has changed since: commit ce17eddefc20
("ethdev: introduce Rx queue offloads API")

This patch adopts the new RX Offload API in vmxnet3 driver.

Signed-off-by: Louis Luo <llouis@vmware.com>

Acked-by: Yong Wang <yongwang@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_ethdev.c | 61 ++++++++++++++++++++++++++----------
 1 file changed, 45 insertions(+), 16 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 4568521..424cc30 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -42,6 +42,23 @@
 
 #define	VMXNET3_TX_MAX_SEG	UINT8_MAX
 
+#define VMXNET3_TX_OFFLOAD_CAP		\
+	(DEV_TX_OFFLOAD_VLAN_INSERT |	\
+	 DEV_TX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_TX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_TSO |	\
+	 DEV_TX_OFFLOAD_MULTI_SEGS)
+
+#define VMXNET3_RX_OFFLOAD_CAP		\
+	(DEV_RX_OFFLOAD_VLAN_STRIP |	\
+	 DEV_RX_OFFLOAD_SCATTER |	\
+	 DEV_RX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_RX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_LRO |	\
+	 DEV_RX_OFFLOAD_JUMBO_FRAME)
+
 static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev);
 static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev);
 static int vmxnet3_dev_configure(struct rte_eth_dev *dev);
@@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
 	const struct rte_memzone *mz;
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	size_t size;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
+	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
 
 	PMD_INIT_FUNC_TRACE();
 
+	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%" PRIx64
+			" do not match supported 0x%" PRIx64,
+			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
+	if ((tx_offloads & VMXNET3_TX_OFFLOAD_CAP) != tx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested TX offloads 0x%" PRIx64
+			" do not match supported 0x%" PRIx64,
+			tx_offloads, (uint64_t)VMXNET3_TX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
 	if (dev->data->nb_tx_queues > VMXNET3_MAX_TX_QUEUES ||
 	    dev->data->nb_rx_queues > VMXNET3_MAX_RX_QUEUES) {
 		PMD_INIT_LOG(ERR, "ERROR: Number of queues not supported");
@@ -567,6 +600,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	uint32_t mtu = dev->data->mtu;
 	Vmxnet3_DriverShared *shared = hw->shared;
 	Vmxnet3_DSDevRead *devRead = &shared->devRead;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 	uint32_t i;
 	int ret;
 
@@ -644,10 +678,10 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	devRead->rxFilterConf.rxMode = 0;
 
 	/* Setting up feature flags */
-	if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+	if (rx_offloads & DEV_RX_OFFLOAD_CHECKSUM)
 		devRead->misc.uptFeatures |= VMXNET3_F_RXCSUM;
 
-	if (dev->data->dev_conf.rxmode.enable_lro) {
+	if (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO) {
 		devRead->misc.uptFeatures |= VMXNET3_F_LRO;
 		devRead->misc.maxNumRxSG = 0;
 	}
@@ -1050,17 +1084,10 @@ vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused,
 		.nb_mtu_seg_max = VMXNET3_MAX_TXD_PER_PKT,
 	};
 
-	dev_info->rx_offload_capa =
-		DEV_RX_OFFLOAD_VLAN_STRIP |
-		DEV_RX_OFFLOAD_UDP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_LRO;
-
-	dev_info->tx_offload_capa =
-		DEV_TX_OFFLOAD_VLAN_INSERT |
-		DEV_TX_OFFLOAD_TCP_CKSUM |
-		DEV_TX_OFFLOAD_UDP_CKSUM |
-		DEV_TX_OFFLOAD_TCP_TSO;
+	dev_info->rx_offload_capa = VMXNET3_RX_OFFLOAD_CAP;
+	dev_info->rx_queue_offload_capa = 0;
+	dev_info->tx_offload_capa = VMXNET3_TX_OFFLOAD_CAP;
+	dev_info->tx_queue_offload_capa = 0;
 }
 
 static const uint32_t *
@@ -1154,8 +1181,9 @@ vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev)
 {
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	uint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
-	if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+	if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 		memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 	else
 		memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
@@ -1217,9 +1245,10 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	Vmxnet3_DSDevRead *devRead = &hw->shared->devRead;
 	uint32_t *vf_table = devRead->rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
 	if (mask & ETH_VLAN_STRIP_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_strip)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
 			devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
 		else
 			devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
@@ -1229,7 +1258,7 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	}
 
 	if (mask & ETH_VLAN_FILTER_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 			memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 		else
 			memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-05-01 18:10 [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api Louis Luo
@ 2018-05-01 19:01 ` Thomas Monjalon
  2018-05-01 21:22 ` Louis Luo
  1 sibling, 0 replies; 9+ messages in thread
From: Thomas Monjalon @ 2018-05-01 19:01 UTC (permalink / raw)
  To: Louis Luo; +Cc: dev, yongwang

01/05/2018 20:10, Louis Luo:
> Ethdev RX offloads API has changed since: commit ce17eddefc20
> ("ethdev: introduce Rx queue offloads API")
> 
> This patch adopts the new RX Offload API in vmxnet3 driver.
> 
> Signed-off-by: Louis Luo <llouis@vmware.com>
> 
> Acked-by: Yong Wang <yongwang@vmware.com>

It looks to be a v2.
Please use -v2 and --in-reply-to as explained in http://dpdk.org/dev#send

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-05-01 18:10 [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api Louis Luo
  2018-05-01 19:01 ` Thomas Monjalon
@ 2018-05-01 21:22 ` Louis Luo
  2018-05-02 10:41   ` Ferruh Yigit
  1 sibling, 1 reply; 9+ messages in thread
From: Louis Luo @ 2018-05-01 21:22 UTC (permalink / raw)
  To: yongwang; +Cc: dev, Louis Luo

Ethdev RX offloads API has changed since: commit ce17eddefc20
("ethdev: introduce Rx queue offloads API")

This patch adopts the new RX Offload API in vmxnet3 driver.

Signed-off-by: Louis Luo <llouis@vmware.com>

Acked-by: Yong Wang <yongwang@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_ethdev.c | 61 ++++++++++++++++++++++++++----------
 1 file changed, 45 insertions(+), 16 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 4568521..424cc30 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -42,6 +42,23 @@
 
 #define	VMXNET3_TX_MAX_SEG	UINT8_MAX
 
+#define VMXNET3_TX_OFFLOAD_CAP		\
+	(DEV_TX_OFFLOAD_VLAN_INSERT |	\
+	 DEV_TX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_TX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_TSO |	\
+	 DEV_TX_OFFLOAD_MULTI_SEGS)
+
+#define VMXNET3_RX_OFFLOAD_CAP		\
+	(DEV_RX_OFFLOAD_VLAN_STRIP |	\
+	 DEV_RX_OFFLOAD_SCATTER |	\
+	 DEV_RX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_RX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_LRO |	\
+	 DEV_RX_OFFLOAD_JUMBO_FRAME)
+
 static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev);
 static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev);
 static int vmxnet3_dev_configure(struct rte_eth_dev *dev);
@@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
 	const struct rte_memzone *mz;
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	size_t size;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
+	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
 
 	PMD_INIT_FUNC_TRACE();
 
+	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%" PRIx64
+			" do not match supported 0x%" PRIx64,
+			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
+	if ((tx_offloads & VMXNET3_TX_OFFLOAD_CAP) != tx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested TX offloads 0x%" PRIx64
+			" do not match supported 0x%" PRIx64,
+			tx_offloads, (uint64_t)VMXNET3_TX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
 	if (dev->data->nb_tx_queues > VMXNET3_MAX_TX_QUEUES ||
 	    dev->data->nb_rx_queues > VMXNET3_MAX_RX_QUEUES) {
 		PMD_INIT_LOG(ERR, "ERROR: Number of queues not supported");
@@ -567,6 +600,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	uint32_t mtu = dev->data->mtu;
 	Vmxnet3_DriverShared *shared = hw->shared;
 	Vmxnet3_DSDevRead *devRead = &shared->devRead;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 	uint32_t i;
 	int ret;
 
@@ -644,10 +678,10 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	devRead->rxFilterConf.rxMode = 0;
 
 	/* Setting up feature flags */
-	if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+	if (rx_offloads & DEV_RX_OFFLOAD_CHECKSUM)
 		devRead->misc.uptFeatures |= VMXNET3_F_RXCSUM;
 
-	if (dev->data->dev_conf.rxmode.enable_lro) {
+	if (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO) {
 		devRead->misc.uptFeatures |= VMXNET3_F_LRO;
 		devRead->misc.maxNumRxSG = 0;
 	}
@@ -1050,17 +1084,10 @@ vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused,
 		.nb_mtu_seg_max = VMXNET3_MAX_TXD_PER_PKT,
 	};
 
-	dev_info->rx_offload_capa =
-		DEV_RX_OFFLOAD_VLAN_STRIP |
-		DEV_RX_OFFLOAD_UDP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_LRO;
-
-	dev_info->tx_offload_capa =
-		DEV_TX_OFFLOAD_VLAN_INSERT |
-		DEV_TX_OFFLOAD_TCP_CKSUM |
-		DEV_TX_OFFLOAD_UDP_CKSUM |
-		DEV_TX_OFFLOAD_TCP_TSO;
+	dev_info->rx_offload_capa = VMXNET3_RX_OFFLOAD_CAP;
+	dev_info->rx_queue_offload_capa = 0;
+	dev_info->tx_offload_capa = VMXNET3_TX_OFFLOAD_CAP;
+	dev_info->tx_queue_offload_capa = 0;
 }
 
 static const uint32_t *
@@ -1154,8 +1181,9 @@ vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev)
 {
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	uint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
-	if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+	if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 		memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 	else
 		memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
@@ -1217,9 +1245,10 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	Vmxnet3_DSDevRead *devRead = &hw->shared->devRead;
 	uint32_t *vf_table = devRead->rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
 	if (mask & ETH_VLAN_STRIP_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_strip)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
 			devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
 		else
 			devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
@@ -1229,7 +1258,7 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	}
 
 	if (mask & ETH_VLAN_FILTER_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 			memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 		else
 			memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-05-01 21:22 ` Louis Luo
@ 2018-05-02 10:41   ` Ferruh Yigit
  0 siblings, 0 replies; 9+ messages in thread
From: Ferruh Yigit @ 2018-05-02 10:41 UTC (permalink / raw)
  To: Louis Luo, yongwang; +Cc: dev

On 5/1/2018 10:22 PM, Louis Luo wrote:
> Ethdev RX offloads API has changed since: commit ce17eddefc20
> ("ethdev: introduce Rx queue offloads API")
> 
> This patch adopts the new RX Offload API in vmxnet3 driver.
> 
> Signed-off-by: Louis Luo <llouis@vmware.com>
> Acked-by: Yong Wang <yongwang@vmware.com>

Applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-05-01 17:32   ` Louis Luo
@ 2018-05-02  9:16     ` Ferruh Yigit
  0 siblings, 0 replies; 9+ messages in thread
From: Ferruh Yigit @ 2018-05-02  9:16 UTC (permalink / raw)
  To: Louis Luo, Yong Wang; +Cc: dev

On 5/1/2018 6:32 PM, Louis Luo wrote:
> Hi Ferruh,
> 
> Thanks for your review! Initially I did use PRIx64 there, but checkpatch.sh always failed and complained about it for Camel case. So I just replaced it with %lx. I will change it back and resend the review.

Hi Louis,

You are right checkpatch complains about it as CamelCase syntax but that is OK
to ignore this warning for PRI... usage, in favor of fixing 32bits build.

> 
> Thanks,
> Louis
> 
> On 5/1/18, 7:58 AM, "Ferruh Yigit" <ferruh.yigit@intel.com> wrote:
> 
>     On 4/30/2018 11:20 PM, Louis Luo wrote:
>     > Ethdev RX offloads API has changed since: commit ce17eddefc20
>     > ("ethdev: introduce Rx queue offloads API")
>     > 
>     > This patch adopts the new RX Offload API in vmxnet3 driver.
>     >
>     > Signed-off-by: Louis Luo <llouis@vmware.com>
>     
>     Hi Louis,
>     
>     Overall patch looks good, only there is 32bits build error because of logging,
>     more details below.
>     
>     Can you please send a new version of the patch, keeping Yong's ack.
>     
>     <...>
>     
>     > @@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>     >  	const struct rte_memzone *mz;
>     >  	struct vmxnet3_hw *hw = dev->data->dev_private;
>     >  	size_t size;
>     > +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
>     > +	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
>     >  
>     >  	PMD_INIT_FUNC_TRACE();
>     >  
>     > +	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
>     > +		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%lx"
>     > +			" do not match supported 0x%lx\n",
>     > +			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
>     
>     %lx usage causing build error with 32bit build [1], please prefer PRIx64.
>     
>     [1]
>      argument of type "uint64_t={__uint64_t={unsigned long long}}" is incompatible
>     with format "%lx", expecting argument of type "unsigned long"
>     
>     <...>
>     
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-05-01 14:58 ` Ferruh Yigit
@ 2018-05-01 17:32   ` Louis Luo
  2018-05-02  9:16     ` Ferruh Yigit
  0 siblings, 1 reply; 9+ messages in thread
From: Louis Luo @ 2018-05-01 17:32 UTC (permalink / raw)
  To: Ferruh Yigit, Yong Wang; +Cc: dev

Hi Ferruh,

Thanks for your review! Initially I did use PRIx64 there, but checkpatch.sh always failed and complained about it for Camel case. So I just replaced it with %lx. I will change it back and resend the review.

Thanks,
Louis

On 5/1/18, 7:58 AM, "Ferruh Yigit" <ferruh.yigit@intel.com> wrote:

    On 4/30/2018 11:20 PM, Louis Luo wrote:
    > Ethdev RX offloads API has changed since: commit ce17eddefc20
    > ("ethdev: introduce Rx queue offloads API")
    > 
    > This patch adopts the new RX Offload API in vmxnet3 driver.
    >
    > Signed-off-by: Louis Luo <llouis@vmware.com>
    
    Hi Louis,
    
    Overall patch looks good, only there is 32bits build error because of logging,
    more details below.
    
    Can you please send a new version of the patch, keeping Yong's ack.
    
    <...>
    
    > @@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
    >  	const struct rte_memzone *mz;
    >  	struct vmxnet3_hw *hw = dev->data->dev_private;
    >  	size_t size;
    > +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
    > +	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
    >  
    >  	PMD_INIT_FUNC_TRACE();
    >  
    > +	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
    > +		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%lx"
    > +			" do not match supported 0x%lx\n",
    > +			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
    
    %lx usage causing build error with 32bit build [1], please prefer PRIx64.
    
    [1]
     argument of type "uint64_t={__uint64_t={unsigned long long}}" is incompatible
    with format "%lx", expecting argument of type "unsigned long"
    
    <...>
    


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-04-30 22:20 Louis Luo
  2018-04-30 22:50 ` Yong Wang
@ 2018-05-01 14:58 ` Ferruh Yigit
  2018-05-01 17:32   ` Louis Luo
  1 sibling, 1 reply; 9+ messages in thread
From: Ferruh Yigit @ 2018-05-01 14:58 UTC (permalink / raw)
  To: Louis Luo, yongwang; +Cc: dev

On 4/30/2018 11:20 PM, Louis Luo wrote:
> Ethdev RX offloads API has changed since: commit ce17eddefc20
> ("ethdev: introduce Rx queue offloads API")
> 
> This patch adopts the new RX Offload API in vmxnet3 driver.
>
> Signed-off-by: Louis Luo <llouis@vmware.com>

Hi Louis,

Overall patch looks good, only there is 32bits build error because of logging,
more details below.

Can you please send a new version of the patch, keeping Yong's ack.

<...>

> @@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>  	const struct rte_memzone *mz;
>  	struct vmxnet3_hw *hw = dev->data->dev_private;
>  	size_t size;
> +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
> +	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
>  
>  	PMD_INIT_FUNC_TRACE();
>  
> +	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
> +		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%lx"
> +			" do not match supported 0x%lx\n",
> +			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);

%lx usage causing build error with 32bit build [1], please prefer PRIx64.

[1]
 argument of type "uint64_t={__uint64_t={unsigned long long}}" is incompatible
with format "%lx", expecting argument of type "unsigned long"

<...>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
  2018-04-30 22:20 Louis Luo
@ 2018-04-30 22:50 ` Yong Wang
  2018-05-01 14:58 ` Ferruh Yigit
  1 sibling, 0 replies; 9+ messages in thread
From: Yong Wang @ 2018-04-30 22:50 UTC (permalink / raw)
  To: Louis Luo; +Cc: dev, Louis Luo

> -----Original Message-----
> From: Louis Luo [mailto:llouis@vmware.com]
> Sent: Monday, April 30, 2018 3:21 PM
> To: Yong Wang <yongwang@vmware.com>
> Cc: dev@dpdk.org; Louis Luo <llouis@vmware.com>
> Subject: [PATCH] net/vmxnet3: convert to new rx offload api
> 
> Ethdev RX offloads API has changed since: commit ce17eddefc20
> ("ethdev: introduce Rx queue offloads API")
> 
> This patch adopts the new RX Offload API in vmxnet3 driver.
> 
> Signed-off-by: Louis Luo <llouis@vmware.com>

Acked-by: Yong Wang <yongwang@vmware.com>

> ---
>  drivers/net/vmxnet3/vmxnet3_ethdev.c | 61
> ++++++++++++++++++++++++++----------
>  1 file changed, 45 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index 4568521..d9d5bda 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -42,6 +42,23 @@
> 
>  #define	VMXNET3_TX_MAX_SEG	UINT8_MAX
> 
> +#define VMXNET3_TX_OFFLOAD_CAP		\
> +	(DEV_TX_OFFLOAD_VLAN_INSERT |	\
> +	 DEV_TX_OFFLOAD_IPV4_CKSUM |	\
> +	 DEV_TX_OFFLOAD_TCP_CKSUM |	\
> +	 DEV_TX_OFFLOAD_UDP_CKSUM |	\
> +	 DEV_TX_OFFLOAD_TCP_TSO |	\
> +	 DEV_TX_OFFLOAD_MULTI_SEGS)
> +
> +#define VMXNET3_RX_OFFLOAD_CAP		\
> +	(DEV_RX_OFFLOAD_VLAN_STRIP |	\
> +	 DEV_RX_OFFLOAD_SCATTER |	\
> +	 DEV_RX_OFFLOAD_IPV4_CKSUM |	\
> +	 DEV_RX_OFFLOAD_UDP_CKSUM |	\
> +	 DEV_RX_OFFLOAD_TCP_CKSUM |	\
> +	 DEV_RX_OFFLOAD_TCP_LRO |	\
> +	 DEV_RX_OFFLOAD_JUMBO_FRAME)
> +
>  static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev);
>  static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev);
>  static int vmxnet3_dev_configure(struct rte_eth_dev *dev);
> @@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
>  	const struct rte_memzone *mz;
>  	struct vmxnet3_hw *hw = dev->data->dev_private;
>  	size_t size;
> +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
> +	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
> 
>  	PMD_INIT_FUNC_TRACE();
> 
> +	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
> +		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%lx"
> +			" do not match supported 0x%lx\n",
> +			rx_offloads,
> (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
> +		return -ENOTSUP;
> +	}
> +
> +	if ((tx_offloads & VMXNET3_TX_OFFLOAD_CAP) != tx_offloads) {
> +		RTE_LOG(ERR, PMD, "Requested TX offloads 0x%lx"
> +			" do not match supported 0x%lx\n",
> +			tx_offloads, (uint64_t)VMXNET3_TX_OFFLOAD_CAP);
> +		return -ENOTSUP;
> +	}
> +
>  	if (dev->data->nb_tx_queues > VMXNET3_MAX_TX_QUEUES ||
>  	    dev->data->nb_rx_queues > VMXNET3_MAX_RX_QUEUES) {
>  		PMD_INIT_LOG(ERR, "ERROR: Number of queues not
> supported");
> @@ -567,6 +600,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev
> *dev)
>  	uint32_t mtu = dev->data->mtu;
>  	Vmxnet3_DriverShared *shared = hw->shared;
>  	Vmxnet3_DSDevRead *devRead = &shared->devRead;
> +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
>  	uint32_t i;
>  	int ret;
> 
> @@ -644,10 +678,10 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev
> *dev)
>  	devRead->rxFilterConf.rxMode = 0;
> 
>  	/* Setting up feature flags */
> -	if (dev->data->dev_conf.rxmode.hw_ip_checksum)
> +	if (rx_offloads & DEV_RX_OFFLOAD_CHECKSUM)
>  		devRead->misc.uptFeatures |= VMXNET3_F_RXCSUM;
> 
> -	if (dev->data->dev_conf.rxmode.enable_lro) {
> +	if (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO) {
>  		devRead->misc.uptFeatures |= VMXNET3_F_LRO;
>  		devRead->misc.maxNumRxSG = 0;
>  	}
> @@ -1050,17 +1084,10 @@ vmxnet3_dev_info_get(struct rte_eth_dev *dev
> __rte_unused,
>  		.nb_mtu_seg_max = VMXNET3_MAX_TXD_PER_PKT,
>  	};
> 
> -	dev_info->rx_offload_capa =
> -		DEV_RX_OFFLOAD_VLAN_STRIP |
> -		DEV_RX_OFFLOAD_UDP_CKSUM |
> -		DEV_RX_OFFLOAD_TCP_CKSUM |
> -		DEV_RX_OFFLOAD_TCP_LRO;
> -
> -	dev_info->tx_offload_capa =
> -		DEV_TX_OFFLOAD_VLAN_INSERT |
> -		DEV_TX_OFFLOAD_TCP_CKSUM |
> -		DEV_TX_OFFLOAD_UDP_CKSUM |
> -		DEV_TX_OFFLOAD_TCP_TSO;
> +	dev_info->rx_offload_capa = VMXNET3_RX_OFFLOAD_CAP;
> +	dev_info->rx_queue_offload_capa = 0;
> +	dev_info->tx_offload_capa = VMXNET3_TX_OFFLOAD_CAP;
> +	dev_info->tx_queue_offload_capa = 0;
>  }
> 
>  static const uint32_t *
> @@ -1154,8 +1181,9 @@ vmxnet3_dev_promiscuous_disable(struct
> rte_eth_dev *dev)
>  {
>  	struct vmxnet3_hw *hw = dev->data->dev_private;
>  	uint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;
> +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
> 
> -	if (dev->data->dev_conf.rxmode.hw_vlan_filter)
> +	if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
>  		memcpy(vf_table, hw->shadow_vfta,
> VMXNET3_VFT_TABLE_SIZE);
>  	else
>  		memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
> @@ -1217,9 +1245,10 @@ vmxnet3_dev_vlan_offload_set(struct
> rte_eth_dev *dev, int mask)
>  	struct vmxnet3_hw *hw = dev->data->dev_private;
>  	Vmxnet3_DSDevRead *devRead = &hw->shared->devRead;
>  	uint32_t *vf_table = devRead->rxFilterConf.vfTable;
> +	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
> 
>  	if (mask & ETH_VLAN_STRIP_MASK) {
> -		if (dev->data->dev_conf.rxmode.hw_vlan_strip)
> +		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
>  			devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
>  		else
>  			devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
> @@ -1229,7 +1258,7 @@ vmxnet3_dev_vlan_offload_set(struct
> rte_eth_dev *dev, int mask)
>  	}
> 
>  	if (mask & ETH_VLAN_FILTER_MASK) {
> -		if (dev->data->dev_conf.rxmode.hw_vlan_filter)
> +		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
>  			memcpy(vf_table, hw->shadow_vfta,
> VMXNET3_VFT_TABLE_SIZE);
>  		else
>  			memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
> --
> 2.7.4


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api
@ 2018-04-30 22:20 Louis Luo
  2018-04-30 22:50 ` Yong Wang
  2018-05-01 14:58 ` Ferruh Yigit
  0 siblings, 2 replies; 9+ messages in thread
From: Louis Luo @ 2018-04-30 22:20 UTC (permalink / raw)
  To: yongwang; +Cc: dev, Louis Luo

Ethdev RX offloads API has changed since: commit ce17eddefc20
("ethdev: introduce Rx queue offloads API")

This patch adopts the new RX Offload API in vmxnet3 driver.

Signed-off-by: Louis Luo <llouis@vmware.com>
---
 drivers/net/vmxnet3/vmxnet3_ethdev.c | 61 ++++++++++++++++++++++++++----------
 1 file changed, 45 insertions(+), 16 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 4568521..d9d5bda 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -42,6 +42,23 @@
 
 #define	VMXNET3_TX_MAX_SEG	UINT8_MAX
 
+#define VMXNET3_TX_OFFLOAD_CAP		\
+	(DEV_TX_OFFLOAD_VLAN_INSERT |	\
+	 DEV_TX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_TX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_TX_OFFLOAD_TCP_TSO |	\
+	 DEV_TX_OFFLOAD_MULTI_SEGS)
+
+#define VMXNET3_RX_OFFLOAD_CAP		\
+	(DEV_RX_OFFLOAD_VLAN_STRIP |	\
+	 DEV_RX_OFFLOAD_SCATTER |	\
+	 DEV_RX_OFFLOAD_IPV4_CKSUM |	\
+	 DEV_RX_OFFLOAD_UDP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_CKSUM |	\
+	 DEV_RX_OFFLOAD_TCP_LRO |	\
+	 DEV_RX_OFFLOAD_JUMBO_FRAME)
+
 static int eth_vmxnet3_dev_init(struct rte_eth_dev *eth_dev);
 static int eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev);
 static int vmxnet3_dev_configure(struct rte_eth_dev *dev);
@@ -376,9 +393,25 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev)
 	const struct rte_memzone *mz;
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	size_t size;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
+	uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads;
 
 	PMD_INIT_FUNC_TRACE();
 
+	if ((rx_offloads & VMXNET3_RX_OFFLOAD_CAP) != rx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested RX offloads 0x%lx"
+			" do not match supported 0x%lx\n",
+			rx_offloads, (uint64_t)VMXNET3_RX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
+	if ((tx_offloads & VMXNET3_TX_OFFLOAD_CAP) != tx_offloads) {
+		RTE_LOG(ERR, PMD, "Requested TX offloads 0x%lx"
+			" do not match supported 0x%lx\n",
+			tx_offloads, (uint64_t)VMXNET3_TX_OFFLOAD_CAP);
+		return -ENOTSUP;
+	}
+
 	if (dev->data->nb_tx_queues > VMXNET3_MAX_TX_QUEUES ||
 	    dev->data->nb_rx_queues > VMXNET3_MAX_RX_QUEUES) {
 		PMD_INIT_LOG(ERR, "ERROR: Number of queues not supported");
@@ -567,6 +600,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	uint32_t mtu = dev->data->mtu;
 	Vmxnet3_DriverShared *shared = hw->shared;
 	Vmxnet3_DSDevRead *devRead = &shared->devRead;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 	uint32_t i;
 	int ret;
 
@@ -644,10 +678,10 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
 	devRead->rxFilterConf.rxMode = 0;
 
 	/* Setting up feature flags */
-	if (dev->data->dev_conf.rxmode.hw_ip_checksum)
+	if (rx_offloads & DEV_RX_OFFLOAD_CHECKSUM)
 		devRead->misc.uptFeatures |= VMXNET3_F_RXCSUM;
 
-	if (dev->data->dev_conf.rxmode.enable_lro) {
+	if (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO) {
 		devRead->misc.uptFeatures |= VMXNET3_F_LRO;
 		devRead->misc.maxNumRxSG = 0;
 	}
@@ -1050,17 +1084,10 @@ vmxnet3_dev_info_get(struct rte_eth_dev *dev __rte_unused,
 		.nb_mtu_seg_max = VMXNET3_MAX_TXD_PER_PKT,
 	};
 
-	dev_info->rx_offload_capa =
-		DEV_RX_OFFLOAD_VLAN_STRIP |
-		DEV_RX_OFFLOAD_UDP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_CKSUM |
-		DEV_RX_OFFLOAD_TCP_LRO;
-
-	dev_info->tx_offload_capa =
-		DEV_TX_OFFLOAD_VLAN_INSERT |
-		DEV_TX_OFFLOAD_TCP_CKSUM |
-		DEV_TX_OFFLOAD_UDP_CKSUM |
-		DEV_TX_OFFLOAD_TCP_TSO;
+	dev_info->rx_offload_capa = VMXNET3_RX_OFFLOAD_CAP;
+	dev_info->rx_queue_offload_capa = 0;
+	dev_info->tx_offload_capa = VMXNET3_TX_OFFLOAD_CAP;
+	dev_info->tx_queue_offload_capa = 0;
 }
 
 static const uint32_t *
@@ -1154,8 +1181,9 @@ vmxnet3_dev_promiscuous_disable(struct rte_eth_dev *dev)
 {
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	uint32_t *vf_table = hw->shared->devRead.rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
-	if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+	if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 		memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 	else
 		memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
@@ -1217,9 +1245,10 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	struct vmxnet3_hw *hw = dev->data->dev_private;
 	Vmxnet3_DSDevRead *devRead = &hw->shared->devRead;
 	uint32_t *vf_table = devRead->rxFilterConf.vfTable;
+	uint64_t rx_offloads = dev->data->dev_conf.rxmode.offloads;
 
 	if (mask & ETH_VLAN_STRIP_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_strip)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
 			devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
 		else
 			devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
@@ -1229,7 +1258,7 @@ vmxnet3_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	}
 
 	if (mask & ETH_VLAN_FILTER_MASK) {
-		if (dev->data->dev_conf.rxmode.hw_vlan_filter)
+		if (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
 			memcpy(vf_table, hw->shadow_vfta, VMXNET3_VFT_TABLE_SIZE);
 		else
 			memset(vf_table, 0xff, VMXNET3_VFT_TABLE_SIZE);
-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-05-02 10:41 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-01 18:10 [dpdk-dev] [PATCH] net/vmxnet3: convert to new rx offload api Louis Luo
2018-05-01 19:01 ` Thomas Monjalon
2018-05-01 21:22 ` Louis Luo
2018-05-02 10:41   ` Ferruh Yigit
  -- strict thread matches above, loose matches on Subject: below --
2018-04-30 22:20 Louis Luo
2018-04-30 22:50 ` Yong Wang
2018-05-01 14:58 ` Ferruh Yigit
2018-05-01 17:32   ` Louis Luo
2018-05-02  9:16     ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).