Re: [PATCH v2 2/3] iommufd/viommu: Publish a vDEVICE only after vdevice_init() succeeds

From: Jason Gunthorpe

Date: Mon Jul 06 2026 - 15:02:51 EST


On Sun, Jul 05, 2026 at 10:36:10PM -0700, Nicolin Chen wrote:
> @@ -218,18 +218,28 @@ int iommufd_vdevice_alloc_ioctl(struct iommufd_ucmd *ucmd)
> */
> idev->vdev = vdev;
>
> - curr = xa_cmpxchg(&viommu->vdevs, virt_id, NULL, vdev, GFP_KERNEL);
> - if (curr) {
> - rc = xa_err(curr) ?: -EEXIST;
> + /*
> + * Reserve the slot with a zero entry (reads back as NULL) until the
> + * vdevice_init() op accepts the vDEVICE. Only the xa_* helpers hide a
> + * reserved entry, so never use a raw xas_* iterator on this xarray.
> + */
> + rc = xa_insert(&viommu->vdevs, virt_id, NULL, GFP_KERNEL);
> + if (rc) {

Why xa_insert() not xa_reserve() ?

Jason