From: Xu Yilun <yilun.xu@linux.intel.com>
To: jgg@nvidia.com, jgg@ziepe.ca, kevin.tian@intel.com,
will@kernel.org, aneesh.kumar@kernel.org
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
joro@8bytes.org, robin.murphy@arm.com, shuah@kernel.org,
nicolinc@nvidia.com, aik@amd.com, dan.j.williams@intel.com,
baolu.lu@linux.intel.com, yilun.xu@intel.com
Subject: [PATCH v5 3/8] iommufd: Add a pre_destroy() op for objects
Date: Tue, 15 Jul 2025 14:32:40 +0800 [thread overview]
Message-ID: <20250715063245.1799534-4-yilun.xu@linux.intel.com> (raw)
In-Reply-To: <20250715063245.1799534-1-yilun.xu@linux.intel.com>
Add a pre_destroy() op which gives objects a chance to clear their
short term users references before destruction. This op is intended for
external driver created objects (e.g. idev) which does deterministic
destruction.
In order to manage the lifecycle of interrelated objects as well as the
deterministic destruction (e.g. vdev can't outlive idev, and idev
destruction can't fail), short term users references are allowed to
live out of an ioctl execution. An immediate use case is, vdev holds
idev's short term user reference until vdev destruction completes, idev
leverages existing wait_shortterm mechanism to ensure it is destroyed
after vdev.
This extended usage makes the referenced object unable to just wait for
its reference gone. It needs to actively trigger the reference removal,
as well as prevent new references before wait. Should implement these
work in pre_destroy().
Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
---
drivers/iommu/iommufd/main.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c
index 71135f0ec72d..53085d24ce4a 100644
--- a/drivers/iommu/iommufd/main.c
+++ b/drivers/iommu/iommufd/main.c
@@ -23,6 +23,7 @@
#include "iommufd_test.h"
struct iommufd_object_ops {
+ void (*pre_destroy)(struct iommufd_object *obj);
void (*destroy)(struct iommufd_object *obj);
void (*abort)(struct iommufd_object *obj);
};
@@ -160,6 +161,9 @@ static int iommufd_object_dec_wait_shortterm(struct iommufd_ctx *ictx,
if (refcount_dec_and_test(&to_destroy->shortterm_users))
return 0;
+ if (iommufd_object_ops[to_destroy->type].pre_destroy)
+ iommufd_object_ops[to_destroy->type].pre_destroy(to_destroy);
+
if (wait_event_timeout(ictx->destroy_wait,
refcount_read(&to_destroy->shortterm_users) == 0,
msecs_to_jiffies(60000)))
--
2.25.1
next prev parent reply other threads:[~2025-07-15 6:41 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-15 6:32 [PATCH v5 0/8] iommufd: Destroy vdevice on device unbind Xu Yilun
2025-07-15 6:32 ` [PATCH v5 1/8] iommufd/viommu: Roll back to use iommufd_object_alloc() for vdevice Xu Yilun
2025-07-15 6:32 ` [PATCH v5 2/8] iommufd: Add iommufd_object_tombstone_user() helper Xu Yilun
2025-07-15 6:32 ` Xu Yilun [this message]
2025-07-15 13:19 ` [PATCH v5 3/8] iommufd: Add a pre_destroy() op for objects Jason Gunthorpe
2025-07-15 6:32 ` [PATCH v5 4/8] iommufd: Destroy vdevice on idevice destroy Xu Yilun
2025-07-15 13:37 ` Jason Gunthorpe
2025-07-15 6:32 ` [PATCH v5 5/8] iommufd/vdevice: Remove struct device reference from struct vdevice Xu Yilun
2025-07-15 13:38 ` Jason Gunthorpe
2025-07-15 18:56 ` Nicolin Chen
2025-07-16 6:09 ` Xu Yilun
2025-07-15 20:44 ` kernel test robot
2025-07-15 6:32 ` [PATCH v5 6/8] iommufd/selftest: Explicitly skip tests for inapplicable variant Xu Yilun
2025-07-15 19:13 ` Nicolin Chen
2025-07-16 6:23 ` Xu Yilun
2025-07-15 6:32 ` [PATCH v5 7/8] iommufd/selftest: Add coverage for vdevice tombstone Xu Yilun
2025-07-15 19:03 ` Nicolin Chen
2025-07-15 6:32 ` [PATCH v5 8/8] iommufd: Rename some shortterm-related identifiers Xu Yilun
2025-07-15 13:39 ` Jason Gunthorpe
2025-07-15 19:13 ` Nicolin Chen
2025-07-15 19:33 ` [PATCH v5 0/8] iommufd: Destroy vdevice on device unbind Nicolin Chen
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=20250715063245.1799534-4-yilun.xu@linux.intel.com \
--to=yilun.xu@linux.intel.com \
--cc=aik@amd.com \
--cc=aneesh.kumar@kernel.org \
--cc=baolu.lu@linux.intel.com \
--cc=dan.j.williams@intel.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=jgg@ziepe.ca \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=shuah@kernel.org \
--cc=will@kernel.org \
--cc=yilun.xu@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®