mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 10:25:06 +00:00
x86: move max-ram-below-4g to pc
Move from X86MachineClass to PCMachineClass so it disappears from microvm machine type property list. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Paul Durrant <paul@xen.org> Message-id: 20200529073957.8018-4-kraxel@redhat.com
This commit is contained in:
parent
3235936e30
commit
9a45729d3b
46
hw/i386/pc.c
46
hw/i386/pc.c
@ -1857,6 +1857,45 @@ static void pc_machine_set_pit(Object *obj, bool value, Error **errp)
|
|||||||
pcms->pit_enabled = value;
|
pcms->pit_enabled = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pc_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
|
||||||
|
const char *name, void *opaque,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
PCMachineState *pcms = PC_MACHINE(obj);
|
||||||
|
uint64_t value = pcms->max_ram_below_4g;
|
||||||
|
|
||||||
|
visit_type_size(v, name, &value, errp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pc_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
|
||||||
|
const char *name, void *opaque,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
PCMachineState *pcms = PC_MACHINE(obj);
|
||||||
|
Error *error = NULL;
|
||||||
|
uint64_t value;
|
||||||
|
|
||||||
|
visit_type_size(v, name, &value, &error);
|
||||||
|
if (error) {
|
||||||
|
error_propagate(errp, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (value > 4 * GiB) {
|
||||||
|
error_setg(&error,
|
||||||
|
"Machine option 'max-ram-below-4g=%"PRIu64
|
||||||
|
"' expects size less than or equal to 4G", value);
|
||||||
|
error_propagate(errp, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value < 1 * MiB) {
|
||||||
|
warn_report("Only %" PRIu64 " bytes of RAM below the 4GiB boundary,"
|
||||||
|
"BIOS may not work with less than 1MiB", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pcms->max_ram_below_4g = value;
|
||||||
|
}
|
||||||
|
|
||||||
static void pc_machine_initfn(Object *obj)
|
static void pc_machine_initfn(Object *obj)
|
||||||
{
|
{
|
||||||
PCMachineState *pcms = PC_MACHINE(obj);
|
PCMachineState *pcms = PC_MACHINE(obj);
|
||||||
@ -1866,6 +1905,7 @@ static void pc_machine_initfn(Object *obj)
|
|||||||
#else
|
#else
|
||||||
pcms->vmport = ON_OFF_AUTO_OFF;
|
pcms->vmport = ON_OFF_AUTO_OFF;
|
||||||
#endif /* CONFIG_VMPORT */
|
#endif /* CONFIG_VMPORT */
|
||||||
|
pcms->max_ram_below_4g = 0; /* use default */
|
||||||
/* acpi build is enabled by default if machine supports it */
|
/* acpi build is enabled by default if machine supports it */
|
||||||
pcms->acpi_build_enabled = PC_MACHINE_GET_CLASS(pcms)->has_acpi_build;
|
pcms->acpi_build_enabled = PC_MACHINE_GET_CLASS(pcms)->has_acpi_build;
|
||||||
pcms->smbus_enabled = true;
|
pcms->smbus_enabled = true;
|
||||||
@ -1964,6 +2004,12 @@ static void pc_machine_class_init(ObjectClass *oc, void *data)
|
|||||||
mc->numa_mem_supported = true;
|
mc->numa_mem_supported = true;
|
||||||
mc->default_ram_id = "pc.ram";
|
mc->default_ram_id = "pc.ram";
|
||||||
|
|
||||||
|
object_class_property_add(oc, PC_MACHINE_MAX_RAM_BELOW_4G, "size",
|
||||||
|
pc_machine_get_max_ram_below_4g, pc_machine_set_max_ram_below_4g,
|
||||||
|
NULL, NULL);
|
||||||
|
object_class_property_set_description(oc, PC_MACHINE_MAX_RAM_BELOW_4G,
|
||||||
|
"Maximum ram below the 4G boundary (32bit boundary)");
|
||||||
|
|
||||||
object_class_property_add(oc, PC_MACHINE_DEVMEM_REGION_SIZE, "int",
|
object_class_property_add(oc, PC_MACHINE_DEVMEM_REGION_SIZE, "int",
|
||||||
pc_machine_get_device_memory_region_size, NULL,
|
pc_machine_get_device_memory_region_size, NULL,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
@ -129,11 +129,11 @@ static void pc_init1(MachineState *machine,
|
|||||||
if (xen_enabled()) {
|
if (xen_enabled()) {
|
||||||
xen_hvm_init(pcms, &ram_memory);
|
xen_hvm_init(pcms, &ram_memory);
|
||||||
} else {
|
} else {
|
||||||
if (!x86ms->max_ram_below_4g) {
|
if (!pcms->max_ram_below_4g) {
|
||||||
x86ms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */
|
pcms->max_ram_below_4g = 0xe0000000; /* default: 3.5G */
|
||||||
}
|
}
|
||||||
lowmem = x86ms->max_ram_below_4g;
|
lowmem = pcms->max_ram_below_4g;
|
||||||
if (machine->ram_size >= x86ms->max_ram_below_4g) {
|
if (machine->ram_size >= pcms->max_ram_below_4g) {
|
||||||
if (pcmc->gigabyte_align) {
|
if (pcmc->gigabyte_align) {
|
||||||
if (lowmem > 0xc0000000) {
|
if (lowmem > 0xc0000000) {
|
||||||
lowmem = 0xc0000000;
|
lowmem = 0xc0000000;
|
||||||
@ -142,7 +142,7 @@ static void pc_init1(MachineState *machine,
|
|||||||
warn_report("Large machine and max_ram_below_4g "
|
warn_report("Large machine and max_ram_below_4g "
|
||||||
"(%" PRIu64 ") not a multiple of 1G; "
|
"(%" PRIu64 ") not a multiple of 1G; "
|
||||||
"possible bad performance.",
|
"possible bad performance.",
|
||||||
x86ms->max_ram_below_4g);
|
pcms->max_ram_below_4g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,18 +156,18 @@ static void pc_q35_init(MachineState *machine)
|
|||||||
/* Handle the machine opt max-ram-below-4g. It is basically doing
|
/* Handle the machine opt max-ram-below-4g. It is basically doing
|
||||||
* min(qemu limit, user limit).
|
* min(qemu limit, user limit).
|
||||||
*/
|
*/
|
||||||
if (!x86ms->max_ram_below_4g) {
|
if (!pcms->max_ram_below_4g) {
|
||||||
x86ms->max_ram_below_4g = 4 * GiB;
|
pcms->max_ram_below_4g = 4 * GiB;
|
||||||
}
|
}
|
||||||
if (lowmem > x86ms->max_ram_below_4g) {
|
if (lowmem > pcms->max_ram_below_4g) {
|
||||||
lowmem = x86ms->max_ram_below_4g;
|
lowmem = pcms->max_ram_below_4g;
|
||||||
if (machine->ram_size - lowmem > lowmem &&
|
if (machine->ram_size - lowmem > lowmem &&
|
||||||
lowmem & (1 * GiB - 1)) {
|
lowmem & (1 * GiB - 1)) {
|
||||||
warn_report("There is possibly poor performance as the ram size "
|
warn_report("There is possibly poor performance as the ram size "
|
||||||
" (0x%" PRIx64 ") is more then twice the size of"
|
" (0x%" PRIx64 ") is more then twice the size of"
|
||||||
" max-ram-below-4g (%"PRIu64") and"
|
" max-ram-below-4g (%"PRIu64") and"
|
||||||
" max-ram-below-4g is not a multiple of 1G.",
|
" max-ram-below-4g is not a multiple of 1G.",
|
||||||
(uint64_t)machine->ram_size, x86ms->max_ram_below_4g);
|
(uint64_t)machine->ram_size, pcms->max_ram_below_4g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,45 +846,6 @@ void x86_bios_rom_init(MemoryRegion *rom_memory, bool isapc_ram_fw)
|
|||||||
bios);
|
bios);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void x86_machine_get_max_ram_below_4g(Object *obj, Visitor *v,
|
|
||||||
const char *name, void *opaque,
|
|
||||||
Error **errp)
|
|
||||||
{
|
|
||||||
X86MachineState *x86ms = X86_MACHINE(obj);
|
|
||||||
uint64_t value = x86ms->max_ram_below_4g;
|
|
||||||
|
|
||||||
visit_type_size(v, name, &value, errp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void x86_machine_set_max_ram_below_4g(Object *obj, Visitor *v,
|
|
||||||
const char *name, void *opaque,
|
|
||||||
Error **errp)
|
|
||||||
{
|
|
||||||
X86MachineState *x86ms = X86_MACHINE(obj);
|
|
||||||
Error *error = NULL;
|
|
||||||
uint64_t value;
|
|
||||||
|
|
||||||
visit_type_size(v, name, &value, &error);
|
|
||||||
if (error) {
|
|
||||||
error_propagate(errp, error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (value > 4 * GiB) {
|
|
||||||
error_setg(&error,
|
|
||||||
"Machine option 'max-ram-below-4g=%"PRIu64
|
|
||||||
"' expects size less than or equal to 4G", value);
|
|
||||||
error_propagate(errp, error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value < 1 * MiB) {
|
|
||||||
warn_report("Only %" PRIu64 " bytes of RAM below the 4GiB boundary,"
|
|
||||||
"BIOS may not work with less than 1MiB", value);
|
|
||||||
}
|
|
||||||
|
|
||||||
x86ms->max_ram_below_4g = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool x86_machine_is_smm_enabled(X86MachineState *x86ms)
|
bool x86_machine_is_smm_enabled(X86MachineState *x86ms)
|
||||||
{
|
{
|
||||||
bool smm_available = false;
|
bool smm_available = false;
|
||||||
@ -958,7 +919,6 @@ static void x86_machine_initfn(Object *obj)
|
|||||||
|
|
||||||
x86ms->smm = ON_OFF_AUTO_AUTO;
|
x86ms->smm = ON_OFF_AUTO_AUTO;
|
||||||
x86ms->acpi = ON_OFF_AUTO_AUTO;
|
x86ms->acpi = ON_OFF_AUTO_AUTO;
|
||||||
x86ms->max_ram_below_4g = 0; /* use default */
|
|
||||||
x86ms->smp_dies = 1;
|
x86ms->smp_dies = 1;
|
||||||
|
|
||||||
x86ms->apicid_from_cpu_idx = x86_apicid_from_cpu_idx;
|
x86ms->apicid_from_cpu_idx = x86_apicid_from_cpu_idx;
|
||||||
@ -980,12 +940,6 @@ static void x86_machine_class_init(ObjectClass *oc, void *data)
|
|||||||
x86mc->save_tsc_khz = true;
|
x86mc->save_tsc_khz = true;
|
||||||
nc->nmi_monitor_handler = x86_nmi;
|
nc->nmi_monitor_handler = x86_nmi;
|
||||||
|
|
||||||
object_class_property_add(oc, X86_MACHINE_MAX_RAM_BELOW_4G, "size",
|
|
||||||
x86_machine_get_max_ram_below_4g, x86_machine_set_max_ram_below_4g,
|
|
||||||
NULL, NULL);
|
|
||||||
object_class_property_set_description(oc, X86_MACHINE_MAX_RAM_BELOW_4G,
|
|
||||||
"Maximum ram below the 4G boundary (32bit boundary)");
|
|
||||||
|
|
||||||
object_class_property_add(oc, X86_MACHINE_SMM, "OnOffAuto",
|
object_class_property_add(oc, X86_MACHINE_SMM, "OnOffAuto",
|
||||||
x86_machine_get_smm, x86_machine_set_smm,
|
x86_machine_get_smm, x86_machine_set_smm,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
@ -205,7 +205,7 @@ static void xen_ram_init(PCMachineState *pcms,
|
|||||||
ram_addr_t block_len;
|
ram_addr_t block_len;
|
||||||
uint64_t user_lowmem =
|
uint64_t user_lowmem =
|
||||||
object_property_get_uint(qdev_get_machine(),
|
object_property_get_uint(qdev_get_machine(),
|
||||||
X86_MACHINE_MAX_RAM_BELOW_4G,
|
PC_MACHINE_MAX_RAM_BELOW_4G,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
|
|
||||||
/* Handle the machine opt max-ram-below-4g. It is basically doing
|
/* Handle the machine opt max-ram-below-4g. It is basically doing
|
||||||
|
@ -35,6 +35,7 @@ struct PCMachineState {
|
|||||||
PFlashCFI01 *flash[2];
|
PFlashCFI01 *flash[2];
|
||||||
|
|
||||||
/* Configuration options: */
|
/* Configuration options: */
|
||||||
|
uint64_t max_ram_below_4g;
|
||||||
OnOffAuto vmport;
|
OnOffAuto vmport;
|
||||||
|
|
||||||
bool acpi_build_enabled;
|
bool acpi_build_enabled;
|
||||||
@ -51,6 +52,7 @@ struct PCMachineState {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define PC_MACHINE_ACPI_DEVICE_PROP "acpi-device"
|
#define PC_MACHINE_ACPI_DEVICE_PROP "acpi-device"
|
||||||
|
#define PC_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
|
||||||
#define PC_MACHINE_DEVMEM_REGION_SIZE "device-memory-region-size"
|
#define PC_MACHINE_DEVMEM_REGION_SIZE "device-memory-region-size"
|
||||||
#define PC_MACHINE_VMPORT "vmport"
|
#define PC_MACHINE_VMPORT "vmport"
|
||||||
#define PC_MACHINE_SMBUS "smbus"
|
#define PC_MACHINE_SMBUS "smbus"
|
||||||
|
@ -51,9 +51,6 @@ typedef struct {
|
|||||||
qemu_irq *gsi;
|
qemu_irq *gsi;
|
||||||
GMappedFile *initrd_mapped_file;
|
GMappedFile *initrd_mapped_file;
|
||||||
|
|
||||||
/* Configuration options: */
|
|
||||||
uint64_t max_ram_below_4g;
|
|
||||||
|
|
||||||
/* RAM information (sizes, addresses, configuration): */
|
/* RAM information (sizes, addresses, configuration): */
|
||||||
ram_addr_t below_4g_mem_size, above_4g_mem_size;
|
ram_addr_t below_4g_mem_size, above_4g_mem_size;
|
||||||
|
|
||||||
@ -82,7 +79,6 @@ typedef struct {
|
|||||||
AddressSpace *ioapic_as;
|
AddressSpace *ioapic_as;
|
||||||
} X86MachineState;
|
} X86MachineState;
|
||||||
|
|
||||||
#define X86_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
|
|
||||||
#define X86_MACHINE_SMM "smm"
|
#define X86_MACHINE_SMM "smm"
|
||||||
#define X86_MACHINE_ACPI "acpi"
|
#define X86_MACHINE_ACPI "acpi"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user