On Mon, Jul 13, 2020 at 10:49:07AM +0200, Igor Mammedov wrote: > On Mon, 29 Jun 2020 16:09:37 +0200 > Andrew Jones <drjo...@redhat.com> wrote: > > > The flash device is exclusively for the host-controlled firmware, so > > we should not expose it to the OS. Exposing it risks the OS messing > > with it, which could break firmware runtime services and surprise the > > OS when all its changes disappear after reboot. > > > > As firmware needs the device and uses DT, we leave the device exposed > > there. It's up to firmware to remove the nodes from DT before sending > > it on to the OS. However, there's no need to force firmware to remove > > tables from ACPI (which it doesn't know how to do anyway), so we > > simply don't add the tables in the first place. But, as we've been > > adding the tables for quite some time and don't want to change the > > default hardware exposed to versioned machines, then we only stop > > exposing the flash device tables for 5.1 and later machine types. > > > > Suggested-by: Ard Biesheuvel <ard.biesheu...@arm.com> > > Suggested-by: Laszlo Ersek <ler...@redhat.com> > > Signed-off-by: Andrew Jones <drjo...@redhat.com> > > --- > > hw/arm/virt-acpi-build.c | 5 ++++- > > hw/arm/virt.c | 3 +++ > > include/hw/arm/virt.h | 1 + > > 3 files changed, 8 insertions(+), 1 deletion(-) > > > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > > index 1384a2cf2ab4..91f0df7b13a3 100644 > > --- a/hw/arm/virt-acpi-build.c > > +++ b/hw/arm/virt-acpi-build.c > > @@ -749,6 +749,7 @@ static void build_fadt_rev5(GArray *table_data, > > BIOSLinker *linker, > > static void > > build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) > > { > > + VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms); > > Aml *scope, *dsdt; > > MachineState *ms = MACHINE(vms); > > const MemMapEntry *memmap = vms->memmap; > > @@ -767,7 +768,9 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, > > VirtMachineState *vms) > > acpi_dsdt_add_cpus(scope, vms->smp_cpus); > > acpi_dsdt_add_uart(scope, &memmap[VIRT_UART], > > (irqmap[VIRT_UART] + ARM_SPI_BASE)); > > - acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]); > > + if (vmc->acpi_expose_flash) { > > + acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]); > > + } > > acpi_dsdt_add_fw_cfg(scope, &memmap[VIRT_FW_CFG]); > > acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO], > > (irqmap[VIRT_MMIO] + ARM_SPI_BASE), > > NUM_VIRTIO_TRANSPORTS); > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > > index cd0834ce7faf..5adc9ff799ef 100644 > > --- a/hw/arm/virt.c > > +++ b/hw/arm/virt.c > > @@ -2482,9 +2482,12 @@ DEFINE_VIRT_MACHINE_AS_LATEST(5, 1) > > > > static void virt_machine_5_0_options(MachineClass *mc) > > { > > + VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); > > + > > virt_machine_5_1_options(mc); > > compat_props_add(mc->compat_props, hw_compat_5_0, hw_compat_5_0_len); > > mc->numa_mem_supported = true; > > + vmc->acpi_expose_flash = true; > > we usually do not version ACPI tables changes > (unless we have a good reason to do so)
Even when the change is to remove the exposure of hardware from the guest? Before this change, if a guest looked, it had a flash, after this change, if a guest looks, it doesn't. I'd feel much better versioning a change like that, than not. Thanks, drew > > > } > > DEFINE_VIRT_MACHINE(5, 0) > > > > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h > > index 31878ddc7223..c65be5fe0bb6 100644 > > --- a/include/hw/arm/virt.h > > +++ b/include/hw/arm/virt.h > > @@ -119,6 +119,7 @@ typedef struct { > > bool no_highmem_ecam; > > bool no_ged; /* Machines < 4.2 has no support for ACPI GED device */ > > bool kvm_no_adjvtime; > > + bool acpi_expose_flash; > > } VirtMachineClass; > > > > typedef struct { > >