[dpdk-dev] [PATCH v8 03/19] ethdev: enable hotplug on multi-process

Zhang, Qi Z qi.z.zhang at intel.com
Tue Jul 3 14:59:10 CEST 2018


Hi Thomas:
<...>

> > +enum eth_dev_req_type {
> > +	REQ_TYPE_ATTACH,
> > +	REQ_TYPE_PRE_DETACH,
> > +	REQ_TYPE_DETACH,
> > +	REQ_TYPE_ATTACH_ROLLBACK,
> > +};
> 
> These constants are missing an ethdev prefix.

OK, will fix.

> 
> > +
> > +struct eth_dev_mp_req {
> > +	enum eth_dev_req_type t;
> > +	char devargs[MAX_DEV_ARGS_LEN];
> > +	uint16_t port_id;
> > +	int result;
> > +};
> > +
> > +/**
> > + * this is a synchronous wrapper for secondary process send
> > + * request to primary process, this is invoked when an attach
> > + * or detach request issued from primary.
> > + */
> > +int eth_dev_request_to_primary(struct eth_dev_mp_req *req);
> > +
> > +/**
> > + * this is a synchronous wrapper for primary process send
> > + * request to secondary process, this is invoked when an attach
> > + * or detach request issued from secondary process.
> > + */
> > +int eth_dev_request_to_secondary(struct eth_dev_mp_req *req);
> 
> 
> Why do we need ethdev functions for IPC (mp request/response)?
> How this model can reasonnably scale to other device classes (crypto,
> compression, bbdev, eventdev, etc)?

Yes it will be more generic to more the multi-process device sync mechanism into eal layer.(rte_eal_hotplug_add/rte_eal_hotplug_remove)
I didn't do this is I'm not very sure if all anothers kinds of device type need this, but if you think this is a good direction and we need to enable for all devices, 
I think this could be our next step. BTW, I guess ethdev still need some IPC to sync port_id which is specific for itself, and other device type may have similar requirement.

> > --- /dev/null
> > +++ b/lib/librte_ethdev/ethdev_private.h
> 
> What is the purpose of a file ethdev_private.h?
> 
> > @@ -0,0 +1,39 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause
> > + * Copyright(c) 2010-2018 Intel Corporation
> 
> Are you sure about the years?

NO, will fix:)

> 
> > +/**
> > + * Attach a new Ethernet device in current process.
> > + *
> > + * @param devargs
> > + *  A pointer to a strings array describing the new device
> > + *  to be attached. The strings should be a pci address like
> > + *  '0000:01:00.0' or virtual device name like 'net_pcap0'.
> 
> No, no. The devargs syntax is being changed, so you should not duplicate its
> description here. Better to reference an unique source of doc.

OK, will check and replace with more correct description.

> 
> > + *
> > + * @param port_id
> > + *  A pointer to a port identifier actually attached.
> > + *
> > + * @return
> > + *  0 on success and port_id is filled, negative on error  */ int
> > +do_eth_dev_attach(const char *devargs, uint16_t *port_id);
> 
> So you are duplicating rte_eth_dev_attach which is flawed in its design and
> should be deprecated...

OK, just to know this, but I guess it will not be the issue, if we move the dev sync mechanism into eal layer in future right?

Regards
Qi

> 
> As you may have noticed, rte_eth_dev_attach() is calling
> rte_eal_hotplug_add() which manages the EAL device.
> It is wrong because the relation between an ethdev port and an EAL device is
> not a 1:1 mapping.
> We must manage the ethdev port as one of the possible abstractions of a
> device represented by rte_device.
> 



More information about the dev mailing list