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:
Wei Liu authored and Wei Liu committed 2020-01-31 16:16:12 +00:00
1 parent 957bd8e7e3
commit d9c4499c18
2 files changed
+7 -12

No files matched your search

+4 -10
View File
@@ -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);
+3 -2
View File
@@ -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();
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.