[dpdk-dev,v3,4/4] virtio: check if kernel driver is manipulating the virtio device
Commit Message
v3 changes:
change log message to tell user that the virtio device is skipped
due to it is managed by kernel driver, instead of asking user to
unbind it from kernel driver.
v2 changes:
change LOG level from ERR to INFO
virtio PMD could use IO port to configure the virtio device without
using uio driver(vfio-noniommu mode should work as well).
There are two issues with previous implementation:
1) virtio PMD will take over each virtio device blindly even if some
are not intended for DPDK.
2) driver conflict between virtio PMD and virtio-net kernel driver.
This patch checks if there is any kernel driver manipulating the virtio
device before virtio PMD uses IO port to configure the device.
Fixes: da978dfdc43b ("virtio: use port IO to get PCI resource")
Signed-off-by: Huawei Xie <huawei.xie@intel.com>
---
drivers/net/virtio/virtio_ethdev.c | 5 +++++
1 file changed, 5 insertions(+)
Comments
On 01/27/2016 05:21 PM, Huawei Xie wrote:
> v3 changes:
> change log message to tell user that the virtio device is skipped
> due to it is managed by kernel driver, instead of asking user to
> unbind it from kernel driver.
>
> v2 changes:
> change LOG level from ERR to INFO
>
> virtio PMD could use IO port to configure the virtio device without
> using uio driver(vfio-noniommu mode should work as well).
>
> There are two issues with previous implementation:
> 1) virtio PMD will take over each virtio device blindly even if some
> are not intended for DPDK.
> 2) driver conflict between virtio PMD and virtio-net kernel driver.
>
> This patch checks if there is any kernel driver manipulating the virtio
> device before virtio PMD uses IO port to configure the device.
>
> Fixes: da978dfdc43b ("virtio: use port IO to get PCI resource")
>
> Signed-off-by: Huawei Xie <huawei.xie@intel.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index e815acd..ea1874a 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -1138,6 +1138,11 @@ static int virtio_resource_init_by_ioports(struct rte_pci_device *pci_dev)
> int found = 0;
> size_t linesz;
>
> + if (pci_dev->kdrv != RTE_KDRV_NONE) {
> + PMD_INIT_LOG(INFO, "skip kernel managed virtio device.");
> + return -1;
> + }
> +
> snprintf(pci_id, sizeof(pci_id), PCI_PRI_FMT,
> pci_dev->addr.domain,
> pci_dev->addr.bus,
>
"Manage" is a good term for this, much better than "manipulate" used in
the subject of this patch and patch 2/4.
"Check if kernel is manipulating foo" sounds like something that is
happening right now, as in "wait until kernel has stopped fiddling with
it and then do our own stuff while its quiet", managed makes is clear
its about the overall state instead.
Not asking you to submit v4 just because of that, but if the need arises
for other reasons it'd be nice to fix it as well, otherwise perhaps
Thomas can adjust it while committing?
- Panu -
@@ -1138,6 +1138,11 @@ static int virtio_resource_init_by_ioports(struct rte_pci_device *pci_dev)
int found = 0;
size_t linesz;
+ if (pci_dev->kdrv != RTE_KDRV_NONE) {
+ PMD_INIT_LOG(INFO, "skip kernel managed virtio device.");
+ return -1;
+ }
+
snprintf(pci_id, sizeof(pci_id), PCI_PRI_FMT,
pci_dev->addr.domain,
pci_dev->addr.bus,