All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@kernel.org>
Cc: sashiko-reviews@lists.linux.dev, iommu@lists.linux.dev,
	linux-coco@lists.linux.dev
Subject: Re: [PATCH v7 16/16] PCI/TSM: wait for vdevice contexts before removing a DSM
Date: Thu, 29 Oct 2026 09:50:54 -0300	[thread overview]
Message-ID: <20261029125054.GG3040767@nvidia.com> (raw)
In-Reply-To: <yq5a4ie4c1lw.fsf@kernel.org>

On Thu, Oct 29, 2026 at 02:41:55PM +0530, Aneesh Kumar K.V wrote:
> Jason Gunthorpe <jgg@nvidia.com> writes:
> 
> > On Tue, Oct 13, 2026 at 03:14:54PM +0530, Aneesh Kumar K.V wrote:
> >> Jason Gunthorpe <jgg@nvidia.com> writes:
> >> 
> >> > On Mon, Oct 12, 2026 at 03:31:17PM +0530, Aneesh Kumar K.V wrote:
> >> >
> >> >> With this series, vdevices hold a reference to their parent vIOMMU,
> >> >> which pins arm-cca-host. sysfs unbind is disabled, and the SMCCC
> >> >> provider device has no hot-unplug path.
> >> >
> >> > It probably needs some logic like vfio has to prevent unregister from
> >> > completing if there are active users. The module pin should prevent it
> >> > from ever triggering, but as a safety precaution.
> >> >
> >> 
> >> Are you suggesting that tsm_unregister() should return an error or wait,
> >> as device removal does? Returning an error would be much easier to
> >> implement by adding an unregistering flag to tsm_dev, set under
> >> pci_tsm_rwsem after checking all pf0->context_users counters.
> >
> > I didn't check it closely but the usual flow is for 'unregister' to
> > wait until everything is done using it, possibly with a shootdown
> > mechanism.
> >
> > I'm not sure we can implement a sane shootdown for iommufd's
> > consumption of the tsm, but we can at least do the wait.
> >
> 
> This will require.
> 
> @@ -116,6 +119,13 @@ struct tsm_dev {
>  	struct device dev;
>  	int id;
>  	const struct pci_tsm_ops *pci_ops;
> +	/* Serializes user acquisition against unregister */
> +	struct mutex users_lock;
> +	/* Written under users_lock, read with READ_ONCE() by bus code. */
> +	bool unregistering;
> +	/* Registration reference plus users that must finish before teardown. */
> +	refcount_t users;
> +	struct completion users_drained;
>  };
>  
> 
> When a vIOMMU pins the tsm_dev, it must also increment users. This
> requires a new users_lock, since all existing locking is in pci_tsm.

I usually call this 'registration lock' and make it a rwsem.

Holding the read side of the 'regitration lock' means the driver
cannot be unbound during the critical region.

Then ontop of that you use a refcount and completion.

refcount can only be incr'd while holding the registration lock.

Teardown decrs the refcount, holds the write side of the registration
lock and waits for the completion. Read side is always try so it bails
once the write side is taken, preventing new refcount incrs.

Most things use the registration lock, but long lived things would
transition to the refcount.

> I can add this as a separate patch, and then we can decide whether to
> keep it. I wonder whether we can avoid this complexity, since the vIOMMU
> already pins the TSM backend module and we expect unregister to be
> called only from module_exit().

It is probably good practice to have a proper lifecycle scheme that
does not only involve module refcounting. It will be easier to
understand and use properly.

Jason

  reply	other threads:[~2026-10-29 12:51 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-08  5:59 [PATCH v7 00/16] iommufd: vIOMMUs and TSM guest requests for confidential guests Aneesh Kumar K.V (Arm)
2026-10-08  5:59 ` [PATCH v7 01/16] KVM: Introduce file_to_kvm_<arch>() infrastructure Aneesh Kumar K.V (Arm)
2026-10-08  6:11   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 02/16] KVM: Add file back-pointer to struct kvm Aneesh Kumar K.V (Arm)
2026-10-08  6:16   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 03/16] KVM: x86: Use file_to_kvm_x86() in SEV Aneesh Kumar K.V (Arm)
2026-10-08  6:07   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 04/16] KVM/vfio: Use file-based reference counting for KVM Aneesh Kumar K.V (Arm)
2026-10-08  6:27   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 05/16] KVM: Restrict kvm_get_kvm/kvm_put_kvm export to internal KVM modules Aneesh Kumar K.V (Arm)
2026-10-08  6:08   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 06/16] KVM: Remove unused file_is_kvm Aneesh Kumar K.V (Arm)
2026-10-08  6:06   ` sashiko-bot
2026-10-08  5:59 ` [PATCH v7 07/16] iommufd/device: Associate KVM file pointer with iommufd_device Aneesh Kumar K.V (Arm)
2026-10-08  6:20   ` sashiko-bot
2026-10-12  8:33     ` Aneesh Kumar K.V
2026-10-12 12:24       ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 08/16] iommufd/viommu: Keep a reference to the KVM file Aneesh Kumar K.V (Arm)
2026-10-08  6:10   ` sashiko-bot
2026-10-14 17:59   ` Jacob Pan
2026-10-29  6:26     ` Aneesh Kumar K.V
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 09/16] tsm: Remove the device from lookup before PCI teardown Aneesh Kumar K.V (Arm)
2026-10-08  6:15   ` sashiko-bot
2026-10-12  9:14     ` Aneesh Kumar K.V
2026-10-12 13:01       ` Jason Gunthorpe
2026-10-13  8:49         ` Aneesh Kumar K.V
2026-10-13 11:57           ` Jason Gunthorpe
2026-10-29  4:22           ` Xu Yilun
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-29  6:56     ` Aneesh Kumar K.V
2026-10-08  5:59 ` [PATCH v7 10/16] iommufd: Add the vdevice TSM request ioctl Aneesh Kumar K.V (Arm)
2026-10-08  6:10   ` sashiko-bot
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-29  9:37     ` Aneesh Kumar K.V
2026-10-29 13:01       ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 11/16] PCI/TSM: Remove the legacy guest request interface Aneesh Kumar K.V (Arm)
2026-10-08  6:11   ` sashiko-bot
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 12/16] PCI/TSM: Add vIOMMU-bound contexts for vdevices Aneesh Kumar K.V (Arm)
2026-10-08  6:18   ` sashiko-bot
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 13/16] iommufd/viommu: Select vIOMMU operations before allocation Aneesh Kumar K.V (Arm)
2026-10-08  6:27   ` sashiko-bot
2026-10-12  9:37     ` Aneesh Kumar K.V
2026-10-12 13:05       ` Jason Gunthorpe
2026-10-13  9:11         ` Aneesh Kumar K.V
2026-10-13 12:33           ` Jason Gunthorpe
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-29  8:21     ` Aneesh Kumar K.V
2026-10-29 12:43       ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 14/16] iommufd/viommu: Allow PCI TSM backends to provide vIOMMU operations Aneesh Kumar K.V (Arm)
2026-10-08  6:19   ` sashiko-bot
2026-10-12  9:55     ` Aneesh Kumar K.V
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 15/16] iommufd: Allow vIOMMUs without a parent HWPT Aneesh Kumar K.V (Arm)
2026-10-08  6:24   ` sashiko-bot
2026-10-28 19:07   ` Jason Gunthorpe
2026-10-08  5:59 ` [PATCH v7 16/16] PCI/TSM: wait for vdevice contexts before removing a DSM Aneesh Kumar K.V (Arm)
2026-10-08  6:25   ` sashiko-bot
2026-10-12 10:01     ` Aneesh Kumar K.V
2026-10-12 13:07       ` Jason Gunthorpe
2026-10-13  9:44         ` Aneesh Kumar K.V
2026-10-13 11:59           ` Jason Gunthorpe
2026-10-29  9:11             ` Aneesh Kumar K.V
2026-10-29 12:50               ` Jason Gunthorpe [this message]
2026-10-12 20:34   ` Bjorn Helgaas
2026-10-28 19:07   ` 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=20261029125054.GG3040767@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=aneesh.kumar@kernel.org \
    --cc=iommu@lists.linux.dev \
    --cc=linux-coco@lists.linux.dev \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.