This patch adds the 'pud' level to Xen page table handling, making
it compile with the 4 level page table code that's in the latest
2.6 kernel tree. This will be needed once Xen moves to 2.6.11.
The only uglies are overriding pmd_val and __pmd, but the code is
now using the asm-generic headers.
This corresponds to the upstream changesets:
nickpiggin@xxxxxxxxxxxx[torvalds]|ChangeSet|20050101220015|18900
ak@xxxxxxx[torvalds]|ChangeSet|20050101220139|54188
Signed-off-by: Rik van Riel <riel@xxxxxxxxxx>
--- linux-2.6.10/arch/xen/i386/kernel/pci-dma.c.pudding 2005-01-06
17:29:29.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/kernel/pci-dma.c 2005-01-06 17:30:26.000000000
-0500
@@ -36,6 +36,7 @@
* hypercalls reduced.
*/
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
unsigned long pfn, i, flags;
@@ -47,7 +48,8 @@
/* 1. Zap current PTEs, giving away the underlying pages. */
for (i = 0; i < (1<<order); i++) {
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
- pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pud = pud_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
pfn = pte->pte_low >> PAGE_SHIFT;
queue_l1_entry_update(pte, 0);
@@ -63,7 +65,8 @@
/* 3. Map the new extent in place of old pages. */
for (i = 0; i < (1<<order); i++) {
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
- pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pud = pud_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
queue_l1_entry_update(
pte, ((pfn+i)<<PAGE_SHIFT)|__PAGE_KERNEL);
--- linux-2.6.10/arch/xen/i386/mm/fault.c.pudding 2005-01-06
13:30:00.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/fault.c 2005-01-06 13:33:03.000000000
-0500
@@ -527,6 +527,7 @@
*/
int index = pgd_index(address);
pgd_t *pgd, *pgd_k;
+ pud_t *pud, *pud_k;
pmd_t *pmd, *pmd_k;
pte_t *pte_k;
@@ -538,11 +539,17 @@
/*
* set_pgd(pgd, *pgd_k); here would be useless on PAE
- * and redundant with the set_pmd() on non-PAE.
+ * and redundant with the set_pmd() on non-PAE. As would
+ * set_pud.
*/
- pmd = pmd_offset(pgd, address);
- pmd_k = pmd_offset(pgd_k, address);
+ pud = pud_offset(pgd, address);
+ pud_k = pud_offset(pgd_k, address);
+ if (!pud_present(*pud_k))
+ goto no_context;
+
+ pmd = pmd_offset(pud, address);
+ pmd_k = pmd_offset(pud_k, address);
if (!pmd_present(*pmd_k))
goto no_context;
set_pmd(pmd, *pmd_k);
--- linux-2.6.10/arch/xen/i386/mm/init.c.pudding 2005-01-06
13:33:17.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/init.c 2005-01-06 13:39:13.000000000
-0500
@@ -55,15 +55,18 @@
*/
static pmd_t * __init one_md_table_init(pgd_t *pgd)
{
+ pud_t *pud;
pmd_t *pmd_table;
#ifdef CONFIG_X86_PAE
pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
- if (pmd_table != pmd_offset(pgd, 0))
+ pud = pud_offset(pgd, 0);
+ if (pmd_table != pud_offset(pud, 0))
BUG();
#else
- pmd_table = pmd_offset(pgd, 0);
+ pud = pud_offset(pgd, 0);
+ pmd_table = pmd_offset(pud, 0);
#endif
return pmd_table;
@@ -102,6 +105,7 @@
static void __init page_table_range_init (unsigned long start, unsigned long
end, pgd_t *pgd_base)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
int pgd_idx, pmd_idx;
unsigned long vaddr;
@@ -114,8 +118,8 @@
for ( ; (pgd_idx < PTRS_PER_PGD_NO_HV) && (vaddr != end); pgd++,
pgd_idx++) {
if (pgd_none(*pgd))
one_md_table_init(pgd);
-
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ pmd = pmd_offset(pud, vaddr);
for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end); pmd++,
pmd_idx++) {
if (pmd_none(*pmd))
one_page_table_init(pmd);
@@ -249,7 +253,7 @@
EXPORT_SYMBOL(kmap_pte);
#define kmap_get_fixmap_pte(vaddr) \
- pte_offset_kernel(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
+ pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)),
(vaddr)), (vaddr))
void __init kmap_init(void)
{
@@ -265,6 +269,7 @@
void __init permanent_kmaps_init(pgd_t *pgd_base)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
unsigned long vaddr;
@@ -273,7 +278,8 @@
page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
pgd = swapper_pg_dir + pgd_index(vaddr);
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ pmd = pmd_offset(pud, vaddr);
pte = pte_offset_kernel(pmd, vaddr);
pkmap_page_table = pte;
}
--- linux-2.6.10/arch/xen/i386/mm/ioremap.c.pudding 2005-01-06
13:39:18.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/ioremap.c 2005-01-06 13:43:13.000000000
-0500
@@ -357,7 +357,11 @@
BUG();
spin_lock(&mm->page_table_lock);
do {
- pmd_t *pmd = pmd_alloc(mm, dir, address);
+ pud_t *pud = pud_alloc(mm, dir, address);
+ pmd_t *pmd;
+ if (!pud)
+ return -ENOMEM;
+ pmd = pmd_alloc(mm, pud, address);
if (!pmd)
return -ENOMEM;
direct_remap_area_pmd(mm, pmd, address, end - address, &v);
--- linux-2.6.10/arch/xen/i386/mm/pageattr.c.pudding 2005-01-06
13:43:22.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/pageattr.c 2005-01-06 13:48:57.000000000
-0500
@@ -20,10 +20,14 @@
pte_t *lookup_address(unsigned long address)
{
pgd_t *pgd = pgd_offset_k(address);
+ pud_t *pud;
pmd_t *pmd;
if (pgd_none(*pgd))
return NULL;
- pmd = pmd_offset(pgd, address);
+ pud = pud_offset(pgd, address);
+ if (pud_none(*pud))
+ return NULL;
+ pmd = pmd_offset(pud, address);
if (pmd_none(*pmd))
return NULL;
if (pmd_large(*pmd))
@@ -77,9 +81,11 @@
spin_lock_irqsave(&pgd_lock, flags);
for (page = pgd_list; page; page = (struct page *)page->index) {
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pgd = (pgd_t *)page_address(page) + pgd_index(address);
- pmd = pmd_offset(pgd, address);
+ pud = pud_offset(pgd, address);
+ pmd = pmd_offset(pud, address);
set_pte_atomic((pte_t *)pmd, pte);
}
spin_unlock_irqrestore(&pgd_lock, flags);
@@ -92,7 +98,7 @@
static inline void revert_page(struct page *kpte_page, unsigned long address)
{
pte_t *linear = (pte_t *)
- pmd_offset(pgd_offset(&init_mm, address), address);
+ pmd_offset(pud_offset(pgd_offset(&init_mm, address), address),
address);
set_pmd_pte(linear, address,
pfn_pte((__pa(address) & LARGE_PAGE_MASK) >> PAGE_SHIFT,
PAGE_KERNEL_LARGE));
--- linux-2.6.10/arch/xen/i386/mm/pgtable.c.pudding 2005-01-06
13:49:09.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/pgtable.c 2005-01-06 20:56:28.000000000
-0500
@@ -65,6 +65,7 @@
static void set_pte_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
@@ -73,7 +74,12 @@
BUG();
return;
}
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ if (pud_none(*pud)) {
+ BUG();
+ return;
+ }
+ pmd = pmd_offset(pud, vaddr);
if (pmd_none(*pmd)) {
BUG();
return;
@@ -97,6 +103,7 @@
pgprot_t flags)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
@@ -105,7 +112,12 @@
BUG();
return;
}
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ if (pud_none(*pud)) {
+ BUG();
+ return;
+ }
+ pmd = pmd_offset(pud, vaddr);
if (pmd_none(*pmd)) {
BUG();
return;
@@ -130,6 +142,7 @@
void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
if (vaddr & (PMD_SIZE-1)) { /* vaddr is misaligned */
@@ -145,7 +158,8 @@
printk ("set_pmd_pfn: pgd_none\n");
return; /* BUG(); */
}
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ pmd = pmd_offset(pud, vaddr);
set_pmd(pmd, pfn_pmd(pfn, flags));
/*
* It's enough to flush this one mapping.
@@ -364,7 +378,8 @@
void make_lowmem_page_readonly(void *va)
{
pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
+ pud_t *pud = pud_offset(pgd, (unsigned long)va);
+ pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
}
@@ -372,7 +387,8 @@
void make_lowmem_page_writable(void *va)
{
pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
+ pud_t *pud = pud_offset(pgd, (unsigned long)va);
+ pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
}
@@ -380,7 +396,8 @@
void make_page_readonly(void *va)
{
pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
+ pud_t *pud = pud_offset(pgd, (unsigned long)va);
+ pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
if ( (unsigned long)va >= (unsigned long)high_memory )
@@ -397,7 +414,8 @@
void make_page_writable(void *va)
{
pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
+ pud_t *pud = pud_offset(pgd, (unsigned long)va);
+ pmd_t *pmd = pmd_offset(pud, (unsigned long)va);
pte_t *pte = pte_offset_kernel(pmd, (unsigned long)va);
queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
if ( (unsigned long)va >= (unsigned long)high_memory )
--- linux-2.6.10/arch/xen/i386/mm/hypervisor.c.pudding 2005-01-06
20:56:58.000000000 -0500
+++ linux-2.6.10/arch/xen/i386/mm/hypervisor.c 2005-01-06 20:57:30.000000000
-0500
@@ -427,6 +427,7 @@
unsigned long allocate_empty_lowmem_region(unsigned long pages)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
unsigned long *pfn_array;
@@ -447,7 +448,8 @@
for ( i = 0; i < (1<<order); i++ )
{
pgd = pgd_offset_k( (vstart + (i*PAGE_SIZE)));
- pmd = pmd_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pud = pud_offset(pgd, (vstart + (i*PAGE_SIZE)));
+ pmd = pmd_offset(pud, (vstart + (i*PAGE_SIZE)));
pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE)));
pfn_array[i] = pte->pte_low >> PAGE_SHIFT;
queue_l1_entry_update(pte, 0);
--- linux-2.6.10/include/asm-xen/asm-i386/pgalloc.h.pudding 2005-01-06
14:03:01.000000000 -0500
+++ linux-2.6.10/include/asm-xen/asm-i386/pgalloc.h 2005-01-06
16:15:26.000000000 -0500
@@ -21,7 +21,6 @@
/*
* Allocate and free page tables.
*/
-
extern pgd_t *pgd_alloc(struct mm_struct *);
extern void pgd_free(pgd_t *pgd);
@@ -39,16 +38,15 @@
#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
+#ifdef CONFIG_PAE
/*
- * allocating and freeing a pmd is trivial: the 1-entry pmd is
- * inside the pgd, so has no extra memory associated with it.
- * (In the PAE case we free the pmds as part of the pgd.)
+ * In the PAE case we free the pmds as part of the pgd.
*/
-
#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
#define pmd_free(x) do { } while (0)
#define __pmd_free_tlb(tlb,x) do { } while (0)
-#define pgd_populate(mm, pmd, pte) BUG()
+#define pud_populate(mm, pmd, pte) BUG()
+#endif
#define check_pgt_cache() do { } while (0)
--- linux-2.6.10/include/asm-xen/asm-i386/pgtable-2level.h.pudding
2005-01-06 14:22:37.000000000 -0500
+++ linux-2.6.10/include/asm-xen/asm-i386/pgtable-2level.h 2005-01-06
17:16:32.000000000 -0500
@@ -1,24 +1,14 @@
#ifndef _I386_PGTABLE_2LEVEL_H
#define _I386_PGTABLE_2LEVEL_H
+#include <asm-generic/pgtable-nopmd.h>
+
#define pte_ERROR(e) \
printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
-#define pmd_ERROR(e) \
- printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e))
#define pgd_ERROR(e) \
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
/*
- * The "pgd_xxx()" functions here are trivial for a folded two-level
- * setup: the pgd is never bad, and a pmd always exists (as it's folded
- * into the pgd entry)
- */
-static inline int pgd_none(pgd_t pgd) { return 0; }
-static inline int pgd_bad(pgd_t pgd) { return 0; }
-static inline int pgd_present(pgd_t pgd) { return 1; }
-#define pgd_clear(xp) do { } while (0)
-
-/*
* Certain architectures need to do special things when PTEs
* within a page table are directly modified. Thus, the following
* hook is made available.
@@ -43,16 +33,7 @@
* (pmds are folded into pgds so this doesn't get actually called,
* but the define is needed for a generic inline function.)
*/
-#define set_pmd(pmdptr, pmdval) xen_l2_entry_update((pmdptr), (pmdval).pmd)
-#define set_pgd(pgdptr, pgdval) ((void)0)
-
-#define pgd_page(pgd) \
-((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-
-static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
-{
- return (pmd_t *) dir;
-}
+#define set_pmd(pmdptr, pmdval) xen_l2_entry_update((pmdptr),
pud_val((pmdval).pud))
/*
* A note on implementation of this atomic 'get-and-clear' operation.
@@ -110,6 +91,9 @@
#define pfn_pte_ma(pfn, prot) __pte_ma(((pfn) << PAGE_SHIFT) |
pgprot_val(prot))
#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
+#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
+#define pmd_page_kernel(pmd) ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
+
/*
* All present user pages are user-executable:
*/
--- linux-2.6.10/include/asm-xen/asm-i386/page.h.pudding 2005-01-06
15:35:33.000000000 -0500
+++ linux-2.6.10/include/asm-xen/asm-i386/page.h 2005-01-06
17:02:20.000000000 -0500
@@ -85,7 +85,6 @@
#define HPAGE_SHIFT 21
#else
typedef struct { unsigned long pte_low; } pte_t;
-typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t;
#define boot_pte_t pte_t /* or would you rather have a typedef */
@@ -93,6 +92,7 @@
(x).pte_low)
#define pte_val_ma(x) ((x).pte_low)
#define HPAGE_SHIFT 22
+#include <asm-generic/pgtable-nopmd.h>
#endif
#define PTE_MASK PAGE_MASK
@@ -103,15 +103,19 @@
#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
#endif
+#define pgd_val(x) ((x).pgd)
+#define pgprot_val(x) ((x).pgprot)
+#define __pgd(x) ((pgd_t) { (x) } )
+#define __pgprot(x) ((pgprot_t) { (x) } )
+/* Yes, this is ugly... */
+#undef pmd_val
static inline unsigned long pmd_val(pmd_t x)
{
- unsigned long ret = x.pmd;
+ unsigned long ret = pud_val(x.pud);
if (ret) ret = machine_to_phys(ret);
return ret;
}
-#define pgd_val(x) ({ BUG(); (unsigned long)0; })
-#define pgprot_val(x) ((x).pgprot)
static inline pte_t __pte(unsigned long x)
{
@@ -119,13 +123,12 @@
return ((pte_t) { (x) });
}
#define __pte_ma(x) ((pte_t) { (x) } )
+#undef __pmd
static inline pmd_t __pmd(unsigned long x)
{
if ((x & 1)) x = phys_to_machine(x);
- return ((pmd_t) { (x) });
+ return ((pmd_t) { __pud(x) });
}
-#define __pgd(x) ({ BUG(); (pgprot_t) { 0 }; })
-#define __pgprot(x) ((pgprot_t) { (x) } )
#endif /* !__ASSEMBLY__ */
--- linux-2.6.10/include/asm-xen/asm-i386/pgtable.h.pudding 2005-01-06
15:13:47.000000000 -0500
+++ linux-2.6.10/include/asm-xen/asm-i386/pgtable.h 2005-01-06
17:28:48.032819846 -0500
@@ -54,12 +54,12 @@
*/
#ifdef CONFIG_X86_PAE
# include <asm/pgtable-3level-defs.h>
+# define PMD_SIZE (1UL << PMD_SHIFT)
+# define PMD_MASK (~(PMD_SIZE-1))
#else
# include <asm/pgtable-2level-defs.h>
#endif
-#define PMD_SIZE (1UL << PMD_SHIFT)
-#define PMD_MASK (~(PMD_SIZE-1))
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
#define PGDIR_MASK (~(PGDIR_SIZE-1))
@@ -316,18 +316,11 @@
#define page_pte(page) page_pte_prot(page, __pgprot(0))
-#define pmd_page_kernel(pmd) \
-((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
-
#define pmd_clear(xp) do { \
set_pmd(xp, __pmd(0)); \
xen_flush_page_update_queue(); \
} while (0)
-#ifndef CONFIG_DISCONTIGMEM
-#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
-#endif /* !CONFIG_DISCONTIGMEM */
-
#define pmd_large(pmd) \
((pmd_val(pmd) & (_PAGE_PSE|_PAGE_PRESENT)) ==
(_PAGE_PSE|_PAGE_PRESENT))
@@ -338,6 +331,7 @@
* control the given virtual address
*/
#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
+#define pgd_index_k(addr) pgd_index(addr)
/*
* pgd_offset() returns a (pgd_t *)
@@ -463,7 +457,8 @@
#define arbitrary_virt_to_machine(__va)
\
({ \
pgd_t *__pgd = pgd_offset_k((unsigned long)(__va)); \
- pmd_t *__pmd = pmd_offset(__pgd, (unsigned long)(__va)); \
+ pud_t *__pud = pud_offset(__pgd, (unsigned long)(__va)); \
+ pmd_t *__pmd = pmd_offset(__pud, (unsigned long)(__va)); \
pte_t *__pte = pte_offset_kernel(__pmd, (unsigned long)(__va)); \
unsigned long __pa = (*(unsigned long *)__pte) & PAGE_MASK; \
__pa | ((unsigned long)(__va) & (PAGE_SIZE-1)); \
--- linux-2.6.10/drivers/xen/balloon/balloon.c.pudding 2005-01-06
21:35:01.000000000 -0500
+++ linux-2.6.10/drivers/xen/balloon/balloon.c 2005-01-06 21:35:43.000000000
-0500
@@ -137,12 +137,16 @@
static inline pte_t *get_ptep(unsigned long addr)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pgd = pgd_offset_k(addr);
if ( pgd_none(*pgd) || pgd_bad(*pgd) ) BUG();
- pmd = pmd_offset(pgd, addr);
+ pud = pud_offset(pgd, addr);
+ if ( pud_none(*pud) || pud_bad(*pud) ) BUG();
+
+ pmd = pmd_offset(pud, addr);
if ( pmd_none(*pmd) || pmd_bad(*pmd) ) BUG();
return pte_offset_kernel(pmd, addr);
--- linux-2.6.10/include/asm-xen/asm-i386/pgtable-2level-defs.h.pudding
2005-01-06 21:55:46.420330906 -0500
+++ linux-2.6.10/include/asm-xen/asm-i386/pgtable-2level-defs.h 2005-01-06
21:55:54.515000937 -0500
@@ -9,13 +9,6 @@
#define PTRS_PER_PGD 1024
#define PTRS_PER_PGD_NO_HV (HYPERVISOR_VIRT_START >> PGDIR_SHIFT)
-/*
- * the i386 is two-level, so we don't really have any
- * PMD directory physically.
- */
-#define PMD_SHIFT 22
-#define PTRS_PER_PMD 1
-
#define PTRS_PER_PTE 1024
#endif /* _I386_PGTABLE_2LEVEL_DEFS_H */
-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel
|