RE: [PATCH 09/14] vfio: move the vfio_iommu_driver_ops interface out of <linux/vfio.h>

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> From: Christoph Hellwig <hch@xxxxxx>
> Sent: Thursday, August 26, 2021 12:19 AM
> 
> Create a new private drivers/vfio/vfio.h header for the interface between
> the VFIO core and the iommu drivers.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>

> ---
>  drivers/vfio/vfio.c                 |  1 +
>  drivers/vfio/vfio.h                 | 47 +++++++++++++++++++++++++++++
>  drivers/vfio/vfio_iommu_spapr_tce.c |  1 +
>  drivers/vfio/vfio_iommu_type1.c     |  1 +
>  include/linux/vfio.h                | 44 ---------------------------
>  5 files changed, 50 insertions(+), 44 deletions(-)
>  create mode 100644 drivers/vfio/vfio.h
> 
> diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> index 7b9629cbbf0e80..f73158fce8c446 100644
> --- a/drivers/vfio/vfio.c
> +++ b/drivers/vfio/vfio.c
> @@ -32,6 +32,7 @@
>  #include <linux/vfio.h>
>  #include <linux/wait.h>
>  #include <linux/sched/signal.h>
> +#include "vfio.h"
> 
>  #define DRIVER_VERSION	"0.3"
>  #define DRIVER_AUTHOR	"Alex Williamson
> <alex.williamson@xxxxxxxxxx>"
> diff --git a/drivers/vfio/vfio.h b/drivers/vfio/vfio.h
> new file mode 100644
> index 00000000000000..a78de649eb2f16
> --- /dev/null
> +++ b/drivers/vfio/vfio.h
> @@ -0,0 +1,47 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
> + *     Author: Alex Williamson <alex.williamson@xxxxxxxxxx>
> + */
> +
> +/* events for the backend driver notify callback */
> +enum vfio_iommu_notify_type {
> +	VFIO_IOMMU_CONTAINER_CLOSE = 0,
> +};
> +
> +/**
> + * struct vfio_iommu_driver_ops - VFIO IOMMU driver callbacks
> + */
> +struct vfio_iommu_driver_ops {
> +	char		*name;
> +	struct module	*owner;
> +	void		*(*open)(unsigned long arg);
> +	void		(*release)(void *iommu_data);
> +	long		(*ioctl)(void *iommu_data, unsigned int cmd,
> +				 unsigned long arg);
> +	int		(*attach_group)(void *iommu_data,
> +					struct iommu_group *group);
> +	void		(*detach_group)(void *iommu_data,
> +					struct iommu_group *group);
> +	int		(*pin_pages)(void *iommu_data,
> +				     struct iommu_group *group,
> +				     unsigned long *user_pfn,
> +				     int npage, int prot,
> +				     unsigned long *phys_pfn);
> +	int		(*unpin_pages)(void *iommu_data,
> +				       unsigned long *user_pfn, int npage);
> +	int		(*register_notifier)(void *iommu_data,
> +					     unsigned long *events,
> +					     struct notifier_block *nb);
> +	int		(*unregister_notifier)(void *iommu_data,
> +					       struct notifier_block *nb);
> +	int		(*dma_rw)(void *iommu_data, dma_addr_t
> user_iova,
> +				  void *data, size_t count, bool write);
> +	struct iommu_domain *(*group_iommu_domain)(void
> *iommu_data,
> +						   struct iommu_group
> *group);
> +	void		(*notify)(void *iommu_data,
> +				  enum vfio_iommu_notify_type event);
> +};
> +
> +int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops *ops);
> +void vfio_unregister_iommu_driver(const struct vfio_iommu_driver_ops
> *ops);
> diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c
> b/drivers/vfio/vfio_iommu_spapr_tce.c
> index fe888b5dcc0062..3efd09faeca4a8 100644
> --- a/drivers/vfio/vfio_iommu_spapr_tce.c
> +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
> @@ -20,6 +20,7 @@
>  #include <linux/sched/mm.h>
>  #include <linux/sched/signal.h>
>  #include <linux/mm.h>
> +#include "vfio.h"
> 
>  #include <asm/iommu.h>
>  #include <asm/tce.h>
> diff --git a/drivers/vfio/vfio_iommu_type1.c
> b/drivers/vfio/vfio_iommu_type1.c
> index 0b4f7c174c7a2b..92777797578e50 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -40,6 +40,7 @@
>  #include <linux/notifier.h>
>  #include <linux/dma-iommu.h>
>  #include <linux/irqdomain.h>
> +#include "vfio.h"
> 
>  #define DRIVER_VERSION  "0.2"
>  #define DRIVER_AUTHOR   "Alex Williamson
> <alex.williamson@xxxxxxxxxx>"
> diff --git a/include/linux/vfio.h b/include/linux/vfio.h
> index 7a57a0077f9637..76191d7abed185 100644
> --- a/include/linux/vfio.h
> +++ b/include/linux/vfio.h
> @@ -82,50 +82,6 @@ extern void vfio_device_put(struct vfio_device
> *device);
> 
>  int vfio_assign_device_set(struct vfio_device *device, void *set_id);
> 
> -/* events for the backend driver notify callback */
> -enum vfio_iommu_notify_type {
> -	VFIO_IOMMU_CONTAINER_CLOSE = 0,
> -};
> -
> -/**
> - * struct vfio_iommu_driver_ops - VFIO IOMMU driver callbacks
> - */
> -struct vfio_iommu_driver_ops {
> -	char		*name;
> -	struct module	*owner;
> -	void		*(*open)(unsigned long arg);
> -	void		(*release)(void *iommu_data);
> -	long		(*ioctl)(void *iommu_data, unsigned int cmd,
> -				 unsigned long arg);
> -	int		(*attach_group)(void *iommu_data,
> -					struct iommu_group *group);
> -	void		(*detach_group)(void *iommu_data,
> -					struct iommu_group *group);
> -	int		(*pin_pages)(void *iommu_data,
> -				     struct iommu_group *group,
> -				     unsigned long *user_pfn,
> -				     int npage, int prot,
> -				     unsigned long *phys_pfn);
> -	int		(*unpin_pages)(void *iommu_data,
> -				       unsigned long *user_pfn, int npage);
> -	int		(*register_notifier)(void *iommu_data,
> -					     unsigned long *events,
> -					     struct notifier_block *nb);
> -	int		(*unregister_notifier)(void *iommu_data,
> -					       struct notifier_block *nb);
> -	int		(*dma_rw)(void *iommu_data, dma_addr_t
> user_iova,
> -				  void *data, size_t count, bool write);
> -	struct iommu_domain *(*group_iommu_domain)(void
> *iommu_data,
> -						   struct iommu_group
> *group);
> -	void		(*notify)(void *iommu_data,
> -				  enum vfio_iommu_notify_type event);
> -};
> -
> -extern int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops
> *ops);
> -
> -extern void vfio_unregister_iommu_driver(
> -				const struct vfio_iommu_driver_ops *ops);
> -
>  /*
>   * External user API
>   */
> --
> 2.30.2





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux