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:
Richard Henderson 2024-07-02 07:11:47 -07:00
commit ff6d8490e3
24 changed files with 710 additions and 474 deletions

View File

@ -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]";
}
}

View File

@ -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,

View File

@ -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;

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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)

View File

@ -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"

View File

@ -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;

View File

@ -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)
{

View File

@ -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

View File

@ -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"

View File

@ -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) \
{ \

View File

@ -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

View File

@ -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);

View File

@ -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"

View File

@ -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;
}

View File

@ -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";
}

View File

@ -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,

View File

@ -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;
}

View File

@ -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");
}
}
}

View File

@ -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 */