mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/page: Remove bifurcated PAGE_HYPERVISOR constant
Despite being vaguely aware, the difference between PAGE_HYPERVISOR in ASM and C code has nevertheless caused several bugs I should have known better about, and contributed to review confusion. There are exactly 4 uses of these constants in asm code (and one is shortly going to disappear). Instead of creating the constants which behave differently between ASM and C code, expose all the constants and use non-ambiguous non-NX ones in ASM. Adjust the hiding to just _PAGE_NX, which contains a C ternary expression. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
ad0b3df0f5
commit
97f10daf5f
4 files changed
+13
-16
No files matched your search
@@ -674,7 +674,7 @@ trampoline_setup:
|
||||
* the transition into long mode), using 2M superpages.
|
||||
*/
|
||||
lea sym_esi(start),%ebx
|
||||
lea (1<<L2_PAGETABLE_SHIFT)*7+(PAGE_HYPERVISOR|_PAGE_PSE)(%ebx),%eax
|
||||
lea (1<<L2_PAGETABLE_SHIFT)*7+(PAGE_HYPERVISOR_RWX|_PAGE_PSE)(%ebx),%eax
|
||||
shr $(L2_PAGETABLE_SHIFT-3),%ebx
|
||||
mov $8,%ecx
|
||||
1: mov %eax,sym_fs(l2_bootmap)-8(%ebx,%ecx,8)
|
||||
|
||||
@@ -56,9 +56,9 @@ l1_directmap:
|
||||
.rept L1_PAGETABLE_ENTRIES
|
||||
/* VGA hole (0xa0000-0xc0000) should be mapped UC-. */
|
||||
.if pfn >= 0xa0 && pfn < 0xc0
|
||||
.quad (pfn << PAGE_SHIFT) | PAGE_HYPERVISOR_UCMINUS | MAP_SMALL_PAGES
|
||||
.quad (pfn << PAGE_SHIFT) | __PAGE_HYPERVISOR_UCMINUS | _PAGE_GLOBAL | MAP_SMALL_PAGES
|
||||
.else
|
||||
.quad (pfn << PAGE_SHIFT) | PAGE_HYPERVISOR | MAP_SMALL_PAGES
|
||||
.quad (pfn << PAGE_SHIFT) | PAGE_HYPERVISOR_RWX | MAP_SMALL_PAGES
|
||||
.endif
|
||||
pfn = pfn + 1
|
||||
.endr
|
||||
@@ -89,7 +89,7 @@ GLOBAL(l2_xenmap)
|
||||
.quad 0
|
||||
idx = 1
|
||||
.rept 7
|
||||
.quad sym_offs(__image_base__) + (idx << L2_PAGETABLE_SHIFT) + (PAGE_HYPERVISOR | _PAGE_PSE)
|
||||
.quad sym_offs(__image_base__) + (idx << L2_PAGETABLE_SHIFT) + (PAGE_HYPERVISOR_RWX | _PAGE_PSE)
|
||||
idx = idx + 1
|
||||
.endr
|
||||
.fill L2_PAGETABLE_ENTRIES - 8, 8, 0
|
||||
|
||||
@@ -316,7 +316,11 @@ void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t);
|
||||
#define _PAGE_AVAIL _AC(0xE00,U)
|
||||
#define _PAGE_PSE_PAT _AC(0x1000,U)
|
||||
#define _PAGE_AVAIL_HIGH (_AC(0x7ff, U) << 12)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/* Dependency on NX being available can't be expressed. */
|
||||
#define _PAGE_NX (cpu_has_nx ? _PAGE_NX_BIT : 0)
|
||||
#endif
|
||||
|
||||
#define PAGE_CACHE_ATTRS (_PAGE_PAT | _PAGE_PCD | _PAGE_PWT)
|
||||
|
||||
|
||||
@@ -172,18 +172,11 @@ static inline intpte_t put_pte_flags(unsigned int x)
|
||||
#define PAGE_HYPERVISOR_RX (__PAGE_HYPERVISOR_RX | _PAGE_GLOBAL)
|
||||
#define PAGE_HYPERVISOR_RWX (__PAGE_HYPERVISOR | _PAGE_GLOBAL)
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
/* Dependency on NX being available can't be expressed. */
|
||||
# define PAGE_HYPERVISOR PAGE_HYPERVISOR_RWX
|
||||
# define PAGE_HYPERVISOR_UCMINUS (__PAGE_HYPERVISOR_UCMINUS | _PAGE_GLOBAL)
|
||||
# define PAGE_HYPERVISOR_UC (__PAGE_HYPERVISOR_UC | _PAGE_GLOBAL)
|
||||
#else
|
||||
# define PAGE_HYPERVISOR PAGE_HYPERVISOR_RW
|
||||
# define PAGE_HYPERVISOR_UCMINUS (__PAGE_HYPERVISOR_UCMINUS | \
|
||||
_PAGE_GLOBAL | _PAGE_NX)
|
||||
# define PAGE_HYPERVISOR_UC (__PAGE_HYPERVISOR_UC | \
|
||||
_PAGE_GLOBAL | _PAGE_NX)
|
||||
#endif
|
||||
#define PAGE_HYPERVISOR PAGE_HYPERVISOR_RW
|
||||
#define PAGE_HYPERVISOR_UCMINUS (__PAGE_HYPERVISOR_UCMINUS | \
|
||||
_PAGE_GLOBAL | _PAGE_NX)
|
||||
#define PAGE_HYPERVISOR_UC (__PAGE_HYPERVISOR_UC | \
|
||||
_PAGE_GLOBAL | _PAGE_NX)
|
||||
|
||||
#endif /* __X86_64_PAGE_H__ */
|
||||
|
||||
|
||||