net/null: fix multi-process rx and tx

Message ID 20190929024141.30443-1-yasufum.o@gmail.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/null: fix multi-process rx and tx |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-dpdk_compile_spdk success Compile Testing PASS
ci/iol-dpdk_compile_ovs success Compile Testing PASS
ci/iol-dpdk_compile success Compile Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS

Commit Message

Yasufumi Ogawa Sept. 29, 2019, 2:41 a.m. UTC
  Packet processing in secondary process cannot work because rx_pkt_burst
and tx_pkt_burst in eth_dev are not initialized while probing device.
This patch is to the initialization.

Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
---
 drivers/net/null/rte_eth_null.c | 7 +++++++
 1 file changed, 7 insertions(+)
  

Comments

Ferruh Yigit Oct. 1, 2019, 4 p.m. UTC | #1
On 9/29/2019 3:41 AM, Yasufumi Ogawa wrote:
> Packet processing in secondary process cannot work because rx_pkt_burst
> and tx_pkt_burst in eth_dev are not initialized while probing device.
> This patch is to the initialization.
> 
> Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
> ---
>  drivers/net/null/rte_eth_null.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
> index 0c60d241a..5a2010e3e 100644
> --- a/drivers/net/null/rte_eth_null.c
> +++ b/drivers/net/null/rte_eth_null.c
> @@ -586,6 +586,13 @@ rte_pmd_null_probe(struct rte_vdev_device *dev)
>  		/* TODO: request info from primary to set up Rx and Tx */
>  		eth_dev->dev_ops = &ops;
>  		eth_dev->device = &dev->device;
> +		if (packet_copy) {
> +			eth_dev->rx_pkt_burst = eth_null_copy_rx;
> +			eth_dev->tx_pkt_burst = eth_null_copy_tx;
> +		} else {
> +			eth_dev->rx_pkt_burst = eth_null_rx;
> +			eth_dev->tx_pkt_burst = eth_null_tx;
> +		}
>  		rte_eth_dev_probing_finish(eth_dev);
>  		return 0;
>  	}
> 


Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

But this seems the issue for other virtual PMDs too, @Yasufumi, can you please
check others too if you have any bandwidth for it?


I assume this is missing for a long time because there is not easy way to test
them in secondary process, testpmd doesn't support the multi process. cc'ed
testpmd and multi process maintainers, what do you think about adding multi
process support to testpmd?


I tested with "examples/multi_process/symmetric_mp" sample app, it required
fixing with null pmd:
1- Requested offload config was not supported by null pmd
2- promics_enable dev_ops was not implemented in null pmd

We should fix sample app / virtual pmds too so they can work together...
  
Ferruh Yigit Oct. 1, 2019, 4:03 p.m. UTC | #2
On 10/1/2019 5:00 PM, Ferruh Yigit wrote:
> On 9/29/2019 3:41 AM, Yasufumi Ogawa wrote:
>> Packet processing in secondary process cannot work because rx_pkt_burst
>> and tx_pkt_burst in eth_dev are not initialized while probing device.
>> This patch is to the initialization.
>>
>> Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
>> ---
>>  drivers/net/null/rte_eth_null.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
>> index 0c60d241a..5a2010e3e 100644
>> --- a/drivers/net/null/rte_eth_null.c
>> +++ b/drivers/net/null/rte_eth_null.c
>> @@ -586,6 +586,13 @@ rte_pmd_null_probe(struct rte_vdev_device *dev)
>>  		/* TODO: request info from primary to set up Rx and Tx */
>>  		eth_dev->dev_ops = &ops;
>>  		eth_dev->device = &dev->device;
>> +		if (packet_copy) {
>> +			eth_dev->rx_pkt_burst = eth_null_copy_rx;
>> +			eth_dev->tx_pkt_burst = eth_null_copy_tx;
>> +		} else {
>> +			eth_dev->rx_pkt_burst = eth_null_rx;
>> +			eth_dev->tx_pkt_burst = eth_null_tx;
>> +		}
>>  		rte_eth_dev_probing_finish(eth_dev);
>>  		return 0;
>>  	}
>>
> 
> 
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>


    Fixes: ee27edbe0c10 ("drivers/net: share vdev data to secondary process")
    Cc: stable@dpdk.org

Applied to dpdk-next-net/master, thanks.
  
Yasufumi Ogawa Oct. 3, 2019, 8:15 a.m. UTC | #3
On 2019/10/02 1:00, Ferruh Yigit wrote:
> On 9/29/2019 3:41 AM, Yasufumi Ogawa wrote:
>> Packet processing in secondary process cannot work because rx_pkt_burst
>> and tx_pkt_burst in eth_dev are not initialized while probing device.
>> This patch is to the initialization.
>>
>> Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
>> ---
>>   drivers/net/null/rte_eth_null.c | 7 +++++++
>>   1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
>> index 0c60d241a..5a2010e3e 100644
>> --- a/drivers/net/null/rte_eth_null.c
>> +++ b/drivers/net/null/rte_eth_null.c
>> @@ -586,6 +586,13 @@ rte_pmd_null_probe(struct rte_vdev_device *dev)
>>   		/* TODO: request info from primary to set up Rx and Tx */
>>   		eth_dev->dev_ops = &ops;
>>   		eth_dev->device = &dev->device;
>> +		if (packet_copy) {
>> +			eth_dev->rx_pkt_burst = eth_null_copy_rx;
>> +			eth_dev->tx_pkt_burst = eth_null_copy_tx;
>> +		} else {
>> +			eth_dev->rx_pkt_burst = eth_null_rx;
>> +			eth_dev->tx_pkt_burst = eth_null_tx;
>> +		}
>>   		rte_eth_dev_probing_finish(eth_dev);
>>   		return 0;
>>   	}
>>
> 
> 
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
> 
> But this seems the issue for other virtual PMDs too, @Yasufumi, can you please
> check others too if you have any bandwidth for it?
Yes. I have also tried to fix other PMDs, and would like to make some 
updates for vhost and virtio next if possible.

Yasufumi
> 
> 
> I assume this is missing for a long time because there is not easy way to test
> them in secondary process, testpmd doesn't support the multi process. cc'ed
> testpmd and multi process maintainers, what do you think about adding multi
> process support to testpmd?
> 
> 
> I tested with "examples/multi_process/symmetric_mp" sample app, it required
> fixing with null pmd:
> 1- Requested offload config was not supported by null pmd
> 2- promics_enable dev_ops was not implemented in null pmd
> 
> We should fix sample app / virtual pmds too so they can work together...
>
  

Patch

diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
index 0c60d241a..5a2010e3e 100644
--- a/drivers/net/null/rte_eth_null.c
+++ b/drivers/net/null/rte_eth_null.c
@@ -586,6 +586,13 @@  rte_pmd_null_probe(struct rte_vdev_device *dev)
 		/* TODO: request info from primary to set up Rx and Tx */
 		eth_dev->dev_ops = &ops;
 		eth_dev->device = &dev->device;
+		if (packet_copy) {
+			eth_dev->rx_pkt_burst = eth_null_copy_rx;
+			eth_dev->tx_pkt_burst = eth_null_copy_tx;
+		} else {
+			eth_dev->rx_pkt_burst = eth_null_rx;
+			eth_dev->tx_pkt_burst = eth_null_tx;
+		}
 		rte_eth_dev_probing_finish(eth_dev);
 		return 0;
 	}