On 12/4/20 4:48 AM, Matthew Wilcox wrote: > On Thu, Dec 03, 2020 at 04:33:10PM -0800, James Bottomley wrote: >> These platforms define PMD_ORDER in asm/pgtable.h > > I think that's the real problem, though. > > #define PGD_ORDER 1 /* Number of pages per pgd */ > #define PMD_ORDER 1 /* Number of pages per pmd */ > #define PGD_ALLOC_ORDER (2 + 1) /* first pgd contains pmd */ > #else > #define PGD_ORDER 1 /* Number of pages per pgd */ > #define PGD_ALLOC_ORDER (PGD_ORDER + 1) > > That should clearly be PMD_ALLOC_ORDER, not PMD_ORDER. Or even > PAGES_PER_PMD like the comment calls it, because I really think > that doing an order-3 (8 pages) allocation for the PGD is wrong. We need a spinlock to protect parallel accesses to the PGD, search for pgd_spinlock(). This spinlock is stored behind the memory used for the PGD, which is why we allocate more memory (and waste 3 pages). Helge