mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
Lift physical address restriction in save/restore code.
Bump this to 44 bits for x86-32 and 52 bits for x86-64. Signed-off-by: Jan Beulich <jbeulich@novell.com>
This commit is contained in:
1 parent
073f9d922a
commit
cfafd88d92
4 files changed
+16
-9
No files matched your search
@@ -82,7 +82,7 @@ static int uncanonicalize_pagetable(int xc_handle, uint32_t dom,
|
||||
if(!(pte & _PAGE_PRESENT))
|
||||
continue;
|
||||
|
||||
pfn = (pte >> PAGE_SHIFT) & 0xffffffff;
|
||||
pfn = (pte >> PAGE_SHIFT) & MFN_MASK_X86;
|
||||
|
||||
if(pfn >= max_pfn) {
|
||||
/* This "page table page" is probably not one; bail. */
|
||||
@@ -120,12 +120,12 @@ static int uncanonicalize_pagetable(int xc_handle, uint32_t dom,
|
||||
if(!(pte & _PAGE_PRESENT))
|
||||
continue;
|
||||
|
||||
pfn = (pte >> PAGE_SHIFT) & 0xffffffff;
|
||||
pfn = (pte >> PAGE_SHIFT) & MFN_MASK_X86;
|
||||
|
||||
if(p2m[pfn] == INVALID_P2M_ENTRY)
|
||||
p2m[pfn] = p2m_batch[nr_mfns++];
|
||||
|
||||
pte &= 0xffffff0000000fffULL;
|
||||
pte &= ~MADDR_MASK_X86;
|
||||
pte |= (uint64_t)p2m[pfn] << PAGE_SHIFT;
|
||||
|
||||
if(pt_levels == 2)
|
||||
|
||||
@@ -495,7 +495,7 @@ static int canonicalize_pagetable(unsigned long type, unsigned long pfn,
|
||||
hstart = (hvirt_start >> L2_PAGETABLE_SHIFT_PAE) & 0x1ff;
|
||||
he = ((const uint64_t *) spage)[hstart];
|
||||
|
||||
if ( ((he >> PAGE_SHIFT) & 0x0fffffff) == m2p_mfn0 ) {
|
||||
if ( ((he >> PAGE_SHIFT) & MFN_MASK_X86) == m2p_mfn0 ) {
|
||||
/* hvirt starts with xen stuff... */
|
||||
xen_start = hstart;
|
||||
} else if ( hvirt_start != 0xf5800000 ) {
|
||||
@@ -503,7 +503,7 @@ static int canonicalize_pagetable(unsigned long type, unsigned long pfn,
|
||||
hstart = (0xf5800000 >> L2_PAGETABLE_SHIFT_PAE) & 0x1ff;
|
||||
he = ((const uint64_t *) spage)[hstart];
|
||||
|
||||
if( ((he >> PAGE_SHIFT) & 0x0fffffff) == m2p_mfn0 )
|
||||
if( ((he >> PAGE_SHIFT) & MFN_MASK_X86) == m2p_mfn0 )
|
||||
xen_start = hstart;
|
||||
}
|
||||
}
|
||||
@@ -532,7 +532,7 @@ static int canonicalize_pagetable(unsigned long type, unsigned long pfn,
|
||||
|
||||
if (pte & _PAGE_PRESENT) {
|
||||
|
||||
mfn = (pte >> PAGE_SHIFT) & 0xfffffff;
|
||||
mfn = (pte >> PAGE_SHIFT) & MFN_MASK_X86;
|
||||
if (!MFN_IS_IN_PSEUDOPHYS_MAP(mfn)) {
|
||||
/* This will happen if the type info is stale which
|
||||
is quite feasible under live migration */
|
||||
@@ -541,7 +541,7 @@ static int canonicalize_pagetable(unsigned long type, unsigned long pfn,
|
||||
} else
|
||||
pfn = mfn_to_pfn(mfn);
|
||||
|
||||
pte &= 0xffffff0000000fffULL;
|
||||
pte &= ~MADDR_MASK_X86;
|
||||
pte |= (uint64_t)pfn << PAGE_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#define L1_PAGETABLE_SHIFT 12
|
||||
#define L2_PAGETABLE_SHIFT 22
|
||||
|
||||
#define L0_PAGETABLE_MASK_PAE 0x0000000ffffff000ULL
|
||||
#define L0_PAGETABLE_MASK_PAE 0x00000ffffffff000ULL
|
||||
#define L1_PAGETABLE_MASK_PAE 0x1ffULL
|
||||
#define L2_PAGETABLE_MASK_PAE 0x1ffULL
|
||||
#define L3_PAGETABLE_MASK_PAE 0x3ULL
|
||||
@@ -33,7 +33,7 @@
|
||||
#define L1_PAGETABLE_SHIFT L1_PAGETABLE_SHIFT_PAE
|
||||
#define L2_PAGETABLE_SHIFT L2_PAGETABLE_SHIFT_PAE
|
||||
|
||||
#define L0_PAGETABLE_MASK_PAE 0x000000fffffff000ULL
|
||||
#define L0_PAGETABLE_MASK_PAE 0x000ffffffffff000ULL
|
||||
#define L1_PAGETABLE_MASK_PAE 0x1ffULL
|
||||
#define L2_PAGETABLE_MASK_PAE 0x1ffULL
|
||||
#define L3_PAGETABLE_MASK_PAE 0x1ffULL
|
||||
|
||||
@@ -134,6 +134,13 @@ typedef l4_pgentry_64_t l4_pgentry_t;
|
||||
#define PAGE_SHIFT_X86 12
|
||||
#define PAGE_SIZE_X86 (1UL << PAGE_SHIFT_X86)
|
||||
#define PAGE_MASK_X86 (~(PAGE_SIZE_X86-1))
|
||||
#if defined(__i386__)
|
||||
#define MADDR_BITS_X86 44
|
||||
#elif defined(__x86_64__)
|
||||
#define MADDR_BITS_X86 52
|
||||
#endif
|
||||
#define MFN_MASK_X86 ((1ULL << (MADDR_BITS_X86 - PAGE_SHIFT_X86)) - 1)
|
||||
#define MADDR_MASK_X86 (MFN_MASK_X86 << PAGE_SHIFT_X86)
|
||||
|
||||
#define PAGE_SHIFT_IA64 14
|
||||
#define PAGE_SIZE_IA64 (1UL << PAGE_SHIFT_IA64)
|
||||
|
||||