On Tue, Jan 17, 2023 at 03:35:08AM +0000, Tian, Kevin wrote: > > From: Jason Gunthorpe <jgg@xxxxxxxxxx> > > Sent: Saturday, January 7, 2023 12:43 AM > > > > @@ -2676,7 +2676,7 @@ static int copy_context_table(struct intel_iommu > > *iommu, > > if (!old_ce) > > goto out; > > > > - new_ce = alloc_pgtable_page(iommu->node); > > + new_ce = alloc_pgtable_page(iommu->node, > > GFP_KERNEL); > > GFP_ATOMIC Can't be: old_ce = memremap(old_ce_phys, PAGE_SIZE, MEMREMAP_WB); if (!old_ce) goto out; new_ce = alloc_pgtable_page(iommu->node, GFP_KERNEL); if (!new_ce) memremap() is sleeping. And the only caller is: ctxt_tbls = kcalloc(ctxt_table_entries, sizeof(void *), GFP_KERNEL); if (!ctxt_tbls) goto out_unmap; for (bus = 0; bus < 256; bus++) { ret = copy_context_table(iommu, &old_rt[bus], ctxt_tbls, bus, ext); Jason