[dpdk-dev] [PATCH 4/4] virtio: check if any kernel driver is manipulating the device

Xie, Huawei huawei.xie at intel.com
Mon Dec 28 06:29:05 CET 2015



> -----Original Message-----
> From: Yuanhan Liu [mailto:yuanhan.liu at linux.intel.com]
> Sent: Monday, December 28, 2015 1:27 PM
> To: Xie, Huawei
> Cc: dev at dpdk.org; Jayakumar, Muthurajan; Troitsky, Nikita;
> peterx at redhat.com; stephen at networkplumber.org;
> Changchun.ouyang at hotmail.com; thomas.monjalon at 6wind.com
> Subject: Re: [PATCH 4/4] virtio: check if any kernel driver is
> manipulating the device
> 
> On Fri, Dec 25, 2015 at 02:38:12AM +0800, Huawei Xie wrote:
> > virtio PMD could use IO port to configure the virtio device without
> > using uio driver.
> >
> > 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 at intel.com>
> > ---
> >  drivers/net/virtio/virtio_ethdev.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/net/virtio/virtio_ethdev.c
> b/drivers/net/virtio/virtio_ethdev.c
> > index 00015ef..504346a 100644
> > --- a/drivers/net/virtio/virtio_ethdev.c
> > +++ b/drivers/net/virtio/virtio_ethdev.c
> > @@ -1138,6 +1138,13 @@ 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(ERR,
> > +			"%s(): kernel driver is manipulating this device." \
> > +			" Please unbind the kernel driver.", __func__);
> 
> PMD_INIT_LOG already prints the function, no need to reference
> __func__
> again here.

Good. We have to fix the similar issue in virtio_resource_init_xx as well.

> 
> 	--yliu
> > +		return -1;
> > +	}
> > +
> >  	snprintf(pci_id, sizeof(pci_id), PCI_PRI_FMT,
> >  		 pci_dev->addr.domain,
> >  		 pci_dev->addr.bus,
> > --
> > 1.8.1.4


More information about the dev mailing list