From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: cohuck@redhat.com, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org, peterx@redhat.com
Subject: Re: [PATCH v1 07/14] vfio: Add a device notifier interface
Date: Mon, 8 Mar 2021 20:46:27 -0400 [thread overview]
Message-ID: <20210309004627.GD4247@nvidia.com> (raw)
In-Reply-To: <161524010999.3480.14282676267275402685.stgit@gimli.home>
On Mon, Mar 08, 2021 at 02:48:30PM -0700, Alex Williamson wrote:
> Using a vfio device, a notifier block can be registered to receive
> select device events. Notifiers can only be registered for contained
> devices, ie. they are available through a user context. Registration
> of a notifier increments the reference to that container context
> therefore notifiers must minimally respond to the release event by
> asynchronously removing notifiers.
>
> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
> drivers/vfio/Kconfig | 1 +
> drivers/vfio/vfio.c | 35 +++++++++++++++++++++++++++++++++++
> include/linux/vfio.h | 9 +++++++++
> 3 files changed, 45 insertions(+)
>
> diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
> index 90c0525b1e0c..9a67675c9b6c 100644
> +++ b/drivers/vfio/Kconfig
> @@ -23,6 +23,7 @@ menuconfig VFIO
> tristate "VFIO Non-Privileged userspace driver framework"
> select IOMMU_API
> select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64)
> + select SRCU
> help
> VFIO provides a framework for secure userspace device drivers.
> See Documentation/driver-api/vfio.rst for more details.
> diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> index c47895539a1a..7f6d00e54e83 100644
> +++ b/drivers/vfio/vfio.c
> @@ -105,6 +105,7 @@ struct vfio_device {
> struct list_head group_next;
> void *device_data;
> struct inode *inode;
> + struct srcu_notifier_head notifier;
> };
>
> #ifdef CONFIG_VFIO_NOIOMMU
> @@ -601,6 +602,7 @@ struct vfio_device *vfio_group_create_device(struct vfio_group *group,
> device->ops = ops;
> device->device_data = device_data;
> dev_set_drvdata(dev, device);
> + srcu_init_notifier_head(&device->notifier);
>
> /* No need to get group_lock, caller has group reference */
> vfio_group_get(group);
> @@ -1785,6 +1787,39 @@ static const struct file_operations vfio_device_fops = {
> .mmap = vfio_device_fops_mmap,
> };
>
> +int vfio_device_register_notifier(struct vfio_device *device,
> + struct notifier_block *nb)
> +{
> + int ret;
> +
> + /* Container ref persists until unregister on success */
> + ret = vfio_group_add_container_user(device->group);
I'm having trouble guessing why we need to refcount the group to add a
notifier to the device's notifier chain?
I suppose it actually has to do with the MMIO mapping? But I don't
know what the relation is between MMIO mappings in the IOMMU and the
container? This could deserve a comment?
> +void vfio_device_unregister_notifier(struct vfio_device *device,
> + struct notifier_block *nb)
> +{
> + if (!srcu_notifier_chain_unregister(&device->notifier, nb))
> + vfio_group_try_dissolve_container(device->group);
> +}
> +EXPORT_SYMBOL_GPL(vfio_device_unregister_notifier);
Is the SRCU still needed with the new locking? With a cursory look I
only noticed this called under the reflck->lock ?
Jason
next prev parent reply other threads:[~2021-03-09 0:47 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-08 21:47 [PATCH v1 00/14] vfio: Device memory DMA mapping improvements Alex Williamson
2021-03-08 21:47 ` [PATCH v1 01/14] vfio: Create vfio_fs_type with inode per device Alex Williamson
2021-03-09 8:36 ` Christoph Hellwig
2021-04-09 4:54 ` 答复: " Zengtao (B)
2021-04-09 14:24 ` Alex Williamson
2021-04-09 17:32 ` Jason Gunthorpe
2021-04-12 4:03 ` 答复: " Zengtao (B)
2021-04-12 4:09 ` Zengtao (B)
2021-03-08 21:47 ` [PATCH v1 02/14] vfio: Update vfio_add_group_dev() API Alex Williamson
2021-03-10 7:48 ` Christoph Hellwig
2021-03-10 12:19 ` Jason Gunthorpe
2021-03-10 15:28 ` Alex Williamson
2021-03-11 11:23 ` Christoph Hellwig
2021-03-08 21:47 ` [PATCH v1 03/14] vfio: Export unmap_mapping_range() wrapper Alex Williamson
2021-03-08 21:48 ` [PATCH v1 04/14] vfio/pci: Use vfio_device_unmap_mapping_range() Alex Williamson
2021-03-08 21:48 ` [PATCH v1 05/14] vfio: Create a vfio_device from vma lookup Alex Williamson
2021-03-08 21:48 ` [PATCH v1 06/14] vfio: Add vma to pfn callback Alex Williamson
2021-03-09 0:33 ` Jason Gunthorpe
2021-03-08 21:48 ` [PATCH v1 07/14] vfio: Add a device notifier interface Alex Williamson
2021-03-09 0:46 ` Jason Gunthorpe [this message]
2021-03-09 15:45 ` Alex Williamson
2021-03-09 16:47 ` Jason Gunthorpe
2021-03-10 7:56 ` Christoph Hellwig
2021-03-19 22:25 ` Alex Williamson
2021-03-22 15:16 ` Christoph Hellwig
2021-03-08 21:48 ` [PATCH v1 08/14] vfio/pci: Notify on device release Alex Williamson
2021-03-08 21:48 ` [PATCH v1 09/14] vfio/type1: Refactor pfn_list clearing Alex Williamson
2021-03-10 8:01 ` Christoph Hellwig
2021-03-08 21:49 ` [PATCH v1 10/14] vfio/type1: Pass iommu and dma objects through to vaddr_get_pfn Alex Williamson
2021-03-08 21:49 ` [PATCH v1 11/14] vfio/type1: Register device notifier Alex Williamson
2021-03-10 8:03 ` Christoph Hellwig
2021-03-08 21:49 ` [PATCH v1 12/14] vfio/type1: Support batching of device mappings Alex Williamson
2021-03-09 1:04 ` Jason Gunthorpe
2021-03-08 21:49 ` [PATCH v1 13/14] vfio: Remove extern from declarations across vfio Alex Williamson
2021-03-09 0:21 ` Halil Pasic
2021-03-09 1:07 ` Jason Gunthorpe
2021-03-08 21:49 ` [PATCH v1 14/14] vfio: Cleanup use of bare unsigned Alex Williamson
2021-03-09 1:07 ` Jason Gunthorpe
2021-03-09 8:31 ` Christoph Hellwig
2021-03-09 1:06 ` [PATCH v1 00/14] vfio: Device memory DMA mapping improvements Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210309004627.GD4247@nvidia.com \
--to=jgg@nvidia.com \
--cc=alex.williamson@redhat.com \
--cc=cohuck@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterx@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.