[dpdk-dev] [PATCH v3 1/2] net/pcap: move pcap handler to process private

Zhang, Qi Z qi.z.zhang at intel.com
Thu Nov 15 01:13:33 CET 2018



> -----Original Message-----
> From: Yigit, Ferruh
> Sent: Wednesday, November 14, 2018 3:05 PM
> To: Zhang, Qi Z <qi.z.zhang at intel.com>
> Cc: thomas at monjalon.net; dev at dpdk.org; Lin, Xueqin <xueqin.lin at intel.com>
> Subject: Re: [PATCH v3 1/2] net/pcap: move pcap handler to process private
> 
> On 11/14/2018 7:56 PM, Qi Zhang wrote:
> > This is prework for data path enabling for secondary process.
> > To prevent pcap handler opened by one process be overwritten by
> > another process, each process should have their private copy,
> > `rte_eth_dev->process_private` is exactly what we needed.
> >
> > Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
> 
> <...>
> 
> > @@ -646,8 +652,10 @@ eth_rx_queue_setup(struct rte_eth_dev *dev,
> >  		struct rte_mempool *mb_pool)
> >  {
> >  	struct pmd_internals *internals = dev->data->dev_private;
> > +	struct pmd_process_private *pp = dev->process_private;
> >  	struct pcap_rx_queue *pcap_q = &internals->rx_queue[rx_queue_id];
> >
> > +	pcap_q->pcap = pp->rx_pcap[rx_queue_id];
> >  	pcap_q->mb_pool = mb_pool;
> >  	dev->data->rx_queues[rx_queue_id] = pcap_q;
> >  	pcap_q->in_port = dev->data->port_id; @@ -663,8 +671,12 @@
> > eth_tx_queue_setup(struct rte_eth_dev *dev,
> >  		const struct rte_eth_txconf *tx_conf __rte_unused)  {
> >  	struct pmd_internals *internals = dev->data->dev_private;
> > +	struct pmd_process_private *pp = dev->process_private;
> > +	struct pcap_tx_queue *pcap_q = &internals->tx_queue[tx_queue_id];
> >
> > -	dev->data->tx_queues[tx_queue_id] =
> &internals->tx_queue[tx_queue_id];
> > +	pcap_q->pcap = pp->tx_pcap[tx_queue_id];
> > +	pcap_q->dumper = pp->tx_dumper[tx_queue_id];
> > +	dev->data->tx_queues[tx_queue_id] = pcap_q;
> 
> We can't do this, this will be same thing as not using process_private at all,
> dev->data is shared between primary and secondary.
> Handlers need to be accessed directly from process_private in burst functions.
> To able to match queue with handlers in process_private, queue may need to
> include queue_index.
> 
> tap pmd has similar implementation already.

I don't know why the idea come to my mind that 
Queue must be setup at local process before you start data path on that same process, but obviously it is wrong.
Will fix this.


More information about the dev mailing list