Re: [PATCH v2 03/16] iommu: Implement IOMMU domain preservation

From: Pranjal Shrivastava

Date: Mon May 18 2026 - 17:37:46 EST


On Mon, May 18, 2026 at 06:55:50PM +0000, Samiullah Khawaja wrote:
> On Mon, May 18, 2026 at 01:13:49PM +0000, Pranjal Shrivastava wrote:
> > On Mon, Apr 27, 2026 at 05:56:20PM +0000, Samiullah Khawaja wrote:
> > > Add IOMMU domain ops that can be implemented by the IOMMU drivers if
[snip]
> > > + ret = domain->ops->preserve(domain, domain_ser);
> > > + if (ret) {
> > > + domain_ser->hdr.deleted = true;
> >
> > Nit: This will become domain_ser->hdr.flags |= IOMMU_SER_FLAG_DELETED;
> > once we convert the bitfields in PATCH 2 to flags.
>
> Agreed. I think it is being discussed that bitfields are fine in the
> other thread, but I will switch it to flags for readibility anyway.

Ack. Thanks!

> >
> > > + return ret;
> > > + }
> > > +
> > > + domain->preserved_state = domain_ser;
> > > + *ser = domain_ser;
> > > + return 0;
> > > +}
> > > +EXPORT_SYMBOL_GPL(iommu_domain_preserve);
> > > +
> >
> > [...]
> >
> > > static inline bool iommu_is_dma_domain(struct iommu_domain *domain)
> > > @@ -752,6 +757,11 @@ struct iommu_ops {
> > > * specific mechanisms.
> > > * @set_pgtable_quirks: Set io page table quirks (IO_PGTABLE_QUIRK_*)
> > > * @free: Release the domain after use.
> > > + * @preserve: Preserve the iommu domain for liveupdate.
> > > + * Returns 0 on success, a negative errno on failure.
> > > + * @unpreserve: Unpreserve the iommu domain that was preserved earlier.
> > > + * @restore: Restore the iommu domain after liveupdate.
> > > + * Returns 0 on success, a negative errno on failure.
> > > */
> > > struct iommu_domain_ops {
> > > int (*attach_dev)(struct iommu_domain *domain, struct device *dev,
> > > @@ -782,6 +792,9 @@ struct iommu_domain_ops {
> > > unsigned long quirks);
> > >
> > > void (*free)(struct iommu_domain *domain);
> > > + int (*preserve)(struct iommu_domain *domain, struct iommu_domain_ser *ser);
> > > + void (*unpreserve)(struct iommu_domain *domain, struct iommu_domain_ser *ser);
> > > + int (*restore)(struct iommu_domain *domain, struct iommu_domain_ser *ser);
> >
> > Nit: Should we add restore in the patch we implement it?
>
> The ops are implemented in iommupt (separate scope) and it is done after
> the iommu pages patch as that is also required for it.

I missed the restore implementation in Patch 6, I thought that'll be
covered in a diff series. Mb. Please ignore this comment.

> >
> > > };
> >
> > With the above nits,
> >
> > Reviewed-by: Pranjal Shrivastava <praan@xxxxxxxxxx>
>
> Thanks Pranjal.
> >
> > Thanks,
> > Praan
>
> Sami

Thanks.
Praan