mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86: make paddr_bits available earlier
Move early_cpu_init before init_e820, such that paddr_bits can be used by e820 code. This will reduce code repetition and prepare for further adjustment when L0 hypervisor comes into play. Signed-off-by: Wei Liu <liuwe@microsoft.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
957bd8e7e3
commit
d9c4499c18
2 files changed
+7
-12
No files matched your search
+4
-10
@@ -420,7 +420,7 @@ static uint64_t __init mtrr_top_of_ram(void)
|
||||
{
|
||||
uint32_t eax, ebx, ecx, edx;
|
||||
uint64_t mtrr_cap, mtrr_def, addr_mask, base, mask, top;
|
||||
unsigned int i, phys_bits = 36;
|
||||
unsigned int i;
|
||||
|
||||
/* By default we check only Intel systems. */
|
||||
if ( e820_mtrr_clip == -1 )
|
||||
@@ -445,15 +445,9 @@ static uint64_t __init mtrr_top_of_ram(void)
|
||||
if ( !test_bit(X86_FEATURE_MTRR & 31, &edx) )
|
||||
return 0;
|
||||
|
||||
/* Find the physical address size for this CPU. */
|
||||
eax = cpuid_eax(0x80000000);
|
||||
if ( (eax >> 16) == 0x8000 && eax >= 0x80000008 )
|
||||
{
|
||||
phys_bits = (uint8_t)cpuid_eax(0x80000008);
|
||||
if ( phys_bits > PADDR_BITS )
|
||||
phys_bits = PADDR_BITS;
|
||||
}
|
||||
addr_mask = ((1ull << phys_bits) - 1) & ~((1ull << 12) - 1);
|
||||
/* paddr_bits must have been set at this point */
|
||||
ASSERT(paddr_bits);
|
||||
addr_mask = ((1ull << paddr_bits) - 1) & PAGE_MASK;
|
||||
|
||||
rdmsrl(MSR_MTRRcap, mtrr_cap);
|
||||
rdmsrl(MSR_MTRRdefType, mtrr_def);
|
||||
|
||||
@@ -954,6 +954,9 @@ void __init noreturn __start_xen(unsigned long mbi_p)
|
||||
else
|
||||
panic("Bootloader provided no memory information\n");
|
||||
|
||||
/* This must come before e820 code because it sets paddr_bits. */
|
||||
early_cpu_init();
|
||||
|
||||
/* Sanitise the raw E820 map to produce a final clean version. */
|
||||
max_page = raw_max_page = init_e820(memmap_type, &e820_raw);
|
||||
|
||||
@@ -1532,8 +1535,6 @@ void __init noreturn __start_xen(unsigned long mbi_p)
|
||||
softirq_init();
|
||||
tasklet_subsys_init();
|
||||
|
||||
early_cpu_init();
|
||||
|
||||
paging_init();
|
||||
|
||||
tboot_probe();
|
||||
|
||||