Re: [PATCH v14 19/20] vfio: initialize the virqfd workqueue in VFIO generic code

2015-03-18 Thread Baptiste Reynal
Hello Alex,

The module solution seems fine for me, I have no argument against it.
I used your patch on my tests, they are running ok.

Regards,
Baptiste

On Wed, Mar 18, 2015 at 12:04 AM, Alex Williamson
 wrote:
> On Tue, 2015-03-17 at 16:29 -0600, Alex Williamson wrote:
>> On Mon, 2015-03-02 at 17:59 +0100, Baptiste Reynal wrote:
>> > From: Antonios Motakis 
>> >
>> > Now we have finally completely decoupled virqfd from VFIO_PCI. We can
>> > initialize it from the VFIO generic code, in order to safely use it from
>> > multiple independent VFIO bus drivers.
>> >
>> > Signed-off-by: Antonios Motakis 
>> > Signed-off-by: Baptiste Reynal 
>> > ---
>> >  drivers/vfio/Makefile   | 4 +++-
>> >  drivers/vfio/pci/Makefile   | 3 +--
>> >  drivers/vfio/pci/vfio_pci.c | 8 
>> >  drivers/vfio/vfio.c | 8 
>> >  4 files changed, 12 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
>> > index dadf0ca..d798b09 100644
>> > --- a/drivers/vfio/Makefile
>> > +++ b/drivers/vfio/Makefile
>> > @@ -1,4 +1,6 @@
>> > -obj-$(CONFIG_VFIO) += vfio.o
>> > +vfio_core-y := vfio.o virqfd.o
>> > +
>> > +obj-$(CONFIG_VFIO) += vfio_core.o
>> >  obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
>> >  obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
>> >  obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o
>>
>> This inadvertently (I assume) renames the main vfio module to vfio_core.
>> That potentially breaks numerous userspace scripts that might try to
>> load the "vfio" module.  I don't think that's acceptable.  A brute force
>> way to fix this would be to rename vfio.c to vfio_core.c and change the
>> Makefile to:
>>
>> vfio-y := vfio_core.o virqfd.o
>> obj-$(CONFIG_VFIO) += vfio.o
>>
>> Is there any other trickery available to us that could include virqfd.o
>> in vfio.o w/o source file renaming?  Thanks,
>
> Maybe a better option, we could let virqfd be it's own support module
> for bus drivers that need it.  Then we keep it out of vfio "core".
> Something like this:
>
> commit f4d91ec4b72ce11e9dba861d6bf2dba93b72f0ba
> Author: Alex Williamson 
> Date:   Tue Mar 17 08:33:38 2015 -0600
>
> vfio: Split virqfd into a separate module for vfio bus drivers
>
> An unintended consequence of splittng virqfd support to be shared
> by bus drivers is renaming the core vfio module to vfio_core.  This
> is not very friendly to user scripts that may try to load the vfio
> module.  To resolve that and to make it clear that virqfd is a bus
> driver service and not a dependency of vfio core, move this to a
> separate module on which the bus drivers will depend.
>
> Signed-off-by: Alex Williamson 
>
> diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
> index d5322a4..7d092dd 100644
> --- a/drivers/vfio/Kconfig
> +++ b/drivers/vfio/Kconfig
> @@ -13,6 +13,11 @@ config VFIO_SPAPR_EEH
> depends on EEH && VFIO_IOMMU_SPAPR_TCE
> default n
>
> +config VFIO_VIRQFD
> +   tristate
> +   depends on VFIO && EVENTFD
> +   default n
> +
>  menuconfig VFIO
> tristate "VFIO Non-Privileged userspace driver framework"
> depends on IOMMU_API
> diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
> index d798b09..7b8a31f 100644
> --- a/drivers/vfio/Makefile
> +++ b/drivers/vfio/Makefile
> @@ -1,6 +1,7 @@
> -vfio_core-y := vfio.o virqfd.o
> +vfio_virqfd-y := virqfd.o
>
> -obj-$(CONFIG_VFIO) += vfio_core.o
> +obj-$(CONFIG_VFIO) += vfio.o
> +obj-$(CONFIG_VFIO_VIRQFD) += vfio_virqfd.o
>  obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
>  obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
>  obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o
> diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig
> index c6bb5da..579d83b 100644
> --- a/drivers/vfio/pci/Kconfig
> +++ b/drivers/vfio/pci/Kconfig
> @@ -1,6 +1,7 @@
>  config VFIO_PCI
> tristate "VFIO support for PCI devices"
> depends on VFIO && PCI && EVENTFD
> +   select VFIO_VIRQFD
> help
>   Support for the PCI VFIO bus driver.  This is required to make
>   use of PCI drivers using the VFIO framework.
> diff --git a/drivers/vfio/platform/Kconfig b/drivers/vfio/platform/Kconfig
> index c0a3bff..4ec14af 100644
> --- a/drivers/vfio/platform/Kconfig
> +++ b/drivers/vfio/platform/Kconfig
> @@ -1,6 +1,7 @@
>  config VFIO_PLATFORM
> tristate "VFIO support for platform devices"
> depends on VFIO && EVENTFD && ARM
> +   select VFIO_VIRQFD
> help
>   Support for platform devices with VFIO. This is required to make
>   use of platform devices present on the system using the VFIO
> @@ -11,6 +12,7 @@ config VFIO_PLATFORM
>  config VFIO_AMBA
> tristate "VFIO support for AMBA devices"
> depends on VFIO_PLATFORM && ARM_AMBA
> +   select VFIO_VIRQFD
> help
>   Support for ARM AMBA devices with VFIO. This is required to make
>  

Re: [PATCH v14 19/20] vfio: initialize the virqfd workqueue in VFIO generic code

2015-03-17 Thread Alex Williamson
On Tue, 2015-03-17 at 16:29 -0600, Alex Williamson wrote:
> On Mon, 2015-03-02 at 17:59 +0100, Baptiste Reynal wrote:
> > From: Antonios Motakis 
> > 
> > Now we have finally completely decoupled virqfd from VFIO_PCI. We can
> > initialize it from the VFIO generic code, in order to safely use it from
> > multiple independent VFIO bus drivers.
> > 
> > Signed-off-by: Antonios Motakis 
> > Signed-off-by: Baptiste Reynal 
> > ---
> >  drivers/vfio/Makefile   | 4 +++-
> >  drivers/vfio/pci/Makefile   | 3 +--
> >  drivers/vfio/pci/vfio_pci.c | 8 
> >  drivers/vfio/vfio.c | 8 
> >  4 files changed, 12 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
> > index dadf0ca..d798b09 100644
> > --- a/drivers/vfio/Makefile
> > +++ b/drivers/vfio/Makefile
> > @@ -1,4 +1,6 @@
> > -obj-$(CONFIG_VFIO) += vfio.o
> > +vfio_core-y := vfio.o virqfd.o
> > +
> > +obj-$(CONFIG_VFIO) += vfio_core.o
> >  obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
> >  obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
> >  obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o
> 
> This inadvertently (I assume) renames the main vfio module to vfio_core.
> That potentially breaks numerous userspace scripts that might try to
> load the "vfio" module.  I don't think that's acceptable.  A brute force
> way to fix this would be to rename vfio.c to vfio_core.c and change the
> Makefile to:
> 
> vfio-y := vfio_core.o virqfd.o
> obj-$(CONFIG_VFIO) += vfio.o
> 
> Is there any other trickery available to us that could include virqfd.o
> in vfio.o w/o source file renaming?  Thanks,

Maybe a better option, we could let virqfd be it's own support module
for bus drivers that need it.  Then we keep it out of vfio "core".
Something like this:

commit f4d91ec4b72ce11e9dba861d6bf2dba93b72f0ba
Author: Alex Williamson 
Date:   Tue Mar 17 08:33:38 2015 -0600

vfio: Split virqfd into a separate module for vfio bus drivers

An unintended consequence of splittng virqfd support to be shared
by bus drivers is renaming the core vfio module to vfio_core.  This
is not very friendly to user scripts that may try to load the vfio
module.  To resolve that and to make it clear that virqfd is a bus
driver service and not a dependency of vfio core, move this to a
separate module on which the bus drivers will depend.

Signed-off-by: Alex Williamson 

diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
index d5322a4..7d092dd 100644
--- a/drivers/vfio/Kconfig
+++ b/drivers/vfio/Kconfig
@@ -13,6 +13,11 @@ config VFIO_SPAPR_EEH
depends on EEH && VFIO_IOMMU_SPAPR_TCE
default n
 
+config VFIO_VIRQFD
+   tristate
+   depends on VFIO && EVENTFD
+   default n
+
 menuconfig VFIO
tristate "VFIO Non-Privileged userspace driver framework"
depends on IOMMU_API
diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
index d798b09..7b8a31f 100644
--- a/drivers/vfio/Makefile
+++ b/drivers/vfio/Makefile
@@ -1,6 +1,7 @@
-vfio_core-y := vfio.o virqfd.o
+vfio_virqfd-y := virqfd.o
 
-obj-$(CONFIG_VFIO) += vfio_core.o
+obj-$(CONFIG_VFIO) += vfio.o
+obj-$(CONFIG_VFIO_VIRQFD) += vfio_virqfd.o
 obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
 obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
 obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o
diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig
index c6bb5da..579d83b 100644
--- a/drivers/vfio/pci/Kconfig
+++ b/drivers/vfio/pci/Kconfig
@@ -1,6 +1,7 @@
 config VFIO_PCI
tristate "VFIO support for PCI devices"
depends on VFIO && PCI && EVENTFD
+   select VFIO_VIRQFD
help
  Support for the PCI VFIO bus driver.  This is required to make
  use of PCI drivers using the VFIO framework.
diff --git a/drivers/vfio/platform/Kconfig b/drivers/vfio/platform/Kconfig
index c0a3bff..4ec14af 100644
--- a/drivers/vfio/platform/Kconfig
+++ b/drivers/vfio/platform/Kconfig
@@ -1,6 +1,7 @@
 config VFIO_PLATFORM
tristate "VFIO support for platform devices"
depends on VFIO && EVENTFD && ARM
+   select VFIO_VIRQFD
help
  Support for platform devices with VFIO. This is required to make
  use of platform devices present on the system using the VFIO
@@ -11,6 +12,7 @@ config VFIO_PLATFORM
 config VFIO_AMBA
tristate "VFIO support for AMBA devices"
depends on VFIO_PLATFORM && ARM_AMBA
+   select VFIO_VIRQFD
help
  Support for ARM AMBA devices with VFIO. This is required to make
  use of ARM AMBA devices present on the system using the VFIO
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index 86aac7e..0d33662 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -1552,11 +1552,6 @@ static int __init vfio_init(void)
if (ret)
goto err_cdev_add;
 
-   /* Start the virqfd cleanup handler used by some VFIO bus drivers */

Re: [PATCH v14 19/20] vfio: initialize the virqfd workqueue in VFIO generic code

2015-03-17 Thread Alex Williamson
On Mon, 2015-03-02 at 17:59 +0100, Baptiste Reynal wrote:
> From: Antonios Motakis 
> 
> Now we have finally completely decoupled virqfd from VFIO_PCI. We can
> initialize it from the VFIO generic code, in order to safely use it from
> multiple independent VFIO bus drivers.
> 
> Signed-off-by: Antonios Motakis 
> Signed-off-by: Baptiste Reynal 
> ---
>  drivers/vfio/Makefile   | 4 +++-
>  drivers/vfio/pci/Makefile   | 3 +--
>  drivers/vfio/pci/vfio_pci.c | 8 
>  drivers/vfio/vfio.c | 8 
>  4 files changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
> index dadf0ca..d798b09 100644
> --- a/drivers/vfio/Makefile
> +++ b/drivers/vfio/Makefile
> @@ -1,4 +1,6 @@
> -obj-$(CONFIG_VFIO) += vfio.o
> +vfio_core-y := vfio.o virqfd.o
> +
> +obj-$(CONFIG_VFIO) += vfio_core.o
>  obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
>  obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
>  obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o

This inadvertently (I assume) renames the main vfio module to vfio_core.
That potentially breaks numerous userspace scripts that might try to
load the "vfio" module.  I don't think that's acceptable.  A brute force
way to fix this would be to rename vfio.c to vfio_core.c and change the
Makefile to:

vfio-y := vfio_core.o virqfd.o
obj-$(CONFIG_VFIO) += vfio.o

Is there any other trickery available to us that could include virqfd.o
in vfio.o w/o source file renaming?  Thanks,

Alex

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v14 19/20] vfio: initialize the virqfd workqueue in VFIO generic code

2015-03-02 Thread Baptiste Reynal
From: Antonios Motakis 

Now we have finally completely decoupled virqfd from VFIO_PCI. We can
initialize it from the VFIO generic code, in order to safely use it from
multiple independent VFIO bus drivers.

Signed-off-by: Antonios Motakis 
Signed-off-by: Baptiste Reynal 
---
 drivers/vfio/Makefile   | 4 +++-
 drivers/vfio/pci/Makefile   | 3 +--
 drivers/vfio/pci/vfio_pci.c | 8 
 drivers/vfio/vfio.c | 8 
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
index dadf0ca..d798b09 100644
--- a/drivers/vfio/Makefile
+++ b/drivers/vfio/Makefile
@@ -1,4 +1,6 @@
-obj-$(CONFIG_VFIO) += vfio.o
+vfio_core-y := vfio.o virqfd.o
+
+obj-$(CONFIG_VFIO) += vfio_core.o
 obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
 obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
 obj-$(CONFIG_VFIO_SPAPR_EEH) += vfio_spapr_eeh.o
diff --git a/drivers/vfio/pci/Makefile b/drivers/vfio/pci/Makefile
index c7c8644..1310792 100644
--- a/drivers/vfio/pci/Makefile
+++ b/drivers/vfio/pci/Makefile
@@ -1,5 +1,4 @@
 
-vfio-pci-y := vfio_pci.o vfio_pci_intrs.o vfio_pci_rdwr.o vfio_pci_config.o \
- ../virqfd.o
+vfio-pci-y := vfio_pci.o vfio_pci_intrs.o vfio_pci_rdwr.o vfio_pci_config.o
 
 obj-$(CONFIG_VFIO_PCI) += vfio-pci.o
diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
index 668d37c..2f865d07 100644
--- a/drivers/vfio/pci/vfio_pci.c
+++ b/drivers/vfio/pci/vfio_pci.c
@@ -1030,7 +1030,6 @@ put_devs:
 static void __exit vfio_pci_cleanup(void)
 {
pci_unregister_driver(&vfio_pci_driver);
-   vfio_virqfd_exit();
vfio_pci_uninit_perm_bits();
 }
 
@@ -1043,11 +1042,6 @@ static int __init vfio_pci_init(void)
if (ret)
return ret;
 
-   /* Start the virqfd cleanup handler */
-   ret = vfio_virqfd_init();
-   if (ret)
-   goto out_virqfd;
-
/* Register and scan for devices */
ret = pci_register_driver(&vfio_pci_driver);
if (ret)
@@ -1056,8 +1050,6 @@ static int __init vfio_pci_init(void)
return 0;
 
 out_driver:
-   vfio_virqfd_exit();
-out_virqfd:
vfio_pci_uninit_perm_bits();
return ret;
 }
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index 4cde855..23ba12a 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -1553,6 +1553,11 @@ static int __init vfio_init(void)
if (ret)
goto err_cdev_add;
 
+   /* Start the virqfd cleanup handler used by some VFIO bus drivers */
+   ret = vfio_virqfd_init();
+   if (ret)
+   goto err_virqfd;
+
pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
 
/*
@@ -1565,6 +1570,8 @@ static int __init vfio_init(void)
 
return 0;
 
+err_virqfd:
+   cdev_del(&vfio.group_cdev);
 err_cdev_add:
unregister_chrdev_region(vfio.group_devt, MINORMASK);
 err_alloc_chrdev:
@@ -1579,6 +1586,7 @@ static void __exit vfio_cleanup(void)
 {
WARN_ON(!list_empty(&vfio.group_list));
 
+   vfio_virqfd_exit();
idr_destroy(&vfio.group_idr);
cdev_del(&vfio.group_cdev);
unregister_chrdev_region(vfio.group_devt, MINORMASK);
-- 
2.3.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html