> > +int kernel_unmap_pages_in_pgd(pgd_t *pgd, unsigned long address, > > + unsigned long numpages) > > +{ > > + int retval; > > + > > + /* > > + * The typical sequence for unmapping is to find a pte through > > + * lookup_address_in_pgd() (ideally, it should never return NULL > because > > + * the address is already mapped) and change it's protections. > > + * As pfn is the *target* of a mapping, it's not useful while unmapping. > > + */ > > + struct cpa_data cpa = { > > + .vaddr = &address, > > + .pgd = pgd, > > + .numpages = numpages, > > + .mask_set = __pgprot(0), > > + .mask_clr = __pgprot(_PAGE_PRESENT | _PAGE_RW), > > + .flags = 0, > > + }; > > + > > + retval = __change_page_attr_set_clr(&cpa, 0); > > + __flush_tlb_all(); > > So, just to clarify, 'pfn' is kept at 0 here? Might make sense to write it out > explicitly like 'flags', even if it's not used by __change_page_attr_set_clr(). Sure! Makes sense. I will add it. Regards, Sai