net/virtio: skip device probe in vDPA mode
If we want a virtio device to work in vDPA (vhost data path acceleration) mode, we could add a "vdpa=1" devarg for this device to specify the mode. This patch let virtio pmd skip device probe when detecting this parameter. Signed-off-by: Xiao Wang <xiao.w.wang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
ea2dc10668
commit
440f03c253
@ -318,3 +318,16 @@ Here we use l3fwd-power as an example to show how to get started.
|
||||
|
||||
$ l3fwd-power -l 0-1 -- -p 1 -P --config="(0,0,1)" \
|
||||
--no-numa --parse-ptype
|
||||
|
||||
|
||||
Virtio PMD arguments
|
||||
--------------------
|
||||
|
||||
The user can specify below argument in devargs.
|
||||
|
||||
#. ``vdpa``:
|
||||
|
||||
A virtio device could also be driven by vDPA (vhost data path acceleration)
|
||||
driver, and works as a HW vhost backend. This argument is used to specify
|
||||
a virtio device needs to work in vDPA mode.
|
||||
(Default: 0 (disabled))
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <rte_eal.h>
|
||||
#include <rte_dev.h>
|
||||
#include <rte_cycles.h>
|
||||
#include <rte_kvargs.h>
|
||||
|
||||
#include "virtio_ethdev.h"
|
||||
#include "virtio_pci.h"
|
||||
@ -1713,9 +1714,51 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vdpa_check_handler(__rte_unused const char *key,
|
||||
const char *value, __rte_unused void *opaque)
|
||||
{
|
||||
if (strcmp(value, "1"))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
vdpa_mode_selected(struct rte_devargs *devargs)
|
||||
{
|
||||
struct rte_kvargs *kvlist;
|
||||
const char *key = "vdpa";
|
||||
int ret = 0;
|
||||
|
||||
if (devargs == NULL)
|
||||
return 0;
|
||||
|
||||
kvlist = rte_kvargs_parse(devargs->args, NULL);
|
||||
if (kvlist == NULL)
|
||||
return 0;
|
||||
|
||||
if (!rte_kvargs_count(kvlist, key))
|
||||
goto exit;
|
||||
|
||||
/* vdpa mode selected when there's a key-value pair: vdpa=1 */
|
||||
if (rte_kvargs_process(kvlist, key,
|
||||
vdpa_check_handler, NULL) < 0) {
|
||||
goto exit;
|
||||
}
|
||||
ret = 1;
|
||||
|
||||
exit:
|
||||
rte_kvargs_free(kvlist);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int eth_virtio_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
|
||||
struct rte_pci_device *pci_dev)
|
||||
{
|
||||
/* virtio pmd skips probe if device needs to work in vdpa mode */
|
||||
if (vdpa_mode_selected(pci_dev->device.devargs))
|
||||
return 1;
|
||||
|
||||
return rte_eth_dev_pci_generic_probe(pci_dev, sizeof(struct virtio_hw),
|
||||
eth_virtio_dev_init);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user