Message ID | 20231018202715.69734-3-joao.m.martins@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | IOMMUFD Dirty Tracking | expand |
On Wed, Oct 18, 2023 at 09:26:59PM +0100, Joao Martins wrote: > Both VFIO and IOMMUFD will need iova bitmap for storing dirties and walking > the user bitmaps, so move to the common dependency into IOMMUFD. In doing > so, create the symbol IOMMUFD_DRIVER which designates the builtin code that > will be used by drivers when selected. Today this means MLX5_VFIO_PCI and > PDS_VFIO_PCI. IOMMU drivers will do the same (in future patches) when > supporting dirty tracking and select IOMMUFD_DRIVER accordingly. > > Given that the symbol maybe be disabled, add header definitions in > iova_bitmap.h for when IOMMUFD_DRIVER=n > > Signed-off-by: Joao Martins <joao.m.martins@oracle.com> > --- > drivers/iommu/iommufd/Kconfig | 4 +++ > drivers/iommu/iommufd/Makefile | 1 + > drivers/{vfio => iommu/iommufd}/iova_bitmap.c | 0 > drivers/vfio/Makefile | 3 +-- > drivers/vfio/pci/mlx5/Kconfig | 1 + > drivers/vfio/pci/pds/Kconfig | 1 + > include/linux/iova_bitmap.h | 26 +++++++++++++++++++ > 7 files changed, 34 insertions(+), 2 deletions(-) > rename drivers/{vfio => iommu/iommufd}/iova_bitmap.c (100%) Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Jason
On 10/18/2023 3:14 PM, Jason Gunthorpe wrote: > Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. > > > On Wed, Oct 18, 2023 at 09:26:59PM +0100, Joao Martins wrote: >> Both VFIO and IOMMUFD will need iova bitmap for storing dirties and walking >> the user bitmaps, so move to the common dependency into IOMMUFD. In doing >> so, create the symbol IOMMUFD_DRIVER which designates the builtin code that >> will be used by drivers when selected. Today this means MLX5_VFIO_PCI and >> PDS_VFIO_PCI. IOMMU drivers will do the same (in future patches) when >> supporting dirty tracking and select IOMMUFD_DRIVER accordingly. >> >> Given that the symbol maybe be disabled, add header definitions in >> iova_bitmap.h for when IOMMUFD_DRIVER=n >> >> Signed-off-by: Joao Martins <joao.m.martins@oracle.com> >> --- >> drivers/iommu/iommufd/Kconfig | 4 +++ >> drivers/iommu/iommufd/Makefile | 1 + >> drivers/{vfio => iommu/iommufd}/iova_bitmap.c | 0 >> drivers/vfio/Makefile | 3 +-- >> drivers/vfio/pci/mlx5/Kconfig | 1 + >> drivers/vfio/pci/pds/Kconfig | 1 + >> include/linux/iova_bitmap.h | 26 +++++++++++++++++++ >> 7 files changed, 34 insertions(+), 2 deletions(-) >> rename drivers/{vfio => iommu/iommufd}/iova_bitmap.c (100%) Reviewed-by: Brett Creeley <brett.creeley@amd.com> Thanks, Brett > > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> > > Jason
> From: Joao Martins <joao.m.martins@oracle.com> > Sent: Thursday, October 19, 2023 4:27 AM > > Both VFIO and IOMMUFD will need iova bitmap for storing dirties and > walking > the user bitmaps, so move to the common dependency into IOMMUFD. In > doing > so, create the symbol IOMMUFD_DRIVER which designates the builtin code > that > will be used by drivers when selected. Today this means MLX5_VFIO_PCI and > PDS_VFIO_PCI. IOMMU drivers will do the same (in future patches) when > supporting dirty tracking and select IOMMUFD_DRIVER accordingly. > > Given that the symbol maybe be disabled, add header definitions in > iova_bitmap.h for when IOMMUFD_DRIVER=n > > Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
On Wed, 18 Oct 2023 21:26:59 +0100 Joao Martins <joao.m.martins@oracle.com> wrote: > Both VFIO and IOMMUFD will need iova bitmap for storing dirties and walking > the user bitmaps, so move to the common dependency into IOMMUFD. In doing > so, create the symbol IOMMUFD_DRIVER which designates the builtin code that > will be used by drivers when selected. Today this means MLX5_VFIO_PCI and > PDS_VFIO_PCI. IOMMU drivers will do the same (in future patches) when > supporting dirty tracking and select IOMMUFD_DRIVER accordingly. > > Given that the symbol maybe be disabled, add header definitions in > iova_bitmap.h for when IOMMUFD_DRIVER=n > > Signed-off-by: Joao Martins <joao.m.martins@oracle.com> > --- > drivers/iommu/iommufd/Kconfig | 4 +++ > drivers/iommu/iommufd/Makefile | 1 + > drivers/{vfio => iommu/iommufd}/iova_bitmap.c | 0 > drivers/vfio/Makefile | 3 +-- > drivers/vfio/pci/mlx5/Kconfig | 1 + > drivers/vfio/pci/pds/Kconfig | 1 + > include/linux/iova_bitmap.h | 26 +++++++++++++++++++ > 7 files changed, 34 insertions(+), 2 deletions(-) > rename drivers/{vfio => iommu/iommufd}/iova_bitmap.c (100%) Reviewed-by: Alex Williamson <alex.williamson@redhat.com> > > diff --git a/drivers/iommu/iommufd/Kconfig b/drivers/iommu/iommufd/Kconfig > index 99d4b075df49..1fa543204e89 100644 > --- a/drivers/iommu/iommufd/Kconfig > +++ b/drivers/iommu/iommufd/Kconfig > @@ -11,6 +11,10 @@ config IOMMUFD > > If you don't know what to do here, say N. > > +config IOMMUFD_DRIVER > + bool > + default n > + > if IOMMUFD > config IOMMUFD_VFIO_CONTAINER > bool "IOMMUFD provides the VFIO container /dev/vfio/vfio" > diff --git a/drivers/iommu/iommufd/Makefile b/drivers/iommu/iommufd/Makefile > index 8aeba81800c5..34b446146961 100644 > --- a/drivers/iommu/iommufd/Makefile > +++ b/drivers/iommu/iommufd/Makefile > @@ -11,3 +11,4 @@ iommufd-y := \ > iommufd-$(CONFIG_IOMMUFD_TEST) += selftest.o > > obj-$(CONFIG_IOMMUFD) += iommufd.o > +obj-$(CONFIG_IOMMUFD_DRIVER) += iova_bitmap.o > diff --git a/drivers/vfio/iova_bitmap.c b/drivers/iommu/iommufd/iova_bitmap.c > similarity index 100% > rename from drivers/vfio/iova_bitmap.c > rename to drivers/iommu/iommufd/iova_bitmap.c > diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile > index c82ea032d352..68c05705200f 100644 > --- a/drivers/vfio/Makefile > +++ b/drivers/vfio/Makefile > @@ -1,8 +1,7 @@ > # SPDX-License-Identifier: GPL-2.0 > obj-$(CONFIG_VFIO) += vfio.o > > -vfio-y += vfio_main.o \ > - iova_bitmap.o > +vfio-y += vfio_main.o > vfio-$(CONFIG_VFIO_DEVICE_CDEV) += device_cdev.o > vfio-$(CONFIG_VFIO_GROUP) += group.o > vfio-$(CONFIG_IOMMUFD) += iommufd.o > diff --git a/drivers/vfio/pci/mlx5/Kconfig b/drivers/vfio/pci/mlx5/Kconfig > index 7088edc4fb28..c3ced56b7787 100644 > --- a/drivers/vfio/pci/mlx5/Kconfig > +++ b/drivers/vfio/pci/mlx5/Kconfig > @@ -3,6 +3,7 @@ config MLX5_VFIO_PCI > tristate "VFIO support for MLX5 PCI devices" > depends on MLX5_CORE > select VFIO_PCI_CORE > + select IOMMUFD_DRIVER > help > This provides migration support for MLX5 devices using the VFIO > framework. > diff --git a/drivers/vfio/pci/pds/Kconfig b/drivers/vfio/pci/pds/Kconfig > index 407b3fd32733..fff368a8183b 100644 > --- a/drivers/vfio/pci/pds/Kconfig > +++ b/drivers/vfio/pci/pds/Kconfig > @@ -5,6 +5,7 @@ config PDS_VFIO_PCI > tristate "VFIO support for PDS PCI devices" > depends on PDS_CORE > select VFIO_PCI_CORE > + select IOMMUFD_DRIVER > help > This provides generic PCI support for PDS devices using the VFIO > framework. > diff --git a/include/linux/iova_bitmap.h b/include/linux/iova_bitmap.h > index c006cf0a25f3..1c338f5e5b7a 100644 > --- a/include/linux/iova_bitmap.h > +++ b/include/linux/iova_bitmap.h > @@ -7,6 +7,7 @@ > #define _IOVA_BITMAP_H_ > > #include <linux/types.h> > +#include <linux/errno.h> > > struct iova_bitmap; > > @@ -14,6 +15,7 @@ typedef int (*iova_bitmap_fn_t)(struct iova_bitmap *bitmap, > unsigned long iova, size_t length, > void *opaque); > > +#if IS_ENABLED(CONFIG_IOMMUFD_DRIVER) > struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length, > unsigned long page_size, > u64 __user *data); > @@ -22,5 +24,29 @@ int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, > iova_bitmap_fn_t fn); > void iova_bitmap_set(struct iova_bitmap *bitmap, > unsigned long iova, size_t length); > +#else > +static inline struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, > + size_t length, > + unsigned long page_size, > + u64 __user *data) > +{ > + return NULL; > +} > + > +static inline void iova_bitmap_free(struct iova_bitmap *bitmap) > +{ > +} > + > +static inline int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, > + iova_bitmap_fn_t fn) > +{ > + return -EOPNOTSUPP; > +} > + > +static inline void iova_bitmap_set(struct iova_bitmap *bitmap, > + unsigned long iova, size_t length) > +{ > +} > +#endif > > #endif
diff --git a/drivers/iommu/iommufd/Kconfig b/drivers/iommu/iommufd/Kconfig index 99d4b075df49..1fa543204e89 100644 --- a/drivers/iommu/iommufd/Kconfig +++ b/drivers/iommu/iommufd/Kconfig @@ -11,6 +11,10 @@ config IOMMUFD If you don't know what to do here, say N. +config IOMMUFD_DRIVER + bool + default n + if IOMMUFD config IOMMUFD_VFIO_CONTAINER bool "IOMMUFD provides the VFIO container /dev/vfio/vfio" diff --git a/drivers/iommu/iommufd/Makefile b/drivers/iommu/iommufd/Makefile index 8aeba81800c5..34b446146961 100644 --- a/drivers/iommu/iommufd/Makefile +++ b/drivers/iommu/iommufd/Makefile @@ -11,3 +11,4 @@ iommufd-y := \ iommufd-$(CONFIG_IOMMUFD_TEST) += selftest.o obj-$(CONFIG_IOMMUFD) += iommufd.o +obj-$(CONFIG_IOMMUFD_DRIVER) += iova_bitmap.o diff --git a/drivers/vfio/iova_bitmap.c b/drivers/iommu/iommufd/iova_bitmap.c similarity index 100% rename from drivers/vfio/iova_bitmap.c rename to drivers/iommu/iommufd/iova_bitmap.c diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile index c82ea032d352..68c05705200f 100644 --- a/drivers/vfio/Makefile +++ b/drivers/vfio/Makefile @@ -1,8 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_VFIO) += vfio.o -vfio-y += vfio_main.o \ - iova_bitmap.o +vfio-y += vfio_main.o vfio-$(CONFIG_VFIO_DEVICE_CDEV) += device_cdev.o vfio-$(CONFIG_VFIO_GROUP) += group.o vfio-$(CONFIG_IOMMUFD) += iommufd.o diff --git a/drivers/vfio/pci/mlx5/Kconfig b/drivers/vfio/pci/mlx5/Kconfig index 7088edc4fb28..c3ced56b7787 100644 --- a/drivers/vfio/pci/mlx5/Kconfig +++ b/drivers/vfio/pci/mlx5/Kconfig @@ -3,6 +3,7 @@ config MLX5_VFIO_PCI tristate "VFIO support for MLX5 PCI devices" depends on MLX5_CORE select VFIO_PCI_CORE + select IOMMUFD_DRIVER help This provides migration support for MLX5 devices using the VFIO framework. diff --git a/drivers/vfio/pci/pds/Kconfig b/drivers/vfio/pci/pds/Kconfig index 407b3fd32733..fff368a8183b 100644 --- a/drivers/vfio/pci/pds/Kconfig +++ b/drivers/vfio/pci/pds/Kconfig @@ -5,6 +5,7 @@ config PDS_VFIO_PCI tristate "VFIO support for PDS PCI devices" depends on PDS_CORE select VFIO_PCI_CORE + select IOMMUFD_DRIVER help This provides generic PCI support for PDS devices using the VFIO framework. diff --git a/include/linux/iova_bitmap.h b/include/linux/iova_bitmap.h index c006cf0a25f3..1c338f5e5b7a 100644 --- a/include/linux/iova_bitmap.h +++ b/include/linux/iova_bitmap.h @@ -7,6 +7,7 @@ #define _IOVA_BITMAP_H_ #include <linux/types.h> +#include <linux/errno.h> struct iova_bitmap; @@ -14,6 +15,7 @@ typedef int (*iova_bitmap_fn_t)(struct iova_bitmap *bitmap, unsigned long iova, size_t length, void *opaque); +#if IS_ENABLED(CONFIG_IOMMUFD_DRIVER) struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length, unsigned long page_size, u64 __user *data); @@ -22,5 +24,29 @@ int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, iova_bitmap_fn_t fn); void iova_bitmap_set(struct iova_bitmap *bitmap, unsigned long iova, size_t length); +#else +static inline struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, + size_t length, + unsigned long page_size, + u64 __user *data) +{ + return NULL; +} + +static inline void iova_bitmap_free(struct iova_bitmap *bitmap) +{ +} + +static inline int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, + iova_bitmap_fn_t fn) +{ + return -EOPNOTSUPP; +} + +static inline void iova_bitmap_set(struct iova_bitmap *bitmap, + unsigned long iova, size_t length) +{ +} +#endif #endif
Both VFIO and IOMMUFD will need iova bitmap for storing dirties and walking the user bitmaps, so move to the common dependency into IOMMUFD. In doing so, create the symbol IOMMUFD_DRIVER which designates the builtin code that will be used by drivers when selected. Today this means MLX5_VFIO_PCI and PDS_VFIO_PCI. IOMMU drivers will do the same (in future patches) when supporting dirty tracking and select IOMMUFD_DRIVER accordingly. Given that the symbol maybe be disabled, add header definitions in iova_bitmap.h for when IOMMUFD_DRIVER=n Signed-off-by: Joao Martins <joao.m.martins@oracle.com> --- drivers/iommu/iommufd/Kconfig | 4 +++ drivers/iommu/iommufd/Makefile | 1 + drivers/{vfio => iommu/iommufd}/iova_bitmap.c | 0 drivers/vfio/Makefile | 3 +-- drivers/vfio/pci/mlx5/Kconfig | 1 + drivers/vfio/pci/pds/Kconfig | 1 + include/linux/iova_bitmap.h | 26 +++++++++++++++++++ 7 files changed, 34 insertions(+), 2 deletions(-) rename drivers/{vfio => iommu/iommufd}/iova_bitmap.c (100%)