[dpdk-dev] [PATCH v1 1/4] net/iavf: stop the PCI probe in DCF mode

Ye Xiaolong xiaolong.ye at intel.com
Mon Mar 9 16:38:13 CET 2020


On 03/09, Haiyue Wang wrote:
>A new DCF PMD will be introduced, which runs on Intel VF hardware, and
>it is a pure software design to control the advance functionality (such
>as switch, ACL) for rest of the VFs.
>
>So if the DCF (Device Config Function) mode is specified by the devarg
>'cap=dcf', then it will stop the PCI probe in the iavf PMD.
>
>Signed-off-by: Haiyue Wang <haiyue.wang at intel.com>
>---
> drivers/net/iavf/iavf_ethdev.c | 41 ++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
>diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
>index 34913f9c4..8ff26c0e7 100644
>--- a/drivers/net/iavf/iavf_ethdev.c
>+++ b/drivers/net/iavf/iavf_ethdev.c
>@@ -1416,9 +1416,49 @@ iavf_dev_uninit(struct rte_eth_dev *dev)
> 	return 0;
> }
> 
>+static int
>+handle_dcf_arg(__rte_unused const char *key, const char *value,
>+	       __rte_unused void *arg)
>+{
>+	bool *dcf = arg;
>+
>+	if (arg == NULL || value == NULL)
>+		return -EINVAL;
>+
>+	if (strcmp(value, "dcf") == 0)
>+		*dcf = true;
>+	else
>+		*dcf = false;
>+
>+	return 0;
>+}
>+
>+static bool
>+check_cap_dcf_enable(struct rte_devargs *devargs)
>+{
>+	struct rte_kvargs *kvlist;
>+	bool enable = false;
>+
>+	if (devargs == NULL)
>+		return false;
>+
>+	kvlist = rte_kvargs_parse(devargs->args, NULL);
>+	if (kvlist == NULL)
>+		return false;
>+
>+	rte_kvargs_process(kvlist, "cap", handle_dcf_arg, &enable);

Need error handling for failure case.

>+
>+	rte_kvargs_free(kvlist);
>+
>+	return enable;
>+}
>+
> static int eth_iavf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
> 			     struct rte_pci_device *pci_dev)
> {
>+	if (check_cap_dcf_enable(pci_dev->device.devargs))
>+		return 1; /* continue to probe */

This comment is confusing...

>+
> 	return rte_eth_dev_pci_generic_probe(pci_dev,
> 		sizeof(struct iavf_adapter), iavf_dev_init);
> }
>@@ -1439,6 +1479,7 @@ static struct rte_pci_driver rte_iavf_pmd = {
> RTE_PMD_REGISTER_PCI(net_iavf, rte_iavf_pmd);
> RTE_PMD_REGISTER_PCI_TABLE(net_iavf, pci_id_iavf_map);
> RTE_PMD_REGISTER_KMOD_DEP(net_iavf, "* igb_uio | vfio-pci");
>+RTE_PMD_REGISTER_PARAM_STRING(net_iavf, "cap=dcf");
> RTE_INIT(iavf_init_log)
> {
> 	iavf_logtype_init = rte_log_register("pmd.net.iavf.init");
>-- 
>2.25.1
>


More information about the dev mailing list