On 12/09/19 14:09, Igor Mammedov wrote: > No functional change in practice, patch only aims to properly > document (in spec and code) intended usage of the reserved space. > > The new field is to be used for 2 purposes: > - detection of modern CPU hotplug interface using > CPHP_GET_NEXT_CPU_WITH_EVENT_CMD command. > procedure will be described in follow up patch: > "acpi: cpuhp: spec: add typical usecases" > - for returning upper 32 bits of architecture specific CPU ID, > for new CPHP_GET_CPU_ID_CMD command added by follow up patch: > "acpi: cpuhp: add CPHP_GET_CPU_ID_CMD command" > > Change is backward compatible with 4.2 and older machines, as field was > unconditionally reserved and always returned 0x0 if modern CPU hotplug > interface was enabled. > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > docs/specs/acpi_cpu_hotplug.txt | 5 ++++- > hw/acpi/cpu.c | 11 +++++++++++ > hw/acpi/trace-events | 1 + > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/docs/specs/acpi_cpu_hotplug.txt b/docs/specs/acpi_cpu_hotplug.txt > index 8fb9ad2..9879f9e 100644 > --- a/docs/specs/acpi_cpu_hotplug.txt > +++ b/docs/specs/acpi_cpu_hotplug.txt > @@ -44,7 +44,10 @@ keeps the current value. > > read access: > offset: > - [0x0-0x3] reserved > + [0x0-0x3] Command data 2: (DWORD access) > + if value last stored in 'Command field': > + 0: reads as 0x0 > + other values: reserved > [0x4] CPU device status fields: (1 byte access) > bits: > 0: Device is enabled and may be used by guest > diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c > index 87f30a3..d475c06 100644 > --- a/hw/acpi/cpu.c > +++ b/hw/acpi/cpu.c > @@ -12,6 +12,7 @@ > #define ACPI_CPU_FLAGS_OFFSET_RW 4 > #define ACPI_CPU_CMD_OFFSET_WR 5 > #define ACPI_CPU_CMD_DATA_OFFSET_RW 8 > +#define ACPI_CPU_CMD_DATA2_OFFSET_R 0 > > enum { > CPHP_GET_NEXT_CPU_WITH_EVENT_CMD = 0, > @@ -79,6 +80,16 @@ static uint64_t cpu_hotplug_rd(void *opaque, hwaddr addr, > unsigned size) > } > trace_cpuhp_acpi_read_cmd_data(cpu_st->selector, val); > break; > + case ACPI_CPU_CMD_DATA2_OFFSET_R: > + switch (cpu_st->command) { > + case CPHP_GET_NEXT_CPU_WITH_EVENT_CMD: > + val = 0; > + break; > + default: > + break; > + } > + trace_cpuhp_acpi_read_cmd_data2(cpu_st->selector, val); > + break; > default: > break; > } > diff --git a/hw/acpi/trace-events b/hw/acpi/trace-events > index 96b8273..afbc77d 100644 > --- a/hw/acpi/trace-events > +++ b/hw/acpi/trace-events > @@ -23,6 +23,7 @@ cpuhp_acpi_read_flags(uint32_t idx, uint8_t flags) > "idx[0x%"PRIx32"] flags: 0x%" > cpuhp_acpi_write_idx(uint32_t idx) "set active cpu idx: 0x%"PRIx32 > cpuhp_acpi_write_cmd(uint32_t idx, uint8_t cmd) "idx[0x%"PRIx32"] cmd: > 0x%"PRIx8 > cpuhp_acpi_read_cmd_data(uint32_t idx, uint32_t data) "idx[0x%"PRIx32"] > data: 0x%"PRIx32 > +cpuhp_acpi_read_cmd_data2(uint32_t idx, uint32_t data) "idx[0x%"PRIx32"] > data: 0x%"PRIx32 > cpuhp_acpi_cpu_has_events(uint32_t idx, bool ins, bool rm) "idx[0x%"PRIx32"] > inserting: %d, removing: %d" > cpuhp_acpi_clear_inserting_evt(uint32_t idx) "idx[0x%"PRIx32"]" > cpuhp_acpi_clear_remove_evt(uint32_t idx) "idx[0x%"PRIx32"]" >
Neat. :) Reviewed-by: Laszlo Ersek <ler...@redhat.com>