Re: svn commit: r360233 - in head: contrib/jemalloc . . . : This partially breaks a 2-socket 32-bit powerpc (old PowerMac G4) based on head -r360311

Brandon Bergren bdragon at FreeBSD.org
Sun Jun 28 00:03:00 UTC 2020


On Sat, Jun 27, 2020, at 5:32 PM, Mark Millard wrote:

> where moea64_pvo_remove_from_page involves
> vm_page_aflag_clear(????,PGA_WRITEABLE | PGA_EXECUTABLE) via:
> 
> static inline void
> moea64_pvo_remove_from_page_locked(mmu_t mmu, struct pvo_entry *pvo,
>     vm_page_t m)
> {
>                 
>         . . . 
>         /*
>          * Update vm about page writeability/executability if managed
>          */
>         PV_LOCKASSERT(pvo->pvo_pte.pa & LPTE_RPGN);
>         if (pvo->pvo_vaddr & PVO_MANAGED) {
>                 if (m != NULL) {
>                         LIST_REMOVE(pvo, pvo_vlink);
>                         if (LIST_EMPTY(vm_page_to_pvoh(m)))
>                                 vm_page_aflag_clear(m,
>                                     PGA_WRITEABLE | PGA_EXECUTABLE);
>                 }
>         }
>         . . .
> }
> 
> But 32-bit has/uses:
> 
>         static void mmu_null_remove_pages(mmu_t mmu, pmap_t pmap)
>         {
>                 return;
>         }
> 
> 
> so it does not involve:
> 
>     vm_page_aflag_clear(????,PGA_WRITEABLE | PGA_EXECUTABLE)
> 
> but apparently should involve such in order to pass:
> 
>                KASSERT((m->a.flags & (PGA_EXECUTABLE | PGA_WRITEABLE)) == 0,
>                    ("vm_page_free_prep: mapping flags set in page %p", m));
>

looking at the history of the 64 bit code:
r233017 -- "Implement pmap_remove_pages(). This will be added later to the 32-bit MMU module."

Oops!


-- 
  Brandon Bergren
  bdragon at FreeBSD.org


More information about the freebsd-ppc mailing list