On Thu, Jun 1, 2023 at 12:40 AM Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > > Hi Vishal, > > On Wed, May 31, 2023 at 11:32 PM Vishal Moola (Oracle) > <vishal.moola@xxxxxxxxx> wrote: > > As part of the conversions to replace pgtable constructor/destructors with > > ptdesc equivalents, convert various page table functions to use ptdescs. > > > > Some of the functions use the *get*page*() helper functions. Convert > > these to use pagetable_alloc() and ptdesc_address() instead to help > > standardize page tables further. > > > > Signed-off-by: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx> > > Thanks for your patch! > > > --- a/arch/m68k/include/asm/mcf_pgalloc.h > > +++ b/arch/m68k/include/asm/mcf_pgalloc.h > > @@ -7,20 +7,19 @@ > > > > extern inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) > > { > > - free_page((unsigned long) pte); > > + pagetable_free(virt_to_ptdesc(pte)); > > } > > > > extern const char bad_pmd_string[]; > > > > extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) > > { > > - unsigned long page = __get_free_page(GFP_DMA); > > + struct ptdesc *ptdesc = pagetable_alloc(GFP_DMA | __GFP_ZERO, 0); > > > > - if (!page) > > + if (!ptdesc) > > return NULL; > > > > - memset((void *)page, 0, PAGE_SIZE); > > - return (pte_t *) (page); > > + return (pte_t *) (ptdesc_address(ptdesc)); > > No need to cast "void *" when returning a different pointer type. > > > } > > > > extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address) > > @@ -35,36 +34,36 @@ extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address) > > static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pgtable, > > unsigned long address) > > { > > - struct page *page = virt_to_page(pgtable); > > + struct ptdesc *ptdesc = virt_to_ptdesc(pgtable); > > > > - pgtable_pte_page_dtor(page); > > - __free_page(page); > > + pagetable_pte_dtor(ptdesc); > > + pagetable_free(ptdesc); > > } > > > > static inline pgtable_t pte_alloc_one(struct mm_struct *mm) > > { > > - struct page *page = alloc_pages(GFP_DMA, 0); > > + struct ptdesc *ptdesc = pagetable_alloc(GFP_DMA, 0); > > pte_t *pte; > > > > - if (!page) > > + if (!ptdesc) > > return NULL; > > - if (!pgtable_pte_page_ctor(page)) { > > - __free_page(page); > > + if (!pagetable_pte_ctor(ptdesc)) { > > + pagetable_free(ptdesc); > > return NULL; > > } > > > > - pte = page_address(page); > > - clear_page(pte); > > + pte = ptdesc_address(ptdesc); > > + pagetable_clear(pte); > > > > return pte; > > } > > > > static inline void pte_free(struct mm_struct *mm, pgtable_t pgtable) > > { > > - struct page *page = virt_to_page(pgtable); > > + struct ptdesc *ptdesc = virt_to_ptdesc(ptdesc); > > virt_to_ptdesc(pgtable) > > (You can build this using m5475evb_defconfig) > > > > > - pgtable_pte_page_dtor(page); > > - __free_page(page); > > + pagetable_pte_dtor(ptdesc); > > + pagetable_free(ptdesc); > > } > > > > /* > > @@ -75,16 +74,18 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t pgtable) > > > > static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) > > { > > - free_page((unsigned long) pgd); > > + pagetable_free(virt_to_ptdesc(pgd)); > > } > > > > static inline pgd_t *pgd_alloc(struct mm_struct *mm) > > { > > pgd_t *new_pgd; > > + struct ptdesc *ptdesc = pagetable_alloc(GFP_DMA | GFP_NOWARN, 0); > > > > - new_pgd = (pgd_t *)__get_free_page(GFP_DMA | __GFP_NOWARN); > > - if (!new_pgd) > > + if (!ptdesc) > > return NULL; > > + new_pgd = (pgd_t *) ptdesc_address(ptdesc); > > No need to cast "void *" when assigning to a different pointer type. > > > + > > memcpy(new_pgd, swapper_pg_dir, PTRS_PER_PGD * sizeof(pgd_t)); > > memset(new_pgd, 0, PAGE_OFFSET >> PGDIR_SHIFT); > > return new_pgd; > > The rest LGTM. Thanks so much for the review! I'll make those changes in the next version. > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx > > In personal conversations with technical people, I call myself a hacker. But > when I'm talking to journalists I just say "programmer" or something like that. > -- Linus Torvalds