From 1b6e1cc1f3d8033620bc0c04670d252180bd2c36 Mon Sep 17 00:00:00 2001 From: Peter Xu Date: Wed, 10 Feb 2021 17:10:34 -0300 Subject: [PATCH 11/54] redhat: Add some devices for exporting upstream machine types RH-Author: Peter Xu Message-id: <20210210171034.129116-2-peterx@redhat.com> Patchwork-id: 101043 O-Subject: [RHEL-AV-8.4.0 qemu-kvm PATCH 1/1] redhat: Add some devices for exporting upstream machine types Bugzilla: 1917826 RH-Acked-by: Sergio Lopez Pascual RH-Acked-by: Paolo Bonzini RH-Acked-by: Dr. David Alan Gilbert Both "isa-parallel" and "hpet" will be required for the to-be-exported upstream x86 machine types, so add them back into config. Since HPET was disabled for rhel machine types previously, we need to explicitly do that for RHEL now after we add HPET back. Meanwhile, add blockers for the two devices so that they can never be created on RHEL machine types. That should keep the old behavior for RHEL-AV. Signed-off-by: Peter Xu Signed-off-by: Eduardo Lima (Etrunko) --- default-configs/devices/x86_64-softmmu.mak | 6 ++++++ default-configs/devices/x86_64-upstream-devices.mak | 4 ++++ hw/char/parallel.c | 9 +++++++++ hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- hw/timer/hpet.c | 8 ++++++++ 6 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 default-configs/devices/x86_64-upstream-devices.mak diff --git a/default-configs/devices/x86_64-softmmu.mak b/default-configs/devices/x86_64-softmmu.mak index b5de7e5279..e57bcff7d9 100644 --- a/default-configs/devices/x86_64-softmmu.mak +++ b/default-configs/devices/x86_64-softmmu.mak @@ -3,3 +3,9 @@ #include i386-softmmu.mak include x86_64-rh-devices.mak + +# +# RHEL: this is for the limited upstream machine type support, so to export +# some more devices than what RHEL machines have. +# +include x86_64-upstream-devices.mak diff --git a/default-configs/devices/x86_64-upstream-devices.mak b/default-configs/devices/x86_64-upstream-devices.mak new file mode 100644 index 0000000000..2cd20f54d2 --- /dev/null +++ b/default-configs/devices/x86_64-upstream-devices.mak @@ -0,0 +1,4 @@ +# We need "isa-parallel" +CONFIG_PARALLEL=y +# We need "hpet" +CONFIG_HPET=y diff --git a/hw/char/parallel.c b/hw/char/parallel.c index 8b418abf71..6b3696a237 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -29,6 +29,7 @@ #include "chardev/char-parallel.h" #include "chardev/char-fe.h" #include "hw/acpi/aml-build.h" +#include "hw/boards.h" #include "hw/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" @@ -533,6 +534,14 @@ static void parallel_isa_realizefn(DeviceState *dev, Error **errp) int base; uint8_t dummy; + /* Restricted for Red Hat Enterprise Linux */ + MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine()); + if (strstr(mc->name, "rhel")) { + error_setg(errp, "Device %s is not supported with machine type %s", + object_get_typename(OBJECT(dev)), mc->name); + return; + } + if (!qemu_chr_fe_backend_connected(&s->chr)) { error_setg(errp, "Can't create parallel device, empty char device"); return; diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 1b1cc18ae0..6e1f1ba082 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -1018,7 +1018,7 @@ static void pc_machine_rhel7_options(MachineClass *m) { PCMachineClass *pcmc = PC_MACHINE_CLASS(m); m->family = "pc_piix_Y"; - m->default_machine_opts = "firmware=bios-256k.bin"; + m->default_machine_opts = "firmware=bios-256k.bin,hpet=off"; pcmc->default_nic_model = "e1000"; m->default_display = "std"; m->no_parallel = 1; diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 72854192a9..a8c0496c9f 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -580,7 +580,7 @@ static void pc_q35_machine_rhel_options(MachineClass *m) pcmc->default_nic_model = "e1000e"; m->family = "pc_q35_Z"; m->units_per_default_bus = 1; - m->default_machine_opts = "firmware=bios-256k.bin"; + m->default_machine_opts = "firmware=bios-256k.bin,hpet=off"; m->default_display = "std"; m->no_floppy = 1; m->no_parallel = 1; diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 9520471be2..202e032524 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -733,6 +733,14 @@ static void hpet_realize(DeviceState *dev, Error **errp) int i; HPETTimer *timer; + /* Restricted for Red Hat Enterprise Linux */ + MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine()); + if (strstr(mc->name, "rhel")) { + error_setg(errp, "Device %s is not supported with machine type %s", + object_get_typename(OBJECT(dev)), mc->name); + return; + } + if (!s->intcap) { warn_report("Hpet's intcap not initialized"); } -- 2.27.0