On Fri, Nov 13, 2020 at 02:02:38PM +0000, Ferruh Yigit wrote:
> On 11/13/2020 1:13 PM, Olivier Matz wrote:
> > On Fri, Nov 13, 2020 at 11:39:57AM +0100, Olivier Matz wrote:
> > > In pcap pmd, the timestamp mbuf dynamic field is mandatory. When the
> > > pcap pmd is created in a secondary process (this is the case for pdump),
> > > it cannot be registered because this is not allowed from a secondary
> > > process.
> > > 
> > > To ensure that the field is properly registered, do it from probe()
> > > instead of configure(). Indeed, probe() is invoked on the primary
> > > process when a device is created in a secondary.
> > > 
> 
> probe() invoked first in the primary, later in the secondary, both process
> calls the driver probe(). But for this case probe(), and dynfield register,
> being called first in primary seems solving the problem.
> Would you be OK to change last sentences as:
> "Indeed, probe() is first invoked on the primary process when a device is
> created in a secondary, this enables registering dynfield from secondary
> process."

Yes, it is more precise, thanks

> > > Bugzilla ID: 571
> > > Fixes: d23d73d088c1 ("net/pcap: switch Rx timestamp to dynamic mbuf 
> > > field")
> > > 
> > > Signed-off-by: Olivier Matz <olivier.m...@6wind.com>
> 
> Reviewed-by: Ferruh Yigit <ferruh.yi...@intel.com>
> 
> > > ---
> > 
> > One additional comment about this patch.
> > 
> > While it solves the issue described in the bug report, there may still
> > be a gap when it is needed to register a dynamic field/flag from a
> > secondary process. This happens when registering and configuring devices
> > from a secondary process (is it supported?). It happens if the secondary
> > process initializes a library which is not initialized in primary, and
> > which requires a dynamic field.
> > 
> >  From afar, it does not look too difficult to implement dynamic field
> > registration from secondary processes. The only thing missing is a way
> > to allocate the shared memory in the primary process at initialization.
> > Currently, there is no init callback that is invoked when eal init is
> > done.
> > 
> 
> I was checking this, it seems what prevents to register dnyfield from the
> secondary process is 'init_shared_mem()', so if primary process registers
> any dynfield first, secondary process can register dynfields too.
> Do you think should this limitation documented?

Currently, registration from secondary is explicitly denied, with a code
like this:

        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
                rte_errno = EPERM;
                return -1;
        }

> > This is the exact same problem than for this issue:
> > http://inbox.dpdk.org/dev/20200504074227.GA6327@platinum/#t
> > 
> 
> <...>
> 

Reply via email to