Re: 4level page tables for Linux

From: Dave Hansen
Date: Tue Oct 12 2004 - 13:50:16 EST


@@ -110,13 +115,18 @@ int install_file_pte(struct mm_struct *m
unsigned long addr, unsigned long pgoff, pgprot_t prot)
{
...
+ pml4 = pml4_offset(mm, addr);
+
+ spin_lock(&mm->page_table_lock);
+ pgd = pgd_alloc(mm, pml4, addr);
+ if (!pgd)
+ goto err_unlock;

Locking isn't needed for access to the pml4? This is a wee bit
different from pgd's and I didn't see any documentation about it
anywhere. Could be confusing.

+++ linux-2.6.9rc4-4level/mm/memory.c
...
+#undef inline
+#define inline
+unsigned long caddr;

Is this just for debugging?

+static inline void free_one_pml4(struct mmu_gather *tlb, pml4_t *pml4,
+ unsigned long addr, unsigned long end)
+{
...
+ do {
+ caddr = addr;
+ free_one_pgd(tlb, pgd);
+ free++;
+ addr = (addr + PGDIR_SIZE) & PGDIR_MASK;
+ pgd++;
+ } while (addr && addr < end);

If someone attempts to clear an address which is in the top PGDIR_SIZE
bytes of memory, this will overflow. Is that an issue?

There also seems to be quite a bit of churn in the copy_*_range()
functions that isn't completely related to the pml4 changes. Should
that get broken out?

-- Dave

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/