i386/pc: factor out above-4g end to an helper
There's a couple of places that seem to duplicate this calculation of RAM size above the 4G boundary. Move all those to a helper function. Signed-off-by: Joao Martins <joao.m.martins@oracle.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20220719170014.27028-5-joao.m.martins@oracle.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
c48eb7a4e8
commit
5ff62e2afe
29
hw/i386/pc.c
29
hw/i386/pc.c
@ -814,6 +814,17 @@ void xen_load_linux(PCMachineState *pcms)
|
||||
#define PC_ROM_ALIGN 0x800
|
||||
#define PC_ROM_SIZE (PC_ROM_MAX - PC_ROM_MIN_VGA)
|
||||
|
||||
static hwaddr pc_above_4g_end(PCMachineState *pcms)
|
||||
{
|
||||
X86MachineState *x86ms = X86_MACHINE(pcms);
|
||||
|
||||
if (pcms->sgx_epc.size != 0) {
|
||||
return sgx_epc_above_4g_end(&pcms->sgx_epc);
|
||||
}
|
||||
|
||||
return x86ms->above_4g_mem_start + x86ms->above_4g_mem_size;
|
||||
}
|
||||
|
||||
void pc_memory_init(PCMachineState *pcms,
|
||||
MemoryRegion *system_memory,
|
||||
MemoryRegion *rom_memory,
|
||||
@ -891,15 +902,8 @@ void pc_memory_init(PCMachineState *pcms,
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (pcms->sgx_epc.size != 0) {
|
||||
machine->device_memory->base = sgx_epc_above_4g_end(&pcms->sgx_epc);
|
||||
} else {
|
||||
machine->device_memory->base =
|
||||
x86ms->above_4g_mem_start + x86ms->above_4g_mem_size;
|
||||
}
|
||||
|
||||
machine->device_memory->base =
|
||||
ROUND_UP(machine->device_memory->base, 1 * GiB);
|
||||
ROUND_UP(pc_above_4g_end(pcms), 1 * GiB);
|
||||
|
||||
if (pcmc->enforce_aligned_dimm) {
|
||||
/* size device region assuming 1G page max alignment per slot */
|
||||
@ -926,10 +930,8 @@ void pc_memory_init(PCMachineState *pcms,
|
||||
if (pcmc->has_reserved_memory && machine->device_memory->base) {
|
||||
cxl_base = machine->device_memory->base
|
||||
+ memory_region_size(&machine->device_memory->mr);
|
||||
} else if (pcms->sgx_epc.size != 0) {
|
||||
cxl_base = sgx_epc_above_4g_end(&pcms->sgx_epc);
|
||||
} else {
|
||||
cxl_base = x86ms->above_4g_mem_start + x86ms->above_4g_mem_size;
|
||||
cxl_base = pc_above_4g_end(pcms);
|
||||
}
|
||||
|
||||
e820_add_entry(cxl_base, cxl_size, E820_RESERVED);
|
||||
@ -1016,7 +1018,6 @@ uint64_t pc_pci_hole64_start(void)
|
||||
PCMachineState *pcms = PC_MACHINE(qdev_get_machine());
|
||||
PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
|
||||
MachineState *ms = MACHINE(pcms);
|
||||
X86MachineState *x86ms = X86_MACHINE(pcms);
|
||||
uint64_t hole64_start = 0;
|
||||
|
||||
if (pcms->cxl_devices_state.host_mr.addr) {
|
||||
@ -1034,10 +1035,8 @@ uint64_t pc_pci_hole64_start(void)
|
||||
if (!pcmc->broken_reserved_end) {
|
||||
hole64_start += memory_region_size(&ms->device_memory->mr);
|
||||
}
|
||||
} else if (pcms->sgx_epc.size != 0) {
|
||||
hole64_start = sgx_epc_above_4g_end(&pcms->sgx_epc);
|
||||
} else {
|
||||
hole64_start = x86ms->above_4g_mem_start + x86ms->above_4g_mem_size;
|
||||
hole64_start = pc_above_4g_end(pcms);
|
||||
}
|
||||
|
||||
return ROUND_UP(hole64_start, 1 * GiB);
|
||||
|
Loading…
Reference in New Issue
Block a user