From: Christoph Hellwig <hch@lst.de>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
Cornelia Huck <cohuck@redhat.com>,
kvm@vger.kernel.org, "Raj, Ashok" <ashok.raj@intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Daniel Vetter <daniel@ffwll.ch>, Christoph Hellwig <hch@lst.de>,
Leon Romanovsky <leonro@nvidia.com>,
Max Gurtovoy <mgurtovoy@nvidia.com>,
Tarun Gupta <targupta@nvidia.com>
Subject: Re: [PATCH 01/10] vfio: Simplify the lifetime logic for vfio_device
Date: Wed, 10 Mar 2021 08:23:40 +0100 [thread overview]
Message-ID: <20210310072340.GA2659@lst.de> (raw)
In-Reply-To: <1-v1-7355d38b9344+17481-vfio1_jgg@nvidia.com>
On Tue, Mar 09, 2021 at 05:38:43PM -0400, Jason Gunthorpe wrote:
> The vfio_device is using a 'sleep until all refs go to zero' pattern for
> its lifetime, but it is indirectly coded by repeatedly scanning the group
> list waiting for the device to be removed on its own.
>
> Switch this around to be a direct representation, use a refcount to count
> the number of places that are blocking destruction and sleep directly on a
> completion until that counter goes to zero. kfree the device after other
> accesses have been excluded in vfio_del_group_dev(). This is a fairly
> common Linux idiom.
>
> This simplifies a couple of things:
>
> - kref_put_mutex() is very rarely used in the kernel. Here it is being
> used to prevent a zero ref device from being seen in the group
> list. Instead allow the zero ref device to continue to exist in the
> device_list and use refcount_inc_not_zero() to exclude it once refs go
> to zero.
>
> - get/putting the group while get/putting the device. The device already
> holds a reference to the group, set during vfio_group_create_device(),
> there is no need for extra reference traffic. Cleanly have the balancing
> group put in vfio_del_group_dev() before the kfree().
Might it be worth to split this further up into separate patches for
each of the changes?
The actual changes do look good, though:
Reviewed-by: Christoph Hellwig <hch@lst.de>
next prev parent reply other threads:[~2021-03-10 7:24 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-09 21:38 [PATCH 00/10] Embed struct vfio_device in all sub-structures Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 01/10] vfio: Simplify the lifetime logic for vfio_device Jason Gunthorpe
2021-03-10 7:23 ` Christoph Hellwig [this message]
2021-03-12 15:41 ` Jason Gunthorpe
2021-03-12 16:32 ` Christoph Hellwig
2021-03-09 21:38 ` [PATCH 02/10] vfio: Split creation of a vfio_device into init and register ops Jason Gunthorpe
2021-03-10 7:26 ` Christoph Hellwig
2021-03-12 13:04 ` Liu, Yi L
2021-03-12 14:23 ` Jason Gunthorpe
2021-03-12 16:31 ` Christoph Hellwig
2021-03-09 21:38 ` [PATCH 03/10] vfio/platform: Use vfio_init/register/unregister_group_dev Jason Gunthorpe
2021-03-10 7:28 ` Christoph Hellwig
2021-03-12 17:00 ` Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 04/10] vfio/fsl-mc: " Jason Gunthorpe
2021-03-10 7:30 ` Christoph Hellwig
2021-03-10 12:43 ` Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 05/10] vfio/pci: " Jason Gunthorpe
2021-03-10 7:31 ` Christoph Hellwig
2021-03-12 12:53 ` Liu, Yi L
2021-03-12 13:58 ` Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 06/10] vfio/mdev: " Jason Gunthorpe
2021-03-10 7:31 ` Christoph Hellwig
2021-03-12 13:09 ` Liu, Yi L
2021-03-09 21:38 ` [PATCH 07/10] vfio/mdev: Make to_mdev_device() into a static inline Jason Gunthorpe
2021-03-10 7:32 ` Christoph Hellwig
2021-03-09 21:38 ` [PATCH 08/10] vfio: Make vfio_device_ops pass a 'struct vfio_device *' instead of 'void *' Jason Gunthorpe
2021-03-10 5:52 ` Dan Williams
2021-03-10 6:24 ` Leon Romanovsky
2021-03-10 12:58 ` Jason Gunthorpe
2021-03-10 20:01 ` Dan Williams
2021-03-12 13:42 ` Liu, Yi L
2021-03-12 14:06 ` Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 09/10] vfio/pci: Replace uses of vfio_device_data() with container_of Jason Gunthorpe
2021-03-10 7:36 ` Christoph Hellwig
2021-03-10 19:59 ` Jason Gunthorpe
2021-03-11 11:21 ` Christoph Hellwig
2021-03-12 13:42 ` Liu, Yi L
2021-03-12 14:09 ` Jason Gunthorpe
2021-03-09 21:38 ` [PATCH 10/10] vfio: Remove device_data from the vfio bus driver API Jason Gunthorpe
2021-03-10 7:37 ` Christoph Hellwig
2021-03-10 23:52 ` [PATCH 00/10] Embed struct vfio_device in all sub-structures Alex Williamson
2021-03-10 23:57 ` 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=20210310072340.GA2659@lst.de \
--to=hch@lst.de \
--cc=alex.williamson@redhat.com \
--cc=ashok.raj@intel.com \
--cc=cohuck@redhat.com \
--cc=dan.j.williams@intel.com \
--cc=daniel@ffwll.ch \
--cc=jgg@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=leonro@nvidia.com \
--cc=mgurtovoy@nvidia.com \
--cc=targupta@nvidia.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.