mirror of https://github.com/xemu-project/xemu.git
Misc HW patches queue
- Prevent NULL deref in sPAPR network model (Oleg) - Automatic deprecation of versioned machine types (Daniel) - Correct 'dump-guest-core' property name in hint (Akihiko) - Prevent IRQ leak in MacIO IDE model (Mark) - Remove dead #ifdef'ry related to unsupported macOS 12.0 (Akihiko) - Remove "hw/hw.h" where unnecessary (Thomas) -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmaDiSQACgkQ4+MsLN6t wN4jmBAA2kxwFAGbKvokANDAZBwWmJdnuIPcqS+jdo/wCuQXOo1ROADd3NFlgQWx z1xOv/LiAmQiUeeiP+nlA8gWCdW93PErU07og1p1+N2D1sBO6oG5QDlT/tTFuEGd IL21jG2xWkEemd3PSN2pHKrytpS0e4S0cNZIKgTUTKdv+Mb2ZEiQi7K4zUTjcmjz nlsSjTXdyKBmoiqNGhITWfbR2IUWjtCpzUO44ceqXd5HDpvfGhpKI7Uwun1W2xNU yw1XrAFd64Qhd/lvc28G1DLfDdtRIoaRGxgLzQbU6621s0o50Ecs6TNHseuUAKvd tQhOtM8IEuZ6jVw8nswCPIcJyjbeY29kjI4WmD2weF1fZbDey6Emlrf+dkJUIuCb TximyTXw3rb1nREUVsEQLF69BKjTjE5+ETaplcTWGHCoH2+uA/5MqygalTH1Ub9W TwVWSUwpNvIJ3RTsT20YVowkill8piF+ECldTKzJuWjqDviiJDoMm5EFdkkcUB20 nMyhGoiXtiQ4NYU0/B6HbHOXZkqLbhWcx9G281xJ+RRwjUyVxXD3zHGR9AoOp9ls EAo/2URJtGN95LJmzCtaD+oo0wRZ5+7lmnqHPPXkYUdwFm4bhe3dP4NggIrS0cXn 19wvBqQuPwywxIbFEu6327YtfPRcImWIlFthWnm9lUyDmbOqDKw= =fLCx -----END PGP SIGNATURE----- Merge tag 'hw-misc-20240702' of https://github.com/philmd/qemu into staging Misc HW patches queue - Prevent NULL deref in sPAPR network model (Oleg) - Automatic deprecation of versioned machine types (Daniel) - Correct 'dump-guest-core' property name in hint (Akihiko) - Prevent IRQ leak in MacIO IDE model (Mark) - Remove dead #ifdef'ry related to unsupported macOS 12.0 (Akihiko) - Remove "hw/hw.h" where unnecessary (Thomas) # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmaDiSQACgkQ4+MsLN6t # wN4jmBAA2kxwFAGbKvokANDAZBwWmJdnuIPcqS+jdo/wCuQXOo1ROADd3NFlgQWx # z1xOv/LiAmQiUeeiP+nlA8gWCdW93PErU07og1p1+N2D1sBO6oG5QDlT/tTFuEGd # IL21jG2xWkEemd3PSN2pHKrytpS0e4S0cNZIKgTUTKdv+Mb2ZEiQi7K4zUTjcmjz # nlsSjTXdyKBmoiqNGhITWfbR2IUWjtCpzUO44ceqXd5HDpvfGhpKI7Uwun1W2xNU # yw1XrAFd64Qhd/lvc28G1DLfDdtRIoaRGxgLzQbU6621s0o50Ecs6TNHseuUAKvd # tQhOtM8IEuZ6jVw8nswCPIcJyjbeY29kjI4WmD2weF1fZbDey6Emlrf+dkJUIuCb # TximyTXw3rb1nREUVsEQLF69BKjTjE5+ETaplcTWGHCoH2+uA/5MqygalTH1Ub9W # TwVWSUwpNvIJ3RTsT20YVowkill8piF+ECldTKzJuWjqDviiJDoMm5EFdkkcUB20 # nMyhGoiXtiQ4NYU0/B6HbHOXZkqLbhWcx9G281xJ+RRwjUyVxXD3zHGR9AoOp9ls # EAo/2URJtGN95LJmzCtaD+oo0wRZ5+7lmnqHPPXkYUdwFm4bhe3dP4NggIrS0cXn # 19wvBqQuPwywxIbFEu6327YtfPRcImWIlFthWnm9lUyDmbOqDKw= # =fLCx # -----END PGP SIGNATURE----- # gpg: Signature made Mon 01 Jul 2024 09:59:16 PM PDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] * tag 'hw-misc-20240702' of https://github.com/philmd/qemu: (22 commits) Remove inclusion of hw/hw.h from files that don't need it net/vmnet: Drop ifdef for macOS versions older than 12.0 block/file-posix: Drop ifdef for macOS versions older than 12.0 audio: Drop ifdef for macOS versions older than 12.0 hvf: Drop ifdef for macOS versions older than 12.0 hw/ide/macio: switch from using qemu_allocate_irq() to qdev input GPIOs system/physmem: Fix reference to dump-guest-core docs: document special exception for machine type deprecation & removal hw/i386: remove obsolete manual deprecation reason string of i440fx machines hw/ppc: remove obsolete manual deprecation reason string of spapr machines hw: skip registration of outdated versioned machine types hw: set deprecation info for all versioned machine types include/hw: temporarily disable deletion of versioned machine types include/hw: add macros for deprecation & removal of versioned machines hw/i386: convert 'q35' machine definitions to use new macros hw/i386: convert 'i440fx' machine definitions to use new macros hw/m68k: convert 'virt' machine definitions to use new macros hw/ppc: convert 'spapr' machine definitions to use new macros hw/s390x: convert 'ccw' machine definitions to use new macros hw/arm: convert 'virt' machine definitions to use new macros ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
ff6d8490e3
|
@ -23,10 +23,7 @@ const char *hvf_return_string(hv_return_t ret)
|
|||
case HV_NO_RESOURCES: return "HV_NO_RESOURCES";
|
||||
case HV_NO_DEVICE: return "HV_NO_DEVICE";
|
||||
case HV_UNSUPPORTED: return "HV_UNSUPPORTED";
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
case HV_DENIED: return "HV_DENIED";
|
||||
#endif
|
||||
default: return "[unknown hv_return value]";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,11 +44,6 @@ typedef struct coreaudioVoiceOut {
|
|||
bool enabled;
|
||||
} coreaudioVoiceOut;
|
||||
|
||||
#if !defined(MAC_OS_VERSION_12_0) \
|
||||
|| (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_12_0)
|
||||
#define kAudioObjectPropertyElementMain kAudioObjectPropertyElementMaster
|
||||
#endif
|
||||
|
||||
static const AudioObjectPropertyAddress voice_addr = {
|
||||
kAudioHardwarePropertyDefaultOutputDevice,
|
||||
kAudioObjectPropertyScopeGlobal,
|
||||
|
|
|
@ -3929,11 +3929,6 @@ BlockDriver bdrv_file = {
|
|||
static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath,
|
||||
CFIndex maxPathSize, int flags);
|
||||
|
||||
#if !defined(MAC_OS_VERSION_12_0) \
|
||||
|| (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_12_0)
|
||||
#define IOMainPort IOMasterPort
|
||||
#endif
|
||||
|
||||
static char *FindEjectableOpticalMedia(io_iterator_t *mediaIterator)
|
||||
{
|
||||
kern_return_t kernResult = KERN_FAILURE;
|
||||
|
|
|
@ -11,6 +11,19 @@ releases, the feature is liable to be removed. Deprecated features may also
|
|||
generate warnings on the console when QEMU starts up, or if activated via a
|
||||
monitor command, however, this is not a mandatory requirement.
|
||||
|
||||
As a special exception to this general timeframe, rather than have an
|
||||
indefinite lifetime, versioned machine types are only intended to be
|
||||
supported for a period of 6 years, equivalent to 18 QEMU releases. All
|
||||
versioned machine types will be automatically marked deprecated after an
|
||||
initial 3 years (9 QEMU releases) has passed, and will then be deleted after
|
||||
a further 3 year period has passed. It is recommended that a deprecated
|
||||
machine type is only used for incoming migrations and restore of saved state,
|
||||
for pre-existing VM deployments. They should be scheduled for updating to a
|
||||
newer machine type during an appropriate service window. Newly deployed VMs
|
||||
should exclusively use a non-deprecated machine type, with use of the most
|
||||
recent version highly recommended. Non-versioned machine types follow the
|
||||
general feature deprecation policy.
|
||||
|
||||
Prior to the 2.10.0 release there was no official policy on how
|
||||
long features would be deprecated prior to their removal, nor
|
||||
any documented list of which features were deprecated. Thus
|
||||
|
|
|
@ -101,33 +101,37 @@ static void arm_virt_compat_set(MachineClass *mc)
|
|||
arm_virt_compat_len);
|
||||
}
|
||||
|
||||
#define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
|
||||
static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
|
||||
void *data) \
|
||||
#define DEFINE_VIRT_MACHINE_IMPL(latest, ...) \
|
||||
static void MACHINE_VER_SYM(class_init, virt, __VA_ARGS__)( \
|
||||
ObjectClass *oc, \
|
||||
void *data) \
|
||||
{ \
|
||||
MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
arm_virt_compat_set(mc); \
|
||||
virt_machine_##major##_##minor##_options(mc); \
|
||||
mc->desc = "QEMU " # major "." # minor " ARM Virtual Machine"; \
|
||||
MACHINE_VER_SYM(options, virt, __VA_ARGS__)(mc); \
|
||||
mc->desc = "QEMU " MACHINE_VER_STR(__VA_ARGS__) " ARM Virtual Machine"; \
|
||||
MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
if (latest) { \
|
||||
mc->alias = "virt"; \
|
||||
} \
|
||||
} \
|
||||
static const TypeInfo machvirt_##major##_##minor##_info = { \
|
||||
.name = MACHINE_TYPE_NAME("virt-" # major "." # minor), \
|
||||
.parent = TYPE_VIRT_MACHINE, \
|
||||
.class_init = virt_##major##_##minor##_class_init, \
|
||||
}; \
|
||||
static void machvirt_machine_##major##_##minor##_init(void) \
|
||||
static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) = \
|
||||
{ \
|
||||
type_register_static(&machvirt_##major##_##minor##_info); \
|
||||
.name = MACHINE_VER_TYPE_NAME("virt", __VA_ARGS__), \
|
||||
.parent = TYPE_VIRT_MACHINE, \
|
||||
.class_init = MACHINE_VER_SYM(class_init, virt, __VA_ARGS__), \
|
||||
}; \
|
||||
static void MACHINE_VER_SYM(register, virt, __VA_ARGS__)(void) \
|
||||
{ \
|
||||
MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
type_register_static(&MACHINE_VER_SYM(info, virt, __VA_ARGS__)); \
|
||||
} \
|
||||
type_init(machvirt_machine_##major##_##minor##_init);
|
||||
type_init(MACHINE_VER_SYM(register, virt, __VA_ARGS__));
|
||||
|
||||
#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \
|
||||
DEFINE_VIRT_MACHINE_LATEST(major, minor, true)
|
||||
DEFINE_VIRT_MACHINE_IMPL(true, major, minor)
|
||||
#define DEFINE_VIRT_MACHINE(major, minor) \
|
||||
DEFINE_VIRT_MACHINE_LATEST(major, minor, false)
|
||||
DEFINE_VIRT_MACHINE_IMPL(false, major, minor)
|
||||
|
||||
|
||||
/* Number of external interrupt lines to configure the GIC with */
|
||||
|
|
|
@ -445,12 +445,13 @@ static void pc_xen_hvm_init(MachineState *machine)
|
|||
}
|
||||
#endif
|
||||
|
||||
#define DEFINE_I440FX_MACHINE(suffix, name, optionfn) \
|
||||
static void pc_init_##suffix(MachineState *machine) \
|
||||
{ \
|
||||
pc_init1(machine, TYPE_I440FX_PCI_DEVICE); \
|
||||
} \
|
||||
DEFINE_PC_MACHINE(suffix, name, pc_init_##suffix, optionfn)
|
||||
static void pc_i440fx_init(MachineState *machine)
|
||||
{
|
||||
pc_init1(machine, TYPE_I440FX_PCI_DEVICE);
|
||||
}
|
||||
|
||||
#define DEFINE_I440FX_MACHINE(major, minor) \
|
||||
DEFINE_PC_VER_MACHINE(pc_i440fx, "pc-i440fx", pc_i440fx_init, major, minor);
|
||||
|
||||
static void pc_i440fx_machine_options(MachineClass *m)
|
||||
{
|
||||
|
@ -478,21 +479,20 @@ static void pc_i440fx_machine_options(MachineClass *m)
|
|||
"Use a different south bridge than PIIX3");
|
||||
}
|
||||
|
||||
static void pc_i440fx_9_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_9_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_machine_options(m);
|
||||
m->alias = "pc";
|
||||
m->is_default = true;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v9_1, "pc-i440fx-9.1",
|
||||
pc_i440fx_9_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(9, 1);
|
||||
|
||||
static void pc_i440fx_9_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_9_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_9_1_machine_options(m);
|
||||
pc_i440fx_machine_9_1_options(m);
|
||||
m->alias = NULL;
|
||||
m->is_default = false;
|
||||
|
||||
|
@ -501,14 +501,13 @@ static void pc_i440fx_9_0_machine_options(MachineClass *m)
|
|||
pcmc->isa_bios_alias = false;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v9_0, "pc-i440fx-9.0",
|
||||
pc_i440fx_9_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(9, 0);
|
||||
|
||||
static void pc_i440fx_8_2_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_8_2_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_9_0_machine_options(m);
|
||||
pc_i440fx_machine_9_0_options(m);
|
||||
|
||||
compat_props_add(m->compat_props, hw_compat_8_2, hw_compat_8_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_2, pc_compat_8_2_len);
|
||||
|
@ -516,28 +515,26 @@ static void pc_i440fx_8_2_machine_options(MachineClass *m)
|
|||
pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_64;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v8_2, "pc-i440fx-8.2",
|
||||
pc_i440fx_8_2_machine_options);
|
||||
DEFINE_I440FX_MACHINE(8, 2);
|
||||
|
||||
static void pc_i440fx_8_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_8_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_8_2_machine_options(m);
|
||||
pc_i440fx_machine_8_2_options(m);
|
||||
pcmc->broken_32bit_mem_addr_check = true;
|
||||
|
||||
compat_props_add(m->compat_props, hw_compat_8_1, hw_compat_8_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_1, pc_compat_8_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v8_1, "pc-i440fx-8.1",
|
||||
pc_i440fx_8_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(8, 1);
|
||||
|
||||
static void pc_i440fx_8_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_8_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_8_1_machine_options(m);
|
||||
pc_i440fx_machine_8_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_8_0, hw_compat_8_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_0, pc_compat_8_0_len);
|
||||
|
||||
|
@ -545,268 +542,243 @@ static void pc_i440fx_8_0_machine_options(MachineClass *m)
|
|||
pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_32;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v8_0, "pc-i440fx-8.0",
|
||||
pc_i440fx_8_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(8, 0);
|
||||
|
||||
static void pc_i440fx_7_2_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_7_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_8_0_machine_options(m);
|
||||
pc_i440fx_machine_8_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_7_2, hw_compat_7_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_2, pc_compat_7_2_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v7_2, "pc-i440fx-7.2",
|
||||
pc_i440fx_7_2_machine_options);
|
||||
DEFINE_I440FX_MACHINE(7, 2)
|
||||
|
||||
static void pc_i440fx_7_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_7_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_7_2_machine_options(m);
|
||||
pc_i440fx_machine_7_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v7_1, "pc-i440fx-7.1",
|
||||
pc_i440fx_7_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(7, 1);
|
||||
|
||||
static void pc_i440fx_7_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_7_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_i440fx_7_1_machine_options(m);
|
||||
pc_i440fx_machine_7_1_options(m);
|
||||
pcmc->enforce_amd_1tb_hole = false;
|
||||
compat_props_add(m->compat_props, hw_compat_7_0, hw_compat_7_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_0, pc_compat_7_0_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v7_0, "pc-i440fx-7.0",
|
||||
pc_i440fx_7_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(7, 0);
|
||||
|
||||
static void pc_i440fx_6_2_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_6_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_7_0_machine_options(m);
|
||||
pc_i440fx_machine_7_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_2, hw_compat_6_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_2, pc_compat_6_2_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v6_2, "pc-i440fx-6.2",
|
||||
pc_i440fx_6_2_machine_options);
|
||||
DEFINE_I440FX_MACHINE(6, 2);
|
||||
|
||||
static void pc_i440fx_6_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_6_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_6_2_machine_options(m);
|
||||
pc_i440fx_machine_6_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_1, hw_compat_6_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_1, pc_compat_6_1_len);
|
||||
m->smp_props.prefer_sockets = true;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v6_1, "pc-i440fx-6.1",
|
||||
pc_i440fx_6_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(6, 1);
|
||||
|
||||
static void pc_i440fx_6_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_6_0_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_6_1_machine_options(m);
|
||||
pc_i440fx_machine_6_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_0, hw_compat_6_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_0, pc_compat_6_0_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v6_0, "pc-i440fx-6.0",
|
||||
pc_i440fx_6_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(6, 0);
|
||||
|
||||
static void pc_i440fx_5_2_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_5_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_6_0_machine_options(m);
|
||||
pc_i440fx_machine_6_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_5_2, hw_compat_5_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_2, pc_compat_5_2_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v5_2, "pc-i440fx-5.2",
|
||||
pc_i440fx_5_2_machine_options);
|
||||
DEFINE_I440FX_MACHINE(5, 2);
|
||||
|
||||
static void pc_i440fx_5_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_5_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_5_2_machine_options(m);
|
||||
pc_i440fx_machine_5_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_5_1, hw_compat_5_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_1, pc_compat_5_1_len);
|
||||
pcmc->kvmclock_create_always = false;
|
||||
pcmc->pci_root_uid = 1;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v5_1, "pc-i440fx-5.1",
|
||||
pc_i440fx_5_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(5, 1);
|
||||
|
||||
static void pc_i440fx_5_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_5_0_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_5_1_machine_options(m);
|
||||
pc_i440fx_machine_5_1_options(m);
|
||||
m->numa_mem_supported = true;
|
||||
compat_props_add(m->compat_props, hw_compat_5_0, hw_compat_5_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_0, pc_compat_5_0_len);
|
||||
m->auto_enable_numa_with_memdev = false;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v5_0, "pc-i440fx-5.0",
|
||||
pc_i440fx_5_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(5, 0);
|
||||
|
||||
static void pc_i440fx_4_2_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_4_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_5_0_machine_options(m);
|
||||
pc_i440fx_machine_5_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_4_2, hw_compat_4_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_4_2, pc_compat_4_2_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v4_2, "pc-i440fx-4.2",
|
||||
pc_i440fx_4_2_machine_options);
|
||||
DEFINE_I440FX_MACHINE(4, 2);
|
||||
|
||||
static void pc_i440fx_4_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_4_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_4_2_machine_options(m);
|
||||
pc_i440fx_machine_4_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_4_1, hw_compat_4_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_4_1, pc_compat_4_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v4_1, "pc-i440fx-4.1",
|
||||
pc_i440fx_4_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(4, 1);
|
||||
|
||||
static void pc_i440fx_4_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_4_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_i440fx_4_1_machine_options(m);
|
||||
pc_i440fx_machine_4_1_options(m);
|
||||
pcmc->default_cpu_version = CPU_VERSION_LEGACY;
|
||||
compat_props_add(m->compat_props, hw_compat_4_0, hw_compat_4_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_4_0, pc_compat_4_0_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v4_0, "pc-i440fx-4.0",
|
||||
pc_i440fx_4_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(4, 0);
|
||||
|
||||
static void pc_i440fx_3_1_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_3_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_4_0_machine_options(m);
|
||||
pc_i440fx_machine_4_0_options(m);
|
||||
m->smbus_no_migration_support = true;
|
||||
pcmc->pvh_enabled = false;
|
||||
compat_props_add(m->compat_props, hw_compat_3_1, hw_compat_3_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1",
|
||||
pc_i440fx_3_1_machine_options);
|
||||
DEFINE_I440FX_MACHINE(3, 1);
|
||||
|
||||
static void pc_i440fx_3_0_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_3_0_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_3_1_machine_options(m);
|
||||
pc_i440fx_machine_3_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0",
|
||||
pc_i440fx_3_0_machine_options);
|
||||
DEFINE_I440FX_MACHINE(3, 0);
|
||||
|
||||
static void pc_i440fx_2_12_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_12_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_3_0_machine_options(m);
|
||||
m->deprecation_reason = "old and unattended - use a newer version instead";
|
||||
pc_i440fx_machine_3_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12",
|
||||
pc_i440fx_2_12_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 12);
|
||||
|
||||
static void pc_i440fx_2_11_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_11_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_2_12_machine_options(m);
|
||||
pc_i440fx_machine_2_12_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11",
|
||||
pc_i440fx_2_11_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 11);
|
||||
|
||||
static void pc_i440fx_2_10_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_10_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_2_11_machine_options(m);
|
||||
pc_i440fx_machine_2_11_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
|
||||
m->auto_enable_numa_with_memhp = false;
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_10, "pc-i440fx-2.10",
|
||||
pc_i440fx_2_10_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 10);
|
||||
|
||||
static void pc_i440fx_2_9_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_9_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_2_10_machine_options(m);
|
||||
pc_i440fx_machine_2_10_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_9, "pc-i440fx-2.9",
|
||||
pc_i440fx_2_9_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 9);
|
||||
|
||||
static void pc_i440fx_2_8_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_8_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_2_9_machine_options(m);
|
||||
pc_i440fx_machine_2_9_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8",
|
||||
pc_i440fx_2_8_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 8);
|
||||
|
||||
static void pc_i440fx_2_7_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_7_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_2_8_machine_options(m);
|
||||
pc_i440fx_machine_2_8_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7",
|
||||
pc_i440fx_2_7_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 7);
|
||||
|
||||
static void pc_i440fx_2_6_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_6_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_2_7_machine_options(m);
|
||||
pc_i440fx_machine_2_7_options(m);
|
||||
pcmc->legacy_cpu_hotplug = true;
|
||||
x86mc->fwcfg_dma_enabled = false;
|
||||
compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6",
|
||||
pc_i440fx_2_6_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 6);
|
||||
|
||||
static void pc_i440fx_2_5_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_5_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_2_6_machine_options(m);
|
||||
pc_i440fx_machine_2_6_options(m);
|
||||
x86mc->save_tsc_khz = false;
|
||||
m->legacy_fw_cfg_order = 1;
|
||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5",
|
||||
pc_i440fx_2_5_machine_options);
|
||||
DEFINE_I440FX_MACHINE(2, 5);
|
||||
|
||||
static void pc_i440fx_2_4_machine_options(MachineClass *m)
|
||||
static void pc_i440fx_machine_2_4_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_i440fx_2_5_machine_options(m);
|
||||
pc_i440fx_machine_2_5_options(m);
|
||||
m->hw_version = "2.4.0";
|
||||
pcmc->broken_reserved_end = true;
|
||||
compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
|
||||
}
|
||||
|
||||
DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4",
|
||||
pc_i440fx_2_4_machine_options)
|
||||
DEFINE_I440FX_MACHINE(2, 4);
|
||||
|
||||
#ifdef CONFIG_ISAPC
|
||||
static void isapc_machine_options(MachineClass *m)
|
||||
|
@ -833,20 +805,20 @@ DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa,
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
static void xenfv_4_2_machine_options(MachineClass *m)
|
||||
static void xenfv_machine_4_2_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_4_2_machine_options(m);
|
||||
pc_i440fx_machine_4_2_options(m);
|
||||
m->desc = "Xen Fully-virtualized PC";
|
||||
m->max_cpus = HVM_MAX_VCPUS;
|
||||
m->default_machine_opts = "accel=xen,suppress-vmdesc=on";
|
||||
}
|
||||
|
||||
DEFINE_PC_MACHINE(xenfv_4_2, "xenfv-4.2", pc_xen_hvm_init,
|
||||
xenfv_4_2_machine_options);
|
||||
xenfv_machine_4_2_options);
|
||||
|
||||
static void xenfv_3_1_machine_options(MachineClass *m)
|
||||
static void xenfv_machine_3_1_options(MachineClass *m)
|
||||
{
|
||||
pc_i440fx_3_1_machine_options(m);
|
||||
pc_i440fx_machine_3_1_options(m);
|
||||
m->desc = "Xen Fully-virtualized PC";
|
||||
m->alias = "xenfv";
|
||||
m->max_cpus = HVM_MAX_VCPUS;
|
||||
|
@ -854,5 +826,5 @@ static void xenfv_3_1_machine_options(MachineClass *m)
|
|||
}
|
||||
|
||||
DEFINE_PC_MACHINE(xenfv, "xenfv-3.1", pc_xen_hvm_init,
|
||||
xenfv_3_1_machine_options);
|
||||
xenfv_machine_3_1_options);
|
||||
#endif
|
||||
|
|
215
hw/i386/pc_q35.c
215
hw/i386/pc_q35.c
|
@ -331,17 +331,11 @@ static void pc_q35_init(MachineState *machine)
|
|||
}
|
||||
}
|
||||
|
||||
#define DEFINE_Q35_MACHINE(suffix, name, compatfn, optionfn) \
|
||||
static void pc_init_##suffix(MachineState *machine) \
|
||||
{ \
|
||||
void (*compat)(MachineState *m) = (compatfn); \
|
||||
if (compat) { \
|
||||
compat(machine); \
|
||||
} \
|
||||
pc_q35_init(machine); \
|
||||
} \
|
||||
DEFINE_PC_MACHINE(suffix, name, pc_init_##suffix, optionfn)
|
||||
#define DEFINE_Q35_MACHINE(major, minor) \
|
||||
DEFINE_PC_VER_MACHINE(pc_q35, "pc-q35", pc_q35_init, major, minor);
|
||||
|
||||
#define DEFINE_Q35_MACHINE_BUGFIX(major, minor, micro) \
|
||||
DEFINE_PC_VER_MACHINE(pc_q35, "pc-q35", pc_q35_init, major, minor, micro);
|
||||
|
||||
static void pc_q35_machine_options(MachineClass *m)
|
||||
{
|
||||
|
@ -367,32 +361,30 @@ static void pc_q35_machine_options(MachineClass *m)
|
|||
pc_q35_compat_defaults, pc_q35_compat_defaults_len);
|
||||
}
|
||||
|
||||
static void pc_q35_9_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_9_1_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_machine_options(m);
|
||||
m->alias = "q35";
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v9_1, "pc-q35-9.1", NULL,
|
||||
pc_q35_9_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(9, 1);
|
||||
|
||||
static void pc_q35_9_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_9_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_9_1_machine_options(m);
|
||||
pc_q35_machine_9_1_options(m);
|
||||
m->alias = NULL;
|
||||
compat_props_add(m->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_9_0, pc_compat_9_0_len);
|
||||
pcmc->isa_bios_alias = false;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v9_0, "pc-q35-9.0", NULL,
|
||||
pc_q35_9_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(9, 0);
|
||||
|
||||
static void pc_q35_8_2_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_8_2_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_9_0_machine_options(m);
|
||||
pc_q35_machine_9_0_options(m);
|
||||
m->max_cpus = 1024;
|
||||
compat_props_add(m->compat_props, hw_compat_8_2, hw_compat_8_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_2, pc_compat_8_2_len);
|
||||
|
@ -400,26 +392,24 @@ static void pc_q35_8_2_machine_options(MachineClass *m)
|
|||
pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_64;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v8_2, "pc-q35-8.2", NULL,
|
||||
pc_q35_8_2_machine_options);
|
||||
DEFINE_Q35_MACHINE(8, 2);
|
||||
|
||||
static void pc_q35_8_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_8_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_8_2_machine_options(m);
|
||||
pc_q35_machine_8_2_options(m);
|
||||
pcmc->broken_32bit_mem_addr_check = true;
|
||||
compat_props_add(m->compat_props, hw_compat_8_1, hw_compat_8_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_1, pc_compat_8_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v8_1, "pc-q35-8.1", NULL,
|
||||
pc_q35_8_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(8, 1);
|
||||
|
||||
static void pc_q35_8_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_8_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_8_1_machine_options(m);
|
||||
pc_q35_machine_8_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_8_0, hw_compat_8_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_8_0, pc_compat_8_0_len);
|
||||
|
||||
|
@ -428,132 +418,120 @@ static void pc_q35_8_0_machine_options(MachineClass *m)
|
|||
m->max_cpus = 288;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v8_0, "pc-q35-8.0", NULL,
|
||||
pc_q35_8_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(8, 0);
|
||||
|
||||
static void pc_q35_7_2_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_7_2_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_8_0_machine_options(m);
|
||||
pc_q35_machine_8_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_7_2, hw_compat_7_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_2, pc_compat_7_2_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v7_2, "pc-q35-7.2", NULL,
|
||||
pc_q35_7_2_machine_options);
|
||||
DEFINE_Q35_MACHINE(7, 2);
|
||||
|
||||
static void pc_q35_7_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_7_1_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_7_2_machine_options(m);
|
||||
pc_q35_machine_7_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_1, pc_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v7_1, "pc-q35-7.1", NULL,
|
||||
pc_q35_7_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(7, 1);
|
||||
|
||||
static void pc_q35_7_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_7_0_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_7_1_machine_options(m);
|
||||
pc_q35_machine_7_1_options(m);
|
||||
pcmc->enforce_amd_1tb_hole = false;
|
||||
compat_props_add(m->compat_props, hw_compat_7_0, hw_compat_7_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_7_0, pc_compat_7_0_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v7_0, "pc-q35-7.0", NULL,
|
||||
pc_q35_7_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(7, 0);
|
||||
|
||||
static void pc_q35_6_2_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_6_2_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_7_0_machine_options(m);
|
||||
pc_q35_machine_7_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_2, hw_compat_6_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_2, pc_compat_6_2_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v6_2, "pc-q35-6.2", NULL,
|
||||
pc_q35_6_2_machine_options);
|
||||
DEFINE_Q35_MACHINE(6, 2);
|
||||
|
||||
static void pc_q35_6_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_6_1_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_6_2_machine_options(m);
|
||||
pc_q35_machine_6_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_1, hw_compat_6_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_1, pc_compat_6_1_len);
|
||||
m->smp_props.prefer_sockets = true;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v6_1, "pc-q35-6.1", NULL,
|
||||
pc_q35_6_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(6, 1);
|
||||
|
||||
static void pc_q35_6_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_6_0_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_6_1_machine_options(m);
|
||||
pc_q35_machine_6_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_6_0, hw_compat_6_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_6_0, pc_compat_6_0_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v6_0, "pc-q35-6.0", NULL,
|
||||
pc_q35_6_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(6, 0);
|
||||
|
||||
static void pc_q35_5_2_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_5_2_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_6_0_machine_options(m);
|
||||
pc_q35_machine_6_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_5_2, hw_compat_5_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_2, pc_compat_5_2_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v5_2, "pc-q35-5.2", NULL,
|
||||
pc_q35_5_2_machine_options);
|
||||
DEFINE_Q35_MACHINE(5, 2);
|
||||
|
||||
static void pc_q35_5_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_5_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_5_2_machine_options(m);
|
||||
pc_q35_machine_5_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_5_1, hw_compat_5_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_1, pc_compat_5_1_len);
|
||||
pcmc->kvmclock_create_always = false;
|
||||
pcmc->pci_root_uid = 1;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v5_1, "pc-q35-5.1", NULL,
|
||||
pc_q35_5_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(5, 1);
|
||||
|
||||
static void pc_q35_5_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_5_0_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_5_1_machine_options(m);
|
||||
pc_q35_machine_5_1_options(m);
|
||||
m->numa_mem_supported = true;
|
||||
compat_props_add(m->compat_props, hw_compat_5_0, hw_compat_5_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_5_0, pc_compat_5_0_len);
|
||||
m->auto_enable_numa_with_memdev = false;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v5_0, "pc-q35-5.0", NULL,
|
||||
pc_q35_5_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(5, 0);
|
||||
|
||||
static void pc_q35_4_2_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_4_2_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_5_0_machine_options(m);
|
||||
pc_q35_machine_5_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_4_2, hw_compat_4_2_len);
|
||||
compat_props_add(m->compat_props, pc_compat_4_2, pc_compat_4_2_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v4_2, "pc-q35-4.2", NULL,
|
||||
pc_q35_4_2_machine_options);
|
||||
DEFINE_Q35_MACHINE(4, 2);
|
||||
|
||||
static void pc_q35_4_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_4_1_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_4_2_machine_options(m);
|
||||
pc_q35_machine_4_2_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_4_1, hw_compat_4_1_len);
|
||||
compat_props_add(m->compat_props, pc_compat_4_1, pc_compat_4_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v4_1, "pc-q35-4.1", NULL,
|
||||
pc_q35_4_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(4, 1);
|
||||
|
||||
static void pc_q35_4_0_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_4_0_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
pc_q35_4_1_machine_options(m);
|
||||
pc_q35_machine_4_1_options(m);
|
||||
pcmc->default_cpu_version = CPU_VERSION_LEGACY;
|
||||
/*
|
||||
* This is the default machine for the 4.0-stable branch. It is basically
|
||||
|
@ -564,24 +542,22 @@ static void pc_q35_4_0_1_machine_options(MachineClass *m)
|
|||
compat_props_add(m->compat_props, pc_compat_4_0, pc_compat_4_0_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v4_0_1, "pc-q35-4.0.1", NULL,
|
||||
pc_q35_4_0_1_machine_options);
|
||||
DEFINE_Q35_MACHINE_BUGFIX(4, 0, 1);
|
||||
|
||||
static void pc_q35_4_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_4_0_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_4_0_1_machine_options(m);
|
||||
pc_q35_machine_4_0_1_options(m);
|
||||
m->default_kernel_irqchip_split = true;
|
||||
/* Compat props are applied by the 4.0.1 machine */
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL,
|
||||
pc_q35_4_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(4, 0);
|
||||
|
||||
static void pc_q35_3_1_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_3_1_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_4_0_machine_options(m);
|
||||
pc_q35_machine_4_0_options(m);
|
||||
m->default_kernel_irqchip_split = false;
|
||||
m->smbus_no_migration_support = true;
|
||||
pcmc->pvh_enabled = false;
|
||||
|
@ -589,121 +565,110 @@ static void pc_q35_3_1_machine_options(MachineClass *m)
|
|||
compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
|
||||
pc_q35_3_1_machine_options);
|
||||
DEFINE_Q35_MACHINE(3, 1);
|
||||
|
||||
static void pc_q35_3_0_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_3_0_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_3_1_machine_options(m);
|
||||
pc_q35_machine_3_1_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
|
||||
compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
|
||||
pc_q35_3_0_machine_options);
|
||||
DEFINE_Q35_MACHINE(3, 0);
|
||||
|
||||
static void pc_q35_2_12_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_12_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_3_0_machine_options(m);
|
||||
pc_q35_machine_3_0_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
|
||||
pc_q35_2_12_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 12);
|
||||
|
||||
static void pc_q35_2_11_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_11_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_2_12_machine_options(m);
|
||||
pc_q35_machine_2_12_options(m);
|
||||
m->default_nic = "e1000";
|
||||
compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
|
||||
pc_q35_2_11_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 11);
|
||||
|
||||
static void pc_q35_2_10_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_10_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_2_11_machine_options(m);
|
||||
pc_q35_machine_2_11_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
|
||||
m->auto_enable_numa_with_memhp = false;
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_10, "pc-q35-2.10", NULL,
|
||||
pc_q35_2_10_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 10);
|
||||
|
||||
static void pc_q35_2_9_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_9_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_2_10_machine_options(m);
|
||||
pc_q35_machine_2_10_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
|
||||
pc_q35_2_9_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 9);
|
||||
|
||||
static void pc_q35_2_8_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_8_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_2_9_machine_options(m);
|
||||
pc_q35_machine_2_9_options(m);
|
||||
compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
|
||||
pc_q35_2_8_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 8);
|
||||
|
||||
static void pc_q35_2_7_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_7_options(MachineClass *m)
|
||||
{
|
||||
pc_q35_2_8_machine_options(m);
|
||||
pc_q35_machine_2_8_options(m);
|
||||
m->max_cpus = 255;
|
||||
compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
|
||||
pc_q35_2_7_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 7);
|
||||
|
||||
static void pc_q35_2_6_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_6_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_2_7_machine_options(m);
|
||||
pc_q35_machine_2_7_options(m);
|
||||
pcmc->legacy_cpu_hotplug = true;
|
||||
x86mc->fwcfg_dma_enabled = false;
|
||||
compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
|
||||
pc_q35_2_6_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 6);
|
||||
|
||||
static void pc_q35_2_5_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_5_options(MachineClass *m)
|
||||
{
|
||||
X86MachineClass *x86mc = X86_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_2_6_machine_options(m);
|
||||
pc_q35_machine_2_6_options(m);
|
||||
x86mc->save_tsc_khz = false;
|
||||
m->legacy_fw_cfg_order = 1;
|
||||
compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
|
||||
pc_q35_2_5_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 5);
|
||||
|
||||
static void pc_q35_2_4_machine_options(MachineClass *m)
|
||||
static void pc_q35_machine_2_4_options(MachineClass *m)
|
||||
{
|
||||
PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
|
||||
|
||||
pc_q35_2_5_machine_options(m);
|
||||
pc_q35_machine_2_5_options(m);
|
||||
m->hw_version = "2.4.0";
|
||||
pcmc->broken_reserved_end = true;
|
||||
compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
|
||||
}
|
||||
|
||||
DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
|
||||
pc_q35_2_4_machine_options);
|
||||
DEFINE_Q35_MACHINE(2, 4);
|
||||
|
|
|
@ -420,7 +420,8 @@ static void macio_ide_realizefn(DeviceState *dev, Error **errp)
|
|||
{
|
||||
MACIOIDEState *s = MACIO_IDE(dev);
|
||||
|
||||
ide_bus_init_output_irq(&s->bus, s->ide_irq);
|
||||
ide_bus_init_output_irq(&s->bus,
|
||||
qdev_get_gpio_in(dev, MACIO_IDE_PMAC_IDE_IRQ));
|
||||
|
||||
/* Register DMA callbacks */
|
||||
s->dma.ops = &dbdma_ops;
|
||||
|
@ -456,8 +457,8 @@ static void macio_ide_initfn(Object *obj)
|
|||
sysbus_init_mmio(d, &s->mem);
|
||||
sysbus_init_irq(d, &s->real_ide_irq);
|
||||
sysbus_init_irq(d, &s->real_dma_irq);
|
||||
s->dma_irq = qemu_allocate_irq(pmac_ide_irq, s, 0);
|
||||
s->ide_irq = qemu_allocate_irq(pmac_ide_irq, s, 1);
|
||||
|
||||
qdev_init_gpio_in(DEVICE(obj), pmac_ide_irq, MACIO_IDE_PMAC_NIRQS);
|
||||
|
||||
object_property_add_link(obj, "dbdma", TYPE_MAC_DBDMA,
|
||||
(Object **) &s->dbdma,
|
||||
|
@ -508,7 +509,8 @@ void macio_ide_init_drives(MACIOIDEState *s, DriveInfo **hd_table)
|
|||
|
||||
void macio_ide_register_dma(MACIOIDEState *s)
|
||||
{
|
||||
DBDMA_register_channel(s->dbdma, s->channel, s->dma_irq,
|
||||
DBDMA_register_channel(s->dbdma, s->channel,
|
||||
qdev_get_gpio_in(DEVICE(s), MACIO_IDE_PMAC_DMA_IRQ),
|
||||
pmac_ide_transfer, pmac_ide_flush, s);
|
||||
}
|
||||
|
||||
|
|
|
@ -335,99 +335,108 @@ static void virt_machine_register_types(void)
|
|||
|
||||
type_init(virt_machine_register_types)
|
||||
|
||||
#define DEFINE_VIRT_MACHINE(major, minor, latest) \
|
||||
static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
|
||||
void *data) \
|
||||
#define DEFINE_VIRT_MACHINE_IMPL(latest, ...) \
|
||||
static void MACHINE_VER_SYM(class_init, virt, __VA_ARGS__)( \
|
||||
ObjectClass *oc, \
|
||||
void *data) \
|
||||
{ \
|
||||
MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
virt_machine_##major##_##minor##_options(mc); \
|
||||
mc->desc = "QEMU " # major "." # minor " M68K Virtual Machine"; \
|
||||
MACHINE_VER_SYM(options, virt, __VA_ARGS__)(mc); \
|
||||
mc->desc = "QEMU " MACHINE_VER_STR(__VA_ARGS__) " M68K Virtual Machine"; \
|
||||
MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
if (latest) { \
|
||||
mc->alias = "virt"; \
|
||||
} \
|
||||
} \
|
||||
static const TypeInfo machvirt_##major##_##minor##_info = { \
|
||||
.name = MACHINE_TYPE_NAME("virt-" # major "." # minor), \
|
||||
.parent = MACHINE_TYPE_NAME("virt"), \
|
||||
.class_init = virt_##major##_##minor##_class_init, \
|
||||
}; \
|
||||
static void machvirt_machine_##major##_##minor##_init(void) \
|
||||
static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) = \
|
||||
{ \
|
||||
type_register_static(&machvirt_##major##_##minor##_info); \
|
||||
.name = MACHINE_VER_TYPE_NAME("virt", __VA_ARGS__), \
|
||||
.parent = MACHINE_TYPE_NAME("virt"), \
|
||||
.class_init = MACHINE_VER_SYM(class_init, virt, __VA_ARGS__), \
|
||||
}; \
|
||||
static void MACHINE_VER_SYM(register, virt, __VA_ARGS__)(void) \
|
||||
{ \
|
||||
MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
type_register_static(&MACHINE_VER_SYM(info, virt, __VA_ARGS__)); \
|
||||
} \
|
||||
type_init(machvirt_machine_##major##_##minor##_init);
|
||||
type_init(MACHINE_VER_SYM(register, virt, __VA_ARGS__));
|
||||
|
||||
#define DEFINE_VIRT_MACHINE_AS_LATEST(major, minor) \
|
||||
DEFINE_VIRT_MACHINE_IMPL(true, major, minor)
|
||||
#define DEFINE_VIRT_MACHINE(major, minor) \
|
||||
DEFINE_VIRT_MACHINE_IMPL(false, major, minor)
|
||||
|
||||
static void virt_machine_9_1_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(9, 1, true)
|
||||
DEFINE_VIRT_MACHINE_AS_LATEST(9, 1)
|
||||
|
||||
static void virt_machine_9_0_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_9_1_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(9, 0, false)
|
||||
DEFINE_VIRT_MACHINE(9, 0)
|
||||
|
||||
static void virt_machine_8_2_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_9_0_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_8_2, hw_compat_8_2_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(8, 2, false)
|
||||
DEFINE_VIRT_MACHINE(8, 2)
|
||||
|
||||
static void virt_machine_8_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_8_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_8_1, hw_compat_8_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(8, 1, false)
|
||||
DEFINE_VIRT_MACHINE(8, 1)
|
||||
|
||||
static void virt_machine_8_0_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_8_1_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_8_0, hw_compat_8_0_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(8, 0, false)
|
||||
DEFINE_VIRT_MACHINE(8, 0)
|
||||
|
||||
static void virt_machine_7_2_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_8_0_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_2, hw_compat_7_2_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 2, false)
|
||||
DEFINE_VIRT_MACHINE(7, 2)
|
||||
|
||||
static void virt_machine_7_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_7_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 1, false)
|
||||
DEFINE_VIRT_MACHINE(7, 1)
|
||||
|
||||
static void virt_machine_7_0_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_7_1_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_0, hw_compat_7_0_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(7, 0, false)
|
||||
DEFINE_VIRT_MACHINE(7, 0)
|
||||
|
||||
static void virt_machine_6_2_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_7_0_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_6_2, hw_compat_6_2_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(6, 2, false)
|
||||
DEFINE_VIRT_MACHINE(6, 2)
|
||||
|
||||
static void virt_machine_6_1_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_6_2_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_6_1, hw_compat_6_1_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(6, 1, false)
|
||||
DEFINE_VIRT_MACHINE(6, 1)
|
||||
|
||||
static void virt_machine_6_0_options(MachineClass *mc)
|
||||
{
|
||||
virt_machine_6_1_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_6_0, hw_compat_6_0_len);
|
||||
}
|
||||
DEFINE_VIRT_MACHINE(6, 0, false)
|
||||
DEFINE_VIRT_MACHINE(6, 0)
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "qemu/log.h"
|
||||
#include "qemu/units.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/pci/msi.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "qom/object.h"
|
||||
|
|
|
@ -770,6 +770,12 @@ static target_ulong h_change_logical_lan_mac(PowerPCCPU *cpu,
|
|||
SpaprVioVlan *dev = VIO_SPAPR_VLAN_DEVICE(sdev);
|
||||
int i;
|
||||
|
||||
if (!dev) {
|
||||
hcall_dprintf("H_CHANGE_LOGICAL_LAN_MAC called when "
|
||||
"no NIC is present\n");
|
||||
return H_PARAMETER;
|
||||
}
|
||||
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
dev->nicconf.macaddr.a[ETH_ALEN - i - 1] = macaddr & 0xff;
|
||||
macaddr >>= 8;
|
||||
|
|
100
hw/ppc/spapr.c
100
hw/ppc/spapr.c
|
@ -4804,26 +4804,37 @@ static void spapr_machine_latest_class_options(MachineClass *mc)
|
|||
mc->is_default = true;
|
||||
}
|
||||
|
||||
#define DEFINE_SPAPR_MACHINE(suffix, verstr, latest) \
|
||||
static void spapr_machine_##suffix##_class_init(ObjectClass *oc, \
|
||||
void *data) \
|
||||
#define DEFINE_SPAPR_MACHINE_IMPL(latest, ...) \
|
||||
static void MACHINE_VER_SYM(class_init, spapr, __VA_ARGS__)( \
|
||||
ObjectClass *oc, \
|
||||
void *data) \
|
||||
{ \
|
||||
MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
spapr_machine_##suffix##_class_options(mc); \
|
||||
MACHINE_VER_SYM(class_options, spapr, __VA_ARGS__)(mc); \
|
||||
MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
if (latest) { \
|
||||
spapr_machine_latest_class_options(mc); \
|
||||
} \
|
||||
} \
|
||||
static const TypeInfo spapr_machine_##suffix##_info = { \
|
||||
.name = MACHINE_TYPE_NAME("pseries-" verstr), \
|
||||
.parent = TYPE_SPAPR_MACHINE, \
|
||||
.class_init = spapr_machine_##suffix##_class_init, \
|
||||
}; \
|
||||
static void spapr_machine_register_##suffix(void) \
|
||||
static const TypeInfo MACHINE_VER_SYM(info, spapr, __VA_ARGS__) = \
|
||||
{ \
|
||||
type_register(&spapr_machine_##suffix##_info); \
|
||||
.name = MACHINE_VER_TYPE_NAME("pseries", __VA_ARGS__), \
|
||||
.parent = TYPE_SPAPR_MACHINE, \
|
||||
.class_init = MACHINE_VER_SYM(class_init, spapr, __VA_ARGS__), \
|
||||
}; \
|
||||
static void MACHINE_VER_SYM(register, spapr, __VA_ARGS__)(void) \
|
||||
{ \
|
||||
MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
type_register(&MACHINE_VER_SYM(info, spapr, __VA_ARGS__)); \
|
||||
} \
|
||||
type_init(spapr_machine_register_##suffix)
|
||||
type_init(MACHINE_VER_SYM(register, spapr, __VA_ARGS__))
|
||||
|
||||
#define DEFINE_SPAPR_MACHINE_AS_LATEST(major, minor) \
|
||||
DEFINE_SPAPR_MACHINE_IMPL(true, major, minor)
|
||||
#define DEFINE_SPAPR_MACHINE(major, minor) \
|
||||
DEFINE_SPAPR_MACHINE_IMPL(false, major, minor)
|
||||
#define DEFINE_SPAPR_MACHINE_TAGGED(major, minor, tag) \
|
||||
DEFINE_SPAPR_MACHINE_IMPL(false, major, minor, _, tag)
|
||||
|
||||
/*
|
||||
* pseries-9.1
|
||||
|
@ -4833,7 +4844,7 @@ static void spapr_machine_9_1_class_options(MachineClass *mc)
|
|||
/* Defaults for the latest behaviour inherited from the base class */
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(9_1, "9.1", true);
|
||||
DEFINE_SPAPR_MACHINE_AS_LATEST(9, 1);
|
||||
|
||||
/*
|
||||
* pseries-9.0
|
||||
|
@ -4844,7 +4855,7 @@ static void spapr_machine_9_0_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(9_0, "9.0", false);
|
||||
DEFINE_SPAPR_MACHINE(9, 0);
|
||||
|
||||
/*
|
||||
* pseries-8.2
|
||||
|
@ -4855,7 +4866,7 @@ static void spapr_machine_8_2_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_8_2, hw_compat_8_2_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(8_2, "8.2", false);
|
||||
DEFINE_SPAPR_MACHINE(8, 2);
|
||||
|
||||
/*
|
||||
* pseries-8.1
|
||||
|
@ -4866,7 +4877,7 @@ static void spapr_machine_8_1_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_8_1, hw_compat_8_1_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(8_1, "8.1", false);
|
||||
DEFINE_SPAPR_MACHINE(8, 1);
|
||||
|
||||
/*
|
||||
* pseries-8.0
|
||||
|
@ -4877,7 +4888,7 @@ static void spapr_machine_8_0_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_8_0, hw_compat_8_0_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(8_0, "8.0", false);
|
||||
DEFINE_SPAPR_MACHINE(8, 0);
|
||||
|
||||
/*
|
||||
* pseries-7.2
|
||||
|
@ -4888,7 +4899,7 @@ static void spapr_machine_7_2_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_7_2, hw_compat_7_2_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(7_2, "7.2", false);
|
||||
DEFINE_SPAPR_MACHINE(7, 2);
|
||||
|
||||
/*
|
||||
* pseries-7.1
|
||||
|
@ -4899,7 +4910,7 @@ static void spapr_machine_7_1_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(7_1, "7.1", false);
|
||||
DEFINE_SPAPR_MACHINE(7, 1);
|
||||
|
||||
/*
|
||||
* pseries-7.0
|
||||
|
@ -4910,7 +4921,7 @@ static void spapr_machine_7_0_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_7_0, hw_compat_7_0_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(7_0, "7.0", false);
|
||||
DEFINE_SPAPR_MACHINE(7, 0);
|
||||
|
||||
/*
|
||||
* pseries-6.2
|
||||
|
@ -4921,7 +4932,7 @@ static void spapr_machine_6_2_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_6_2, hw_compat_6_2_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(6_2, "6.2", false);
|
||||
DEFINE_SPAPR_MACHINE(6, 2);
|
||||
|
||||
/*
|
||||
* pseries-6.1
|
||||
|
@ -4936,7 +4947,7 @@ static void spapr_machine_6_1_class_options(MachineClass *mc)
|
|||
mc->smp_props.prefer_sockets = true;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(6_1, "6.1", false);
|
||||
DEFINE_SPAPR_MACHINE(6, 1);
|
||||
|
||||
/*
|
||||
* pseries-6.0
|
||||
|
@ -4947,7 +4958,7 @@ static void spapr_machine_6_0_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_6_0, hw_compat_6_0_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(6_0, "6.0", false);
|
||||
DEFINE_SPAPR_MACHINE(6, 0);
|
||||
|
||||
/*
|
||||
* pseries-5.2
|
||||
|
@ -4958,7 +4969,7 @@ static void spapr_machine_5_2_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_5_2, hw_compat_5_2_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(5_2, "5.2", false);
|
||||
DEFINE_SPAPR_MACHINE(5, 2);
|
||||
|
||||
/*
|
||||
* pseries-5.1
|
||||
|
@ -4972,7 +4983,7 @@ static void spapr_machine_5_1_class_options(MachineClass *mc)
|
|||
smc->pre_5_2_numa_associativity = true;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(5_1, "5.1", false);
|
||||
DEFINE_SPAPR_MACHINE(5, 1);
|
||||
|
||||
/*
|
||||
* pseries-5.0
|
||||
|
@ -4991,7 +5002,7 @@ static void spapr_machine_5_0_class_options(MachineClass *mc)
|
|||
smc->pre_5_1_assoc_refpoints = true;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(5_0, "5.0", false);
|
||||
DEFINE_SPAPR_MACHINE(5, 0);
|
||||
|
||||
/*
|
||||
* pseries-4.2
|
||||
|
@ -5008,7 +5019,7 @@ static void spapr_machine_4_2_class_options(MachineClass *mc)
|
|||
mc->nvdimm_supported = false;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(4_2, "4.2", false);
|
||||
DEFINE_SPAPR_MACHINE(4, 2);
|
||||
|
||||
/*
|
||||
* pseries-4.1
|
||||
|
@ -5028,7 +5039,7 @@ static void spapr_machine_4_1_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(4_1, "4.1", false);
|
||||
DEFINE_SPAPR_MACHINE(4, 1);
|
||||
|
||||
/*
|
||||
* pseries-4.0
|
||||
|
@ -5055,7 +5066,7 @@ static void spapr_machine_4_0_class_options(MachineClass *mc)
|
|||
smc->pre_4_1_migration = true;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(4_0, "4.0", false);
|
||||
DEFINE_SPAPR_MACHINE(4, 0);
|
||||
|
||||
/*
|
||||
* pseries-3.1
|
||||
|
@ -5077,7 +5088,7 @@ static void spapr_machine_3_1_class_options(MachineClass *mc)
|
|||
smc->default_caps.caps[SPAPR_CAP_LARGE_DECREMENTER] = SPAPR_CAP_OFF;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
|
||||
DEFINE_SPAPR_MACHINE(3, 1);
|
||||
|
||||
/*
|
||||
* pseries-3.0
|
||||
|
@ -5095,7 +5106,7 @@ static void spapr_machine_3_0_class_options(MachineClass *mc)
|
|||
smc->irq = &spapr_irq_xics_legacy;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(3_0, "3.0", false);
|
||||
DEFINE_SPAPR_MACHINE(3, 0);
|
||||
|
||||
/*
|
||||
* pseries-2.12
|
||||
|
@ -5120,7 +5131,7 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
|
|||
smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 0;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_12, "2.12", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 12);
|
||||
|
||||
static void spapr_machine_2_12_sxxm_class_options(MachineClass *mc)
|
||||
{
|
||||
|
@ -5132,7 +5143,7 @@ static void spapr_machine_2_12_sxxm_class_options(MachineClass *mc)
|
|||
smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_FIXED_CCD;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_12_sxxm, "2.12-sxxm", false);
|
||||
DEFINE_SPAPR_MACHINE_TAGGED(2, 12, sxxm);
|
||||
|
||||
/*
|
||||
* pseries-2.11
|
||||
|
@ -5145,10 +5156,9 @@ static void spapr_machine_2_11_class_options(MachineClass *mc)
|
|||
spapr_machine_2_12_class_options(mc);
|
||||
smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
|
||||
compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
|
||||
mc->deprecation_reason = "old and not maintained - use a 2.12+ version";
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 11);
|
||||
|
||||
/*
|
||||
* pseries-2.10
|
||||
|
@ -5160,7 +5170,7 @@ static void spapr_machine_2_10_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 10);
|
||||
|
||||
/*
|
||||
* pseries-2.9
|
||||
|
@ -5180,7 +5190,7 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
|
|||
smc->resize_hpt_default = SPAPR_RESIZE_HPT_DISABLED;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_9, "2.9", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 9);
|
||||
|
||||
/*
|
||||
* pseries-2.8
|
||||
|
@ -5198,7 +5208,7 @@ static void spapr_machine_2_8_class_options(MachineClass *mc)
|
|||
mc->numa_mem_align_shift = 23;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_8, "2.8", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 8);
|
||||
|
||||
/*
|
||||
* pseries-2.7
|
||||
|
@ -5273,7 +5283,7 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
|
|||
smc->phb_placement = phb_placement_2_7;
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_7, "2.7", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 7);
|
||||
|
||||
/*
|
||||
* pseries-2.6
|
||||
|
@ -5291,7 +5301,7 @@ static void spapr_machine_2_6_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 6);
|
||||
|
||||
/*
|
||||
* pseries-2.5
|
||||
|
@ -5310,7 +5320,7 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 5);
|
||||
|
||||
/*
|
||||
* pseries-2.4
|
||||
|
@ -5325,7 +5335,7 @@ static void spapr_machine_2_4_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
}
|
||||
|
||||
DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 4);
|
||||
|
||||
/*
|
||||
* pseries-2.3
|
||||
|
@ -5340,7 +5350,7 @@ static void spapr_machine_2_3_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_3, hw_compat_2_3_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 3);
|
||||
|
||||
/*
|
||||
* pseries-2.2
|
||||
|
@ -5357,7 +5367,7 @@ static void spapr_machine_2_2_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
|
||||
}
|
||||
DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 2);
|
||||
|
||||
/*
|
||||
* pseries-2.1
|
||||
|
@ -5368,7 +5378,7 @@ static void spapr_machine_2_1_class_options(MachineClass *mc)
|
|||
spapr_machine_2_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_1, hw_compat_2_1_len);
|
||||
}
|
||||
DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
|
||||
DEFINE_SPAPR_MACHINE(2, 1);
|
||||
|
||||
static void spapr_machine_register_types(void)
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "qapi/error.h"
|
||||
#include "exec/ram_addr.h"
|
||||
#include "exec/confidential-guest-support.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/s390x/s390-virtio-hcall.h"
|
||||
#include "hw/s390x/sclp.h"
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
|
@ -817,35 +818,46 @@ static const TypeInfo ccw_machine_info = {
|
|||
},
|
||||
};
|
||||
|
||||
#define DEFINE_CCW_MACHINE(suffix, verstr, latest) \
|
||||
static void ccw_machine_##suffix##_class_init(ObjectClass *oc, \
|
||||
void *data) \
|
||||
#define DEFINE_CCW_MACHINE_IMPL(latest, ...) \
|
||||
static void MACHINE_VER_SYM(class_init, ccw, __VA_ARGS__)( \
|
||||
ObjectClass *oc, \
|
||||
void *data) \
|
||||
{ \
|
||||
MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
ccw_machine_##suffix##_class_options(mc); \
|
||||
mc->desc = "Virtual s390x machine (version " verstr ")"; \
|
||||
MACHINE_VER_SYM(class_options, ccw, __VA_ARGS__)(mc); \
|
||||
mc->desc = "Virtual s390x machine (version " MACHINE_VER_STR(__VA_ARGS__) ")"; \
|
||||
MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
if (latest) { \
|
||||
mc->alias = "s390-ccw-virtio"; \
|
||||
mc->is_default = true; \
|
||||
} \
|
||||
} \
|
||||
static void ccw_machine_##suffix##_instance_init(Object *obj) \
|
||||
static void MACHINE_VER_SYM(instance_init, ccw, __VA_ARGS__)(Object *obj) \
|
||||
{ \
|
||||
MachineState *machine = MACHINE(obj); \
|
||||
current_mc = S390_CCW_MACHINE_CLASS(MACHINE_GET_CLASS(machine)); \
|
||||
ccw_machine_##suffix##_instance_options(machine); \
|
||||
current_mc = S390_CCW_MACHINE_CLASS(MACHINE_GET_CLASS(machine)); \
|
||||
MACHINE_VER_SYM(instance_options, ccw, __VA_ARGS__)(machine); \
|
||||
} \
|
||||
static const TypeInfo ccw_machine_##suffix##_info = { \
|
||||
.name = MACHINE_TYPE_NAME("s390-ccw-virtio-" verstr), \
|
||||
.parent = TYPE_S390_CCW_MACHINE, \
|
||||
.class_init = ccw_machine_##suffix##_class_init, \
|
||||
.instance_init = ccw_machine_##suffix##_instance_init, \
|
||||
}; \
|
||||
static void ccw_machine_register_##suffix(void) \
|
||||
static const TypeInfo MACHINE_VER_SYM(info, ccw, __VA_ARGS__) = \
|
||||
{ \
|
||||
type_register_static(&ccw_machine_##suffix##_info); \
|
||||
.name = MACHINE_VER_TYPE_NAME("s390-ccw-virtio", __VA_ARGS__), \
|
||||
.parent = TYPE_S390_CCW_MACHINE, \
|
||||
.class_init = MACHINE_VER_SYM(class_init, ccw, __VA_ARGS__), \
|
||||
.instance_init = MACHINE_VER_SYM(instance_init, ccw, __VA_ARGS__), \
|
||||
}; \
|
||||
static void MACHINE_VER_SYM(register, ccw, __VA_ARGS__)(void) \
|
||||
{ \
|
||||
MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
type_register_static(&MACHINE_VER_SYM(info, ccw, __VA_ARGS__)); \
|
||||
} \
|
||||
type_init(ccw_machine_register_##suffix)
|
||||
type_init(MACHINE_VER_SYM(register, ccw, __VA_ARGS__))
|
||||
|
||||
#define DEFINE_CCW_MACHINE_AS_LATEST(major, minor) \
|
||||
DEFINE_CCW_MACHINE_IMPL(true, major, minor)
|
||||
|
||||
#define DEFINE_CCW_MACHINE(major, minor) \
|
||||
DEFINE_CCW_MACHINE_IMPL(false, major, minor)
|
||||
|
||||
|
||||
static void ccw_machine_9_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -854,7 +866,7 @@ static void ccw_machine_9_1_instance_options(MachineState *machine)
|
|||
static void ccw_machine_9_1_class_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_CCW_MACHINE(9_1, "9.1", true);
|
||||
DEFINE_CCW_MACHINE_AS_LATEST(9, 1);
|
||||
|
||||
static void ccw_machine_9_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -866,7 +878,7 @@ static void ccw_machine_9_0_class_options(MachineClass *mc)
|
|||
ccw_machine_9_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_9_0, hw_compat_9_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(9_0, "9.0", false);
|
||||
DEFINE_CCW_MACHINE(9, 0);
|
||||
|
||||
static void ccw_machine_8_2_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -878,7 +890,7 @@ static void ccw_machine_8_2_class_options(MachineClass *mc)
|
|||
ccw_machine_9_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_8_2, hw_compat_8_2_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(8_2, "8.2", false);
|
||||
DEFINE_CCW_MACHINE(8, 2);
|
||||
|
||||
static void ccw_machine_8_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -892,7 +904,7 @@ static void ccw_machine_8_1_class_options(MachineClass *mc)
|
|||
mc->smp_props.drawers_supported = false;
|
||||
mc->smp_props.books_supported = false;
|
||||
}
|
||||
DEFINE_CCW_MACHINE(8_1, "8.1", false);
|
||||
DEFINE_CCW_MACHINE(8, 1);
|
||||
|
||||
static void ccw_machine_8_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -904,7 +916,7 @@ static void ccw_machine_8_0_class_options(MachineClass *mc)
|
|||
ccw_machine_8_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_8_0, hw_compat_8_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(8_0, "8.0", false);
|
||||
DEFINE_CCW_MACHINE(8, 0);
|
||||
|
||||
static void ccw_machine_7_2_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -916,7 +928,7 @@ static void ccw_machine_7_2_class_options(MachineClass *mc)
|
|||
ccw_machine_8_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_2, hw_compat_7_2_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(7_2, "7.2", false);
|
||||
DEFINE_CCW_MACHINE(7, 2);
|
||||
|
||||
static void ccw_machine_7_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -940,7 +952,7 @@ static void ccw_machine_7_1_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
s390mc->max_threads = S390_MAX_CPUS;
|
||||
}
|
||||
DEFINE_CCW_MACHINE(7_1, "7.1", false);
|
||||
DEFINE_CCW_MACHINE(7, 1);
|
||||
|
||||
static void ccw_machine_7_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -955,7 +967,7 @@ static void ccw_machine_7_0_class_options(MachineClass *mc)
|
|||
ccw_machine_7_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_7_0, hw_compat_7_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(7_0, "7.0", false);
|
||||
DEFINE_CCW_MACHINE(7, 0);
|
||||
|
||||
static void ccw_machine_6_2_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -970,7 +982,7 @@ static void ccw_machine_6_2_class_options(MachineClass *mc)
|
|||
ccw_machine_7_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_6_2, hw_compat_6_2_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(6_2, "6.2", false);
|
||||
DEFINE_CCW_MACHINE(6, 2);
|
||||
|
||||
static void ccw_machine_6_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -988,7 +1000,7 @@ static void ccw_machine_6_1_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_6_1, hw_compat_6_1_len);
|
||||
mc->smp_props.prefer_sockets = true;
|
||||
}
|
||||
DEFINE_CCW_MACHINE(6_1, "6.1", false);
|
||||
DEFINE_CCW_MACHINE(6, 1);
|
||||
|
||||
static void ccw_machine_6_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1003,7 +1015,7 @@ static void ccw_machine_6_0_class_options(MachineClass *mc)
|
|||
ccw_machine_6_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_6_0, hw_compat_6_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(6_0, "6.0", false);
|
||||
DEFINE_CCW_MACHINE(6, 0);
|
||||
|
||||
static void ccw_machine_5_2_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1015,7 +1027,7 @@ static void ccw_machine_5_2_class_options(MachineClass *mc)
|
|||
ccw_machine_6_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_5_2, hw_compat_5_2_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(5_2, "5.2", false);
|
||||
DEFINE_CCW_MACHINE(5, 2);
|
||||
|
||||
static void ccw_machine_5_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1027,7 +1039,7 @@ static void ccw_machine_5_1_class_options(MachineClass *mc)
|
|||
ccw_machine_5_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_5_1, hw_compat_5_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(5_1, "5.1", false);
|
||||
DEFINE_CCW_MACHINE(5, 1);
|
||||
|
||||
static void ccw_machine_5_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1039,7 +1051,7 @@ static void ccw_machine_5_0_class_options(MachineClass *mc)
|
|||
ccw_machine_5_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_5_0, hw_compat_5_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(5_0, "5.0", false);
|
||||
DEFINE_CCW_MACHINE(5, 0);
|
||||
|
||||
static void ccw_machine_4_2_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1052,7 +1064,7 @@ static void ccw_machine_4_2_class_options(MachineClass *mc)
|
|||
mc->fixup_ram_size = s390_fixup_ram_size;
|
||||
compat_props_add(mc->compat_props, hw_compat_4_2, hw_compat_4_2_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(4_2, "4.2", false);
|
||||
DEFINE_CCW_MACHINE(4, 2);
|
||||
|
||||
static void ccw_machine_4_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1066,7 +1078,7 @@ static void ccw_machine_4_1_class_options(MachineClass *mc)
|
|||
ccw_machine_4_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_4_1, hw_compat_4_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(4_1, "4.1", false);
|
||||
DEFINE_CCW_MACHINE(4, 1);
|
||||
|
||||
static void ccw_machine_4_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1080,7 +1092,7 @@ static void ccw_machine_4_0_class_options(MachineClass *mc)
|
|||
ccw_machine_4_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_4_0, hw_compat_4_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(4_0, "4.0", false);
|
||||
DEFINE_CCW_MACHINE(4, 0);
|
||||
|
||||
static void ccw_machine_3_1_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1096,7 +1108,7 @@ static void ccw_machine_3_1_class_options(MachineClass *mc)
|
|||
ccw_machine_4_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(3_1, "3.1", false);
|
||||
DEFINE_CCW_MACHINE(3, 1);
|
||||
|
||||
static void ccw_machine_3_0_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1111,7 +1123,7 @@ static void ccw_machine_3_0_class_options(MachineClass *mc)
|
|||
ccw_machine_3_1_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(3_0, "3.0", false);
|
||||
DEFINE_CCW_MACHINE(3, 0);
|
||||
|
||||
static void ccw_machine_2_12_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1125,7 +1137,7 @@ static void ccw_machine_2_12_class_options(MachineClass *mc)
|
|||
ccw_machine_3_0_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_12, "2.12", false);
|
||||
DEFINE_CCW_MACHINE(2, 12);
|
||||
|
||||
#ifdef CONFIG_S390X_LEGACY_CPUS
|
||||
|
||||
|
@ -1148,7 +1160,7 @@ static void ccw_machine_2_11_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_11, "2.11", false);
|
||||
DEFINE_CCW_MACHINE(2, 11);
|
||||
|
||||
static void ccw_machine_2_10_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1160,7 +1172,7 @@ static void ccw_machine_2_10_class_options(MachineClass *mc)
|
|||
ccw_machine_2_11_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_10, "2.10", false);
|
||||
DEFINE_CCW_MACHINE(2, 10);
|
||||
|
||||
static void ccw_machine_2_9_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1184,7 +1196,7 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
css_migration_enabled = false;
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_9, "2.9", false);
|
||||
DEFINE_CCW_MACHINE(2, 9);
|
||||
|
||||
static void ccw_machine_2_8_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1201,7 +1213,7 @@ static void ccw_machine_2_8_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_8, "2.8", false);
|
||||
DEFINE_CCW_MACHINE(2, 8);
|
||||
|
||||
static void ccw_machine_2_7_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1216,7 +1228,7 @@ static void ccw_machine_2_7_class_options(MachineClass *mc)
|
|||
ccw_machine_2_8_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_7, "2.7", false);
|
||||
DEFINE_CCW_MACHINE(2, 7);
|
||||
|
||||
static void ccw_machine_2_6_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1236,7 +1248,7 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_6, "2.6", false);
|
||||
DEFINE_CCW_MACHINE(2, 6);
|
||||
|
||||
static void ccw_machine_2_5_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1248,7 +1260,7 @@ static void ccw_machine_2_5_class_options(MachineClass *mc)
|
|||
ccw_machine_2_6_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_2_5, hw_compat_2_5_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_5, "2.5", false);
|
||||
DEFINE_CCW_MACHINE(2, 5);
|
||||
|
||||
static void ccw_machine_2_4_instance_options(MachineState *machine)
|
||||
{
|
||||
|
@ -1273,7 +1285,7 @@ static void ccw_machine_2_4_class_options(MachineClass *mc)
|
|||
compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
|
||||
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_4, "2.4", false);
|
||||
DEFINE_CCW_MACHINE(2, 4);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "exec/address-spaces.h"
|
||||
#include "exec/memory.h"
|
||||
#include "exec/ram_addr.h"
|
||||
#include "hw/hw.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/range.h"
|
||||
#include "sysemu/reset.h"
|
||||
|
|
|
@ -413,6 +413,304 @@ struct MachineState {
|
|||
struct NumaState *numa_state;
|
||||
};
|
||||
|
||||
/*
|
||||
* The macros which follow are intended to facilitate the
|
||||
* definition of versioned machine types, using a somewhat
|
||||
* similar pattern across targets.
|
||||
*
|
||||
* For example, a macro that can be used to define versioned
|
||||
* 'virt' machine types would look like:
|
||||
*
|
||||
* #define DEFINE_VIRT_MACHINE_IMPL(latest, ...) \
|
||||
* static void MACHINE_VER_SYM(class_init, virt, __VA_ARGS__)( \
|
||||
* ObjectClass *oc, \
|
||||
* void *data) \
|
||||
* { \
|
||||
* MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
* MACHINE_VER_SYM(options, virt, __VA_ARGS__)(mc); \
|
||||
* mc->desc = "QEMU " MACHINE_VER_STR(__VA_ARGS__) " Virtual Machine"; \
|
||||
* MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
* if (latest) { \
|
||||
* mc->alias = "virt"; \
|
||||
* } \
|
||||
* } \
|
||||
* static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) = { \
|
||||
* .name = MACHINE_VER_TYPE_NAME("virt", __VA_ARGS__), \
|
||||
* .parent = TYPE_VIRT_MACHINE, \
|
||||
* .class_init = MACHINE_VER_SYM(class_init, virt, __VA_ARGS__), \
|
||||
* }; \
|
||||
* static void MACHINE_VER_SYM(register, virt, __VA_ARGS__)(void) \
|
||||
* { \
|
||||
* MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
* type_register_static(&MACHINE_VER_SYM(info, virt, __VA_ARGS__)); \
|
||||
* } \
|
||||
* type_init(MACHINE_VER_SYM(register, virt, __VA_ARGS__));
|
||||
*
|
||||
* Following this, one (or more) helpers can be added for
|
||||
* whichever scenarios need to be catered for with a machine:
|
||||
*
|
||||
* // Normal 2 digit, marked as latest e.g. 'virt-9.0'
|
||||
* #define DEFINE_VIRT_MACHINE_LATEST(major, minor) \
|
||||
* DEFINE_VIRT_MACHINE_IMPL(true, major, minor)
|
||||
*
|
||||
* // Normal 2 digit e.g. 'virt-9.0'
|
||||
* #define DEFINE_VIRT_MACHINE(major, minor) \
|
||||
* DEFINE_VIRT_MACHINE_IMPL(false, major, minor)
|
||||
*
|
||||
* // Bugfix 3 digit e.g. 'virt-9.0.1'
|
||||
* #define DEFINE_VIRT_MACHINE_BUGFIX(major, minor, micro) \
|
||||
* DEFINE_VIRT_MACHINE_IMPL(false, major, minor, micro)
|
||||
*
|
||||
* // Tagged 2 digit e.g. 'virt-9.0-extra'
|
||||
* #define DEFINE_VIRT_MACHINE_TAGGED(major, minor, tag) \
|
||||
* DEFINE_VIRT_MACHINE_IMPL(false, major, minor, _, tag)
|
||||
*
|
||||
* // Tagged bugfix 2 digit e.g. 'virt-9.0.1-extra'
|
||||
* #define DEFINE_VIRT_MACHINE_TAGGED(major, minor, micro, tag) \
|
||||
* DEFINE_VIRT_MACHINE_IMPL(false, major, minor, micro, _, tag)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Helper for dispatching different macros based on how
|
||||
* many __VA_ARGS__ are passed. Supports 1 to 5 variadic
|
||||
* arguments, with the called target able to be prefixed
|
||||
* with 0 or more fixed arguments too. To be called thus:
|
||||
*
|
||||
* _MACHINE_VER_PICK(__VA_ARGS,
|
||||
* MACRO_MATCHING_5_ARGS,
|
||||
* MACRO_MATCHING_4_ARGS,
|
||||
* MACRO_MATCHING_3_ARGS,
|
||||
* MACRO_MATCHING_2_ARGS,
|
||||
* MACRO_MATCHING_1_ARG) (FIXED-ARG-1,
|
||||
* ...,
|
||||
* FIXED-ARG-N,
|
||||
* __VA_ARGS__)
|
||||
*/
|
||||
#define _MACHINE_VER_PICK(x1, x2, x3, x4, x5, x6, ...) x6
|
||||
|
||||
/*
|
||||
* Construct a human targeted machine version string.
|
||||
*
|
||||
* Can be invoked with various signatures
|
||||
*
|
||||
* MACHINE_VER_STR(sym, prefix, major, minor)
|
||||
* MACHINE_VER_STR(sym, prefix, major, minor, micro)
|
||||
* MACHINE_VER_STR(sym, prefix, major, minor, _, tag)
|
||||
* MACHINE_VER_STR(sym, prefix, major, minor, micro, _, tag)
|
||||
*
|
||||
* Respectively emitting symbols with the format
|
||||
*
|
||||
* "{major}.{minor}"
|
||||
* "{major}.{minor}-{tag}"
|
||||
* "{major}.{minor}.{micro}"
|
||||
* "{major}.{minor}.{micro}-{tag}"
|
||||
*/
|
||||
#define _MACHINE_VER_STR2(major, minor) \
|
||||
#major "." #minor
|
||||
|
||||
#define _MACHINE_VER_STR3(major, minor, micro) \
|
||||
#major "." #minor "." #micro
|
||||
|
||||
#define _MACHINE_VER_STR4(major, minor, _unused_, tag) \
|
||||
#major "." #minor "-" #tag
|
||||
|
||||
#define _MACHINE_VER_STR5(major, minor, micro, _unused_, tag) \
|
||||
#major "." #minor "." #micro "-" #tag
|
||||
|
||||
#define MACHINE_VER_STR(...) \
|
||||
_MACHINE_VER_PICK(__VA_ARGS__, \
|
||||
_MACHINE_VER_STR5, \
|
||||
_MACHINE_VER_STR4, \
|
||||
_MACHINE_VER_STR3, \
|
||||
_MACHINE_VER_STR2) (__VA_ARGS__)
|
||||
|
||||
|
||||
/*
|
||||
* Construct a QAPI type name for a versioned machine
|
||||
* type
|
||||
*
|
||||
* Can be invoked with various signatures
|
||||
*
|
||||
* MACHINE_VER_TYPE_NAME(prefix, major, minor)
|
||||
* MACHINE_VER_TYPE_NAME(prefix, major, minor, micro)
|
||||
* MACHINE_VER_TYPE_NAME(prefix, major, minor, _, tag)
|
||||
* MACHINE_VER_TYPE_NAME(prefix, major, minor, micro, _, tag)
|
||||
*
|
||||
* Respectively emitting symbols with the format
|
||||
*
|
||||
* "{prefix}-{major}.{minor}"
|
||||
* "{prefix}-{major}.{minor}.{micro}"
|
||||
* "{prefix}-{major}.{minor}-{tag}"
|
||||
* "{prefix}-{major}.{minor}.{micro}-{tag}"
|
||||
*/
|
||||
#define _MACHINE_VER_TYPE_NAME2(prefix, major, minor) \
|
||||
prefix "-" #major "." #minor TYPE_MACHINE_SUFFIX
|
||||
|
||||
#define _MACHINE_VER_TYPE_NAME3(prefix, major, minor, micro) \
|
||||
prefix "-" #major "." #minor "." #micro TYPE_MACHINE_SUFFIX
|
||||
|
||||
#define _MACHINE_VER_TYPE_NAME4(prefix, major, minor, _unused_, tag) \
|
||||
prefix "-" #major "." #minor "-" #tag TYPE_MACHINE_SUFFIX
|
||||
|
||||
#define _MACHINE_VER_TYPE_NAME5(prefix, major, minor, micro, _unused_, tag) \
|
||||
prefix "-" #major "." #minor "." #micro "-" #tag TYPE_MACHINE_SUFFIX
|
||||
|
||||
#define MACHINE_VER_TYPE_NAME(prefix, ...) \
|
||||
_MACHINE_VER_PICK(__VA_ARGS__, \
|
||||
_MACHINE_VER_TYPE_NAME5, \
|
||||
_MACHINE_VER_TYPE_NAME4, \
|
||||
_MACHINE_VER_TYPE_NAME3, \
|
||||
_MACHINE_VER_TYPE_NAME2) (prefix, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Construct a name for a versioned machine type that is
|
||||
* suitable for use as a C symbol (function/variable/etc).
|
||||
*
|
||||
* Can be invoked with various signatures
|
||||
*
|
||||
* MACHINE_VER_SYM(sym, prefix, major, minor)
|
||||
* MACHINE_VER_SYM(sym, prefix, major, minor, micro)
|
||||
* MACHINE_VER_SYM(sym, prefix, major, minor, _, tag)
|
||||
* MACHINE_VER_SYM(sym, prefix, major, minor, micro, _, tag)
|
||||
*
|
||||
* Respectively emitting symbols with the format
|
||||
*
|
||||
* {prefix}_machine_{major}_{minor}_{sym}
|
||||
* {prefix}_machine_{major}_{minor}_{micro}_{sym}
|
||||
* {prefix}_machine_{major}_{minor}_{tag}_{sym}
|
||||
* {prefix}_machine_{major}_{minor}_{micro}_{tag}_{sym}
|
||||
*/
|
||||
#define _MACHINE_VER_SYM2(sym, prefix, major, minor) \
|
||||
prefix ## _machine_ ## major ## _ ## minor ## _ ## sym
|
||||
|
||||
#define _MACHINE_VER_SYM3(sym, prefix, major, minor, micro) \
|
||||
prefix ## _machine_ ## major ## _ ## minor ## _ ## micro ## _ ## sym
|
||||
|
||||
#define _MACHINE_VER_SYM4(sym, prefix, major, minor, _unused_, tag) \
|
||||
prefix ## _machine_ ## major ## _ ## minor ## _ ## tag ## _ ## sym
|
||||
|
||||
#define _MACHINE_VER_SYM5(sym, prefix, major, minor, micro, _unused_, tag) \
|
||||
prefix ## _machine_ ## major ## _ ## minor ## _ ## micro ## _ ## tag ## _ ## sym
|
||||
|
||||
#define MACHINE_VER_SYM(sym, prefix, ...) \
|
||||
_MACHINE_VER_PICK(__VA_ARGS__, \
|
||||
_MACHINE_VER_SYM5, \
|
||||
_MACHINE_VER_SYM4, \
|
||||
_MACHINE_VER_SYM3, \
|
||||
_MACHINE_VER_SYM2) (sym, prefix, __VA_ARGS__)
|
||||
|
||||
|
||||
/*
|
||||
* How many years/major releases for each phase
|
||||
* of the life cycle. Assumes use of versioning
|
||||
* scheme where major is bumped each year
|
||||
*/
|
||||
#define MACHINE_VER_DELETION_MAJOR 6
|
||||
#define MACHINE_VER_DEPRECATION_MAJOR 3
|
||||
|
||||
/*
|
||||
* Expands to a static string containing a deprecation
|
||||
* message for a versioned machine type
|
||||
*/
|
||||
#define MACHINE_VER_DEPRECATION_MSG \
|
||||
"machines more than " stringify(MACHINE_VER_DEPRECATION_MAJOR) \
|
||||
" years old are subject to deletion after " \
|
||||
stringify(MACHINE_VER_DELETION_MAJOR) " years"
|
||||
|
||||
#define _MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor) \
|
||||
(((QEMU_VERSION_MAJOR - major) > cutoff) || \
|
||||
(((QEMU_VERSION_MAJOR - major) == cutoff) && \
|
||||
(QEMU_VERSION_MINOR - minor) >= 0))
|
||||
|
||||
#define _MACHINE_VER_IS_EXPIRED2(cutoff, major, minor) \
|
||||
_MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
|
||||
#define _MACHINE_VER_IS_EXPIRED3(cutoff, major, minor, micro) \
|
||||
_MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
|
||||
#define _MACHINE_VER_IS_EXPIRED4(cutoff, major, minor, _unused, tag) \
|
||||
_MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
|
||||
#define _MACHINE_VER_IS_EXPIRED5(cutoff, major, minor, micro, _unused, tag) \
|
||||
_MACHINE_VER_IS_EXPIRED_IMPL(cutoff, major, minor)
|
||||
|
||||
#define _MACHINE_IS_EXPIRED(cutoff, ...) \
|
||||
_MACHINE_VER_PICK(__VA_ARGS__, \
|
||||
_MACHINE_VER_IS_EXPIRED5, \
|
||||
_MACHINE_VER_IS_EXPIRED4, \
|
||||
_MACHINE_VER_IS_EXPIRED3, \
|
||||
_MACHINE_VER_IS_EXPIRED2) (cutoff, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Evaluates true when a machine type with (major, minor)
|
||||
* or (major, minor, micro) version should be considered
|
||||
* deprecated based on the current versioned machine type
|
||||
* lifecycle rules
|
||||
*/
|
||||
#define MACHINE_VER_IS_DEPRECATED(...) \
|
||||
_MACHINE_IS_EXPIRED(MACHINE_VER_DEPRECATION_MAJOR, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Evaluates true when a machine type with (major, minor)
|
||||
* or (major, minor, micro) version should be considered
|
||||
* for deletion based on the current versioned machine type
|
||||
* lifecycle rules
|
||||
*/
|
||||
#define MACHINE_VER_SHOULD_DELETE(...) \
|
||||
_MACHINE_IS_EXPIRED(MACHINE_VER_DELETION_MAJOR, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Sets the deprecation reason for a versioned machine based
|
||||
* on its age
|
||||
*
|
||||
* This must be unconditionally used in the _class_init
|
||||
* function for all machine types which support versioning.
|
||||
*
|
||||
* Initially it will effectively be a no-op, but after a
|
||||
* suitable period of time has passed, it will set the
|
||||
* 'deprecation_reason' field on the machine, to warn users
|
||||
* about forthcoming removal.
|
||||
*/
|
||||
#define MACHINE_VER_DEPRECATION(...) \
|
||||
do { \
|
||||
if (MACHINE_VER_IS_DEPRECATED(__VA_ARGS__)) { \
|
||||
mc->deprecation_reason = MACHINE_VER_DEPRECATION_MSG; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Prevents registration of a versioned machined based on
|
||||
* its age
|
||||
*
|
||||
* This must be unconditionally used in the register
|
||||
* method for all machine types which support versioning.
|
||||
*
|
||||
* Inijtially it will effectively be a no-op, but after a
|
||||
* suitable period of time has passed, it will cause
|
||||
* execution of the method to return, avoiding registration
|
||||
* of the machine
|
||||
*
|
||||
* The new deprecation and deletion policy for versioned
|
||||
* machine types was introduced in QEMU 9.1.0.
|
||||
*
|
||||
* Under the new policy a number of old machine types (any
|
||||
* prior to 2.12) would be liable for immediate deletion
|
||||
* which would be a violation of our historical deprecation
|
||||
* and removal policy
|
||||
*
|
||||
* Thus deletions are temporarily gated on existance of
|
||||
* the env variable "QEMU_DELETE_MACHINES" / QEMU version
|
||||
* number >= 10.1.0. This gate can be deleted in the 10.1.0
|
||||
* dev cycle
|
||||
*/
|
||||
#define MACHINE_VER_DELETION(...) \
|
||||
do { \
|
||||
if (MACHINE_VER_SHOULD_DELETE(__VA_ARGS__)) { \
|
||||
if (getenv("QEMU_DELETE_MACHINES") || \
|
||||
QEMU_VERSION_MAJOR > 10 || (QEMU_VERSION_MAJOR == 10 && \
|
||||
QEMU_VERSION_MINOR >= 1)) { \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define DEFINE_MACHINE(namestr, machine_initfn) \
|
||||
static void machine_initfn##_class_init(ObjectClass *oc, void *data) \
|
||||
{ \
|
||||
|
|
|
@ -317,4 +317,32 @@ extern const size_t pc_compat_2_3_len;
|
|||
} \
|
||||
type_init(pc_machine_init_##suffix)
|
||||
|
||||
#define DEFINE_PC_VER_MACHINE(namesym, namestr, initfn, ...) \
|
||||
static void MACHINE_VER_SYM(init, namesym, __VA_ARGS__)( \
|
||||
MachineState *machine) \
|
||||
{ \
|
||||
initfn(machine); \
|
||||
} \
|
||||
static void MACHINE_VER_SYM(class_init, namesym, __VA_ARGS__)( \
|
||||
ObjectClass *oc, \
|
||||
void *data) \
|
||||
{ \
|
||||
MachineClass *mc = MACHINE_CLASS(oc); \
|
||||
MACHINE_VER_SYM(options, namesym, __VA_ARGS__)(mc); \
|
||||
mc->init = MACHINE_VER_SYM(init, namesym, __VA_ARGS__); \
|
||||
MACHINE_VER_DEPRECATION(__VA_ARGS__); \
|
||||
} \
|
||||
static const TypeInfo MACHINE_VER_SYM(info, namesym, __VA_ARGS__) = \
|
||||
{ \
|
||||
.name = MACHINE_VER_TYPE_NAME(namestr, __VA_ARGS__), \
|
||||
.parent = TYPE_PC_MACHINE, \
|
||||
.class_init = MACHINE_VER_SYM(class_init, namesym, __VA_ARGS__), \
|
||||
}; \
|
||||
static void MACHINE_VER_SYM(register, namesym, __VA_ARGS__)(void) \
|
||||
{ \
|
||||
MACHINE_VER_DELETION(__VA_ARGS__); \
|
||||
type_register(&MACHINE_VER_SYM(info, namesym, __VA_ARGS__)); \
|
||||
} \
|
||||
type_init(MACHINE_VER_SYM(register, namesym, __VA_ARGS__));
|
||||
|
||||
#endif
|
||||
|
|
|
@ -80,8 +80,6 @@ struct MACIOIDEState {
|
|||
uint32_t channel;
|
||||
qemu_irq real_ide_irq;
|
||||
qemu_irq real_dma_irq;
|
||||
qemu_irq ide_irq;
|
||||
qemu_irq dma_irq;
|
||||
|
||||
MemoryRegion mem;
|
||||
IDEBus bus;
|
||||
|
@ -92,6 +90,11 @@ struct MACIOIDEState {
|
|||
uint32_t irq_reg;
|
||||
};
|
||||
|
||||
#define MACIO_IDE_PMAC_NIRQS 2
|
||||
|
||||
#define MACIO_IDE_PMAC_DMA_IRQ 0
|
||||
#define MACIO_IDE_PMAC_IDE_IRQ 1
|
||||
|
||||
void macio_ide_init_drives(MACIOIDEState *ide, DriveInfo **hd_table);
|
||||
void macio_ide_register_dma(MACIOIDEState *ide);
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#define XLNX_CFI_IF_H 1
|
||||
|
||||
#include "qemu/help-texts.h"
|
||||
#include "hw/hw.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_XLNX_CFI_IF "xlnx-cfi-if"
|
||||
|
|
|
@ -88,15 +88,6 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
|||
return false;
|
||||
}
|
||||
|
||||
#if !defined(MAC_OS_VERSION_11_0) || \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_11_0
|
||||
if (options->has_isolated) {
|
||||
error_setg(errp,
|
||||
"vmnet-bridged.isolated feature is "
|
||||
"unavailable: outdated vmnet.framework API");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -115,12 +106,10 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
|||
vmnet_shared_interface_name_key,
|
||||
options->ifname);
|
||||
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
xpc_dictionary_set_bool(if_desc,
|
||||
vmnet_enable_isolation_key,
|
||||
options->isolated);
|
||||
#endif
|
||||
|
||||
return if_desc;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,11 +47,8 @@ const char *vmnet_status_map_str(vmnet_return_t status)
|
|||
return "buffers exhausted in kernel";
|
||||
case VMNET_TOO_MANY_PACKETS:
|
||||
return "packet count exceeds limit";
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
case VMNET_SHARING_SERVICE_BUSY:
|
||||
return "conflict, sharing service is in use";
|
||||
#endif
|
||||
default:
|
||||
return "unknown vmnet error";
|
||||
}
|
||||
|
|
|
@ -21,31 +21,13 @@
|
|||
static bool validate_options(const Netdev *netdev, Error **errp)
|
||||
{
|
||||
const NetdevVmnetHostOptions *options = &(netdev->u.vmnet_host);
|
||||
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
|
||||
QemuUUID net_uuid;
|
||||
|
||||
if (options->net_uuid &&
|
||||
qemu_uuid_parse(options->net_uuid, &net_uuid) < 0) {
|
||||
error_setg(errp, "Invalid UUID provided in 'net-uuid'");
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
if (options->has_isolated) {
|
||||
error_setg(errp,
|
||||
"vmnet-host.isolated feature is "
|
||||
"unavailable: outdated vmnet.framework API");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (options->net_uuid) {
|
||||
error_setg(errp,
|
||||
"vmnet-host.net-uuid feature is "
|
||||
"unavailable: outdated vmnet.framework API");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((options->start_address ||
|
||||
options->end_address ||
|
||||
|
@ -71,9 +53,6 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
|||
vmnet_operation_mode_key,
|
||||
VMNET_HOST_MODE);
|
||||
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
|
||||
xpc_dictionary_set_bool(if_desc,
|
||||
vmnet_enable_isolation_key,
|
||||
options->isolated);
|
||||
|
@ -85,7 +64,6 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
|||
vmnet_network_identifier_key,
|
||||
net_uuid.data);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (options->start_address) {
|
||||
xpc_dictionary_set_string(if_desc,
|
||||
|
|
|
@ -21,16 +21,6 @@ static bool validate_options(const Netdev *netdev, Error **errp)
|
|||
{
|
||||
const NetdevVmnetSharedOptions *options = &(netdev->u.vmnet_shared);
|
||||
|
||||
#if !defined(MAC_OS_VERSION_11_0) || \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_11_0
|
||||
if (options->has_isolated) {
|
||||
error_setg(errp,
|
||||
"vmnet-shared.isolated feature is "
|
||||
"unavailable: outdated vmnet.framework API");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((options->start_address ||
|
||||
options->end_address ||
|
||||
options->subnet_mask) &&
|
||||
|
@ -76,14 +66,11 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
|
|||
options->subnet_mask);
|
||||
}
|
||||
|
||||
#if defined(MAC_OS_VERSION_11_0) && \
|
||||
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
xpc_dictionary_set_bool(
|
||||
if_desc,
|
||||
vmnet_enable_isolation_key,
|
||||
options->isolated
|
||||
);
|
||||
#endif
|
||||
|
||||
return if_desc;
|
||||
}
|
||||
|
|
|
@ -1521,7 +1521,7 @@ static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
|
|||
if (ret) {
|
||||
perror("qemu_madvise");
|
||||
fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
|
||||
"but dump_guest_core=off specified\n");
|
||||
"but dump-guest-core=off specified\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -427,27 +427,6 @@ static void hvf_cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
|||
}
|
||||
}
|
||||
|
||||
static hv_return_t hvf_vcpu_run(hv_vcpuid_t vcpu_id)
|
||||
{
|
||||
/*
|
||||
* hv_vcpu_run_until is available and recommended from macOS 10.15+,
|
||||
* HV_DEADLINE_FOREVER from 11.0. Test for availability at runtime and fall
|
||||
* back to hv_vcpu_run() only where necessary.
|
||||
*/
|
||||
#ifndef MAC_OS_VERSION_11_0
|
||||
return hv_vcpu_run(vcpu_id);
|
||||
#elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
|
||||
return hv_vcpu_run_until(vcpu_id, HV_DEADLINE_FOREVER);
|
||||
#else /* MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_11_0 */
|
||||
/* 11.0 SDK or newer, but could be < 11 at runtime */
|
||||
if (__builtin_available(macOS 11.0, *)) {
|
||||
return hv_vcpu_run_until(vcpu_id, HV_DEADLINE_FOREVER);
|
||||
} else {
|
||||
return hv_vcpu_run(vcpu_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int hvf_vcpu_exec(CPUState *cpu)
|
||||
{
|
||||
X86CPU *x86_cpu = X86_CPU(cpu);
|
||||
|
@ -476,7 +455,7 @@ int hvf_vcpu_exec(CPUState *cpu)
|
|||
return EXCP_HLT;
|
||||
}
|
||||
|
||||
hv_return_t r = hvf_vcpu_run(cpu->accel->fd);
|
||||
hv_return_t r = hv_vcpu_run_until(cpu->accel->fd, HV_DEADLINE_FOREVER);
|
||||
assert_hvf_ok(r);
|
||||
|
||||
/* handle VMEXIT */
|
||||
|
|
Loading…
Reference in New Issue