On Fri, 2025-02-28 at 16:44 -0500, Matthew Rosato wrote: > Extend the existing dma_cleanup_tables to also handle region second and > region first tables. > > Signed-off-by: Matthew Rosato <mjrosato@xxxxxxxxxxxxx> > --- > drivers/iommu/s390-iommu.c | 71 ++++++++++++++++++++++++++++++++++---- > 1 file changed, 64 insertions(+), 7 deletions(-) > > diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c > index cad032d4c9a6..f2cda0ce0fe9 100644 > --- a/drivers/iommu/s390-iommu.c > +++ b/drivers/iommu/s390-iommu.c > @@ -121,6 +121,22 @@ static inline int pt_entry_isvalid(unsigned long entry) > return (entry & ZPCI_PTE_VALID_MASK) == ZPCI_PTE_VALID; > } > > --- snip --- > + > +static void dma_cleanup_tables(struct s390_domain *domain) > +{ > + int rtx, rsx, rfx; > + > + if (!domain->dma_table) > return; > > - for (rtx = 0; rtx < ZPCI_TABLE_ENTRIES; rtx++) > - if (reg_entry_isvalid(table[rtx])) > - dma_free_seg_table(table[rtx]); > + switch (domain->origin_type) { > + case ZPCI_TABLE_TYPE_RFX: > + for (rfx = 0; rfx < ZPCI_TABLE_ENTRIES; rfx++) > + if (reg_entry_isvalid(domain->dma_table[rfx])) > + dma_free_rs_table(domain->dma_table[rfx]); > + break; > + case ZPCI_TABLE_TYPE_RSX: > + for (rsx = 0; rsx < ZPCI_TABLE_ENTRIES; rsx++) > + if (reg_entry_isvalid(domain->dma_table[rsx])) > + dma_free_rt_table(domain->dma_table[rsx]); > + break; > + case ZPCI_TABLE_TYPE_RTX: > + for (rtx = 0; rtx < ZPCI_TABLE_ENTRIES; rtx++) > + if (reg_entry_isvalid(domain->dma_table[rtx])) > + dma_free_seg_table(domain->dma_table[rtx]); > + break; > + default: > + WARN_ONCE(1, "Invalid IOMMU table (%x)\n", domain->origin_type); > + return; > + } > > - dma_free_cpu_table(table); > + dma_free_cpu_table(domain->dma_table); > } > > static unsigned long *dma_alloc_page_table(gfp_t gfp) > @@ -358,7 +415,7 @@ static void s390_iommu_rcu_free_domain(struct rcu_head *head) > { > struct s390_domain *s390_domain = container_of(head, struct s390_domain, rcu); > > - dma_cleanup_tables(s390_domain->dma_table); > + dma_cleanup_tables(s390_domain); > kfree(s390_domain); > } > Looks good to me. Reviewed-by: Niklas Schnelle <schnelle@xxxxxxxxxxxxx>