Message ID | 20231009112812.10612-5-salil.mehta@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add architecture agnostic code to support vCPU Hotplug | expand |
On 09.10.23 13:28, Salil Mehta wrote: > ACPI GED(as described in the ACPI 6.2 spec) can be used to generate ACPI events > when OSPM/guest receives an interrupt listed in the _CRS object of GED. OSPM > then maps or demultiplexes the event by evaluating _EVT method. > > This change adds the support of cpu hotplug event initialization in the > existing GED framework. > > Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com> > Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > Reviewed-by: Gavin Shan <gshan@redhat.com> > --- > hw/acpi/generic_event_device.c | 8 ++++++++ > include/hw/acpi/generic_event_device.h | 5 +++++ > 2 files changed, 13 insertions(+) > > diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c > index a3d31631fe..d2fa1d0e4a 100644 > --- a/hw/acpi/generic_event_device.c > +++ b/hw/acpi/generic_event_device.c > @@ -25,6 +25,7 @@ static const uint32_t ged_supported_events[] = { > ACPI_GED_MEM_HOTPLUG_EVT, > ACPI_GED_PWR_DOWN_EVT, > ACPI_GED_NVDIMM_HOTPLUG_EVT, > + ACPI_GED_CPU_HOTPLUG_EVT, > }; > > /* > @@ -400,6 +401,13 @@ static void acpi_ged_initfn(Object *obj) > memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, > TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); > sysbus_init_mmio(sbd, &ged_st->regs); > + > + s->cpuhp.device = OBJECT(s); > + memory_region_init(&s->container_cpuhp, OBJECT(dev), "cpuhp container", > + ACPI_CPU_HOTPLUG_REG_LEN); > + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->container_cpuhp); > + cpu_hotplug_hw_init(&s->container_cpuhp, OBJECT(dev), > + &s->cpuhp_state, 0); > } > > static void acpi_ged_class_init(ObjectClass *class, void *data) > diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h > index d831bbd889..d0a5a43abf 100644 > --- a/include/hw/acpi/generic_event_device.h > +++ b/include/hw/acpi/generic_event_device.h > @@ -60,6 +60,7 @@ > #define HW_ACPI_GENERIC_EVENT_DEVICE_H > > #include "hw/sysbus.h" > +#include "hw/acpi/cpu_hotplug.h" > #include "hw/acpi/memory_hotplug.h" > #include "hw/acpi/ghes.h" > #include "qom/object.h" > @@ -97,6 +98,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) > #define ACPI_GED_MEM_HOTPLUG_EVT 0x1 > #define ACPI_GED_PWR_DOWN_EVT 0x2 > #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 > +#define ACPI_GED_CPU_HOTPLUG_EVT 0x8 > > typedef struct GEDState { > MemoryRegion evt; > @@ -108,6 +110,9 @@ struct AcpiGedState { > SysBusDevice parent_obj; > MemHotplugState memhp_state; > MemoryRegion container_memhp; > + CPUHotplugState cpuhp_state; > + MemoryRegion container_cpuhp; > + AcpiCpuHotplug cpuhp; Am I wrong or is that member completely unused/uninitialized?
> From: David Hildenbrand <david@redhat.com> > Sent: Monday, October 9, 2023 1:27 PM > To: Salil Mehta <salil.mehta@huawei.com>; qemu-devel@nongnu.org; qemu- > arm@nongnu.org > Cc: maz@kernel.org; jean-philippe@linaro.org; Jonathan Cameron > <jonathan.cameron@huawei.com>; lpieralisi@kernel.org; > peter.maydell@linaro.org; richard.henderson@linaro.org; > imammedo@redhat.com; andrew.jones@linux.dev; philmd@linaro.org; > eric.auger@redhat.com; oliver.upton@linux.dev; pbonzini@redhat.com; > mst@redhat.com; will@kernel.org; gshan@redhat.com; rafael@kernel.org; > alex.bennee@linaro.org; linux@armlinux.org.uk; > darren@os.amperecomputing.com; ilkka@os.amperecomputing.com; > vishnu@os.amperecomputing.com; karl.heubaum@oracle.com; > miguel.luis@oracle.com; salil.mehta@opnsrc.net; zhukeqian > <zhukeqian1@huawei.com>; wangxiongfeng (C) <wangxiongfeng2@huawei.com>; > wangyanan (Y) <wangyanan55@huawei.com>; jiakernel2@gmail.com; > maobibo@loongson.cn; lixianglai@loongson.cn; Linuxarm <linuxarm@huawei.com> > Subject: Re: [PATCH V3 04/10] hw/acpi: Init GED framework with cpu hotplug > events > > On 09.10.23 13:28, Salil Mehta wrote: > > ACPI GED(as described in the ACPI 6.2 spec) can be used to generate ACPI > events > > when OSPM/guest receives an interrupt listed in the _CRS object of GED. > OSPM > > then maps or demultiplexes the event by evaluating _EVT method. > > > > This change adds the support of cpu hotplug event initialization in the > > existing GED framework. > > > > Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com> > > Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > Reviewed-by: Gavin Shan <gshan@redhat.com> > > --- > > hw/acpi/generic_event_device.c | 8 ++++++++ > > include/hw/acpi/generic_event_device.h | 5 +++++ > > 2 files changed, 13 insertions(+) > > > > diff --git a/hw/acpi/generic_event_device.c > b/hw/acpi/generic_event_device.c > > index a3d31631fe..d2fa1d0e4a 100644 > > --- a/hw/acpi/generic_event_device.c > > +++ b/hw/acpi/generic_event_device.c > > @@ -25,6 +25,7 @@ static const uint32_t ged_supported_events[] = { > > ACPI_GED_MEM_HOTPLUG_EVT, > > ACPI_GED_PWR_DOWN_EVT, > > ACPI_GED_NVDIMM_HOTPLUG_EVT, > > + ACPI_GED_CPU_HOTPLUG_EVT, > > }; > > > > /* > > @@ -400,6 +401,13 @@ static void acpi_ged_initfn(Object *obj) > > memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, > > TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); > > sysbus_init_mmio(sbd, &ged_st->regs); > > + > > + s->cpuhp.device = OBJECT(s); > > + memory_region_init(&s->container_cpuhp, OBJECT(dev), "cpuhp > container", > > + ACPI_CPU_HOTPLUG_REG_LEN); > > + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->container_cpuhp); > > + cpu_hotplug_hw_init(&s->container_cpuhp, OBJECT(dev), > > + &s->cpuhp_state, 0); > > } > > > > static void acpi_ged_class_init(ObjectClass *class, void *data) > > diff --git a/include/hw/acpi/generic_event_device.h > b/include/hw/acpi/generic_event_device.h > > index d831bbd889..d0a5a43abf 100644 > > --- a/include/hw/acpi/generic_event_device.h > > +++ b/include/hw/acpi/generic_event_device.h > > @@ -60,6 +60,7 @@ > > #define HW_ACPI_GENERIC_EVENT_DEVICE_H > > > > #include "hw/sysbus.h" > > +#include "hw/acpi/cpu_hotplug.h" > > #include "hw/acpi/memory_hotplug.h" > > #include "hw/acpi/ghes.h" > > #include "qom/object.h" > > @@ -97,6 +98,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) > > #define ACPI_GED_MEM_HOTPLUG_EVT 0x1 > > #define ACPI_GED_PWR_DOWN_EVT 0x2 > > #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 > > +#define ACPI_GED_CPU_HOTPLUG_EVT 0x8 > > > > typedef struct GEDState { > > MemoryRegion evt; > > @@ -108,6 +110,9 @@ struct AcpiGedState { > > SysBusDevice parent_obj; > > MemHotplugState memhp_state; > > MemoryRegion container_memhp; > > + CPUHotplugState cpuhp_state; > > + MemoryRegion container_cpuhp; > > + AcpiCpuHotplug cpuhp; > > Am I wrong or is that member completely unused/uninitialized? No it is not. Please check below change in acpi_ged_initfn() + s->cpuhp.device = OBJECT(s); Thanks Salil.
On 09.10.23 16:12, Salil Mehta wrote: >> From: David Hildenbrand <david@redhat.com> >> Sent: Monday, October 9, 2023 1:27 PM >> To: Salil Mehta <salil.mehta@huawei.com>; qemu-devel@nongnu.org; qemu- >> arm@nongnu.org >> Cc: maz@kernel.org; jean-philippe@linaro.org; Jonathan Cameron >> <jonathan.cameron@huawei.com>; lpieralisi@kernel.org; >> peter.maydell@linaro.org; richard.henderson@linaro.org; >> imammedo@redhat.com; andrew.jones@linux.dev; philmd@linaro.org; >> eric.auger@redhat.com; oliver.upton@linux.dev; pbonzini@redhat.com; >> mst@redhat.com; will@kernel.org; gshan@redhat.com; rafael@kernel.org; >> alex.bennee@linaro.org; linux@armlinux.org.uk; >> darren@os.amperecomputing.com; ilkka@os.amperecomputing.com; >> vishnu@os.amperecomputing.com; karl.heubaum@oracle.com; >> miguel.luis@oracle.com; salil.mehta@opnsrc.net; zhukeqian >> <zhukeqian1@huawei.com>; wangxiongfeng (C) <wangxiongfeng2@huawei.com>; >> wangyanan (Y) <wangyanan55@huawei.com>; jiakernel2@gmail.com; >> maobibo@loongson.cn; lixianglai@loongson.cn; Linuxarm <linuxarm@huawei.com> >> Subject: Re: [PATCH V3 04/10] hw/acpi: Init GED framework with cpu hotplug >> events >> >> On 09.10.23 13:28, Salil Mehta wrote: >>> ACPI GED(as described in the ACPI 6.2 spec) can be used to generate ACPI >> events >>> when OSPM/guest receives an interrupt listed in the _CRS object of GED. >> OSPM >>> then maps or demultiplexes the event by evaluating _EVT method. >>> >>> This change adds the support of cpu hotplug event initialization in the >>> existing GED framework. >>> >>> Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com> >>> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> >>> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> >>> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> >>> Reviewed-by: Gavin Shan <gshan@redhat.com> >>> --- >>> hw/acpi/generic_event_device.c | 8 ++++++++ >>> include/hw/acpi/generic_event_device.h | 5 +++++ >>> 2 files changed, 13 insertions(+) >>> >>> diff --git a/hw/acpi/generic_event_device.c >> b/hw/acpi/generic_event_device.c >>> index a3d31631fe..d2fa1d0e4a 100644 >>> --- a/hw/acpi/generic_event_device.c >>> +++ b/hw/acpi/generic_event_device.c >>> @@ -25,6 +25,7 @@ static const uint32_t ged_supported_events[] = { >>> ACPI_GED_MEM_HOTPLUG_EVT, >>> ACPI_GED_PWR_DOWN_EVT, >>> ACPI_GED_NVDIMM_HOTPLUG_EVT, >>> + ACPI_GED_CPU_HOTPLUG_EVT, >>> }; >>> >>> /* >>> @@ -400,6 +401,13 @@ static void acpi_ged_initfn(Object *obj) >>> memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, >>> TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); >>> sysbus_init_mmio(sbd, &ged_st->regs); >>> + >>> + s->cpuhp.device = OBJECT(s); >>> + memory_region_init(&s->container_cpuhp, OBJECT(dev), "cpuhp >> container", >>> + ACPI_CPU_HOTPLUG_REG_LEN); >>> + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->container_cpuhp); >>> + cpu_hotplug_hw_init(&s->container_cpuhp, OBJECT(dev), >>> + &s->cpuhp_state, 0); >>> } >>> >>> static void acpi_ged_class_init(ObjectClass *class, void *data) >>> diff --git a/include/hw/acpi/generic_event_device.h >> b/include/hw/acpi/generic_event_device.h >>> index d831bbd889..d0a5a43abf 100644 >>> --- a/include/hw/acpi/generic_event_device.h >>> +++ b/include/hw/acpi/generic_event_device.h >>> @@ -60,6 +60,7 @@ >>> #define HW_ACPI_GENERIC_EVENT_DEVICE_H >>> >>> #include "hw/sysbus.h" >>> +#include "hw/acpi/cpu_hotplug.h" >>> #include "hw/acpi/memory_hotplug.h" >>> #include "hw/acpi/ghes.h" >>> #include "qom/object.h" >>> @@ -97,6 +98,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) >>> #define ACPI_GED_MEM_HOTPLUG_EVT 0x1 >>> #define ACPI_GED_PWR_DOWN_EVT 0x2 >>> #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 >>> +#define ACPI_GED_CPU_HOTPLUG_EVT 0x8 >>> >>> typedef struct GEDState { >>> MemoryRegion evt; >>> @@ -108,6 +110,9 @@ struct AcpiGedState { >>> SysBusDevice parent_obj; >>> MemHotplugState memhp_state; >>> MemoryRegion container_memhp; >>> + CPUHotplugState cpuhp_state; >>> + MemoryRegion container_cpuhp; >>> + AcpiCpuHotplug cpuhp; >> >> Am I wrong or is that member completely unused/uninitialized? > > No it is not. Please check below change in acpi_ged_initfn() > > + s->cpuhp.device = OBJECT(s); Not the best of my mondays, sorry for that. Reviewed-by: David Hildenbrand <david@redhat.com>
> From: David Hildenbrand <david@redhat.com> > Sent: Monday, October 9, 2023 3:14 PM > > On 09.10.23 16:12, Salil Mehta wrote: > >> From: David Hildenbrand <david@redhat.com> > >> Sent: Monday, October 9, 2023 1:27 PM > >> To: Salil Mehta <salil.mehta@huawei.com>; qemu-devel@nongnu.org; qemu-arm@nongnu.org > >> Cc: maz@kernel.org; jean-philippe@linaro.org; Jonathan Cameron > >> <jonathan.cameron@huawei.com>; lpieralisi@kernel.org; > >> peter.maydell@linaro.org; richard.henderson@linaro.org; > >> imammedo@redhat.com; andrew.jones@linux.dev; philmd@linaro.org; > >> eric.auger@redhat.com; oliver.upton@linux.dev; pbonzini@redhat.com; > >> mst@redhat.com; will@kernel.org; gshan@redhat.com; rafael@kernel.org; > >> alex.bennee@linaro.org; linux@armlinux.org.uk; > >> darren@os.amperecomputing.com; ilkka@os.amperecomputing.com; > >> vishnu@os.amperecomputing.com; karl.heubaum@oracle.com; > >> miguel.luis@oracle.com; salil.mehta@opnsrc.net; zhukeqian > >> <zhukeqian1@huawei.com>; wangxiongfeng (C) <wangxiongfeng2@huawei.com>; > >> wangyanan (Y) <wangyanan55@huawei.com>; jiakernel2@gmail.com; > >> maobibo@loongson.cn; lixianglai@loongson.cn; Linuxarm > <linuxarm@huawei.com> > >> Subject: Re: [PATCH V3 04/10] hw/acpi: Init GED framework with cpu hotplug > >> events > >> > >> On 09.10.23 13:28, Salil Mehta wrote: > >>> ACPI GED(as described in the ACPI 6.2 spec) can be used to generate ACPI > >> events > >>> when OSPM/guest receives an interrupt listed in the _CRS object of GED. > >> OSPM > >>> then maps or demultiplexes the event by evaluating _EVT method. > >>> > >>> This change adds the support of cpu hotplug event initialization in the > >>> existing GED framework. > >>> > >>> Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com> > >>> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> > >>> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > >>> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > >>> Reviewed-by: Gavin Shan <gshan@redhat.com> > >>> --- > >>> hw/acpi/generic_event_device.c | 8 ++++++++ > >>> include/hw/acpi/generic_event_device.h | 5 +++++ > >>> 2 files changed, 13 insertions(+) > >>> > >>> diff --git a/hw/acpi/generic_event_device.c > >> b/hw/acpi/generic_event_device.c > >>> index a3d31631fe..d2fa1d0e4a 100644 > >>> --- a/hw/acpi/generic_event_device.c > >>> +++ b/hw/acpi/generic_event_device.c > >>> @@ -25,6 +25,7 @@ static const uint32_t ged_supported_events[] = { > >>> ACPI_GED_MEM_HOTPLUG_EVT, > >>> ACPI_GED_PWR_DOWN_EVT, > >>> ACPI_GED_NVDIMM_HOTPLUG_EVT, > >>> + ACPI_GED_CPU_HOTPLUG_EVT, > >>> }; > >>> > >>> /* > >>> @@ -400,6 +401,13 @@ static void acpi_ged_initfn(Object *obj) > >>> memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, > >>> TYPE_ACPI_GED "-regs", > ACPI_GED_REG_COUNT); > >>> sysbus_init_mmio(sbd, &ged_st->regs); > >>> + > >>> + s->cpuhp.device = OBJECT(s); > >>> + memory_region_init(&s->container_cpuhp, OBJECT(dev), "cpuhp > >> container", > >>> + ACPI_CPU_HOTPLUG_REG_LEN); > >>> + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->container_cpuhp); > >>> + cpu_hotplug_hw_init(&s->container_cpuhp, OBJECT(dev), > >>> + &s->cpuhp_state, 0); > >>> } > >>> > >>> static void acpi_ged_class_init(ObjectClass *class, void *data) > >>> diff --git a/include/hw/acpi/generic_event_device.h > >> b/include/hw/acpi/generic_event_device.h > >>> index d831bbd889..d0a5a43abf 100644 > >>> --- a/include/hw/acpi/generic_event_device.h > >>> +++ b/include/hw/acpi/generic_event_device.h > >>> @@ -60,6 +60,7 @@ > >>> #define HW_ACPI_GENERIC_EVENT_DEVICE_H > >>> > >>> #include "hw/sysbus.h" > >>> +#include "hw/acpi/cpu_hotplug.h" > >>> #include "hw/acpi/memory_hotplug.h" > >>> #include "hw/acpi/ghes.h" > >>> #include "qom/object.h" > >>> @@ -97,6 +98,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) > >>> #define ACPI_GED_MEM_HOTPLUG_EVT 0x1 > >>> #define ACPI_GED_PWR_DOWN_EVT 0x2 > >>> #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 > >>> +#define ACPI_GED_CPU_HOTPLUG_EVT 0x8 > >>> > >>> typedef struct GEDState { > >>> MemoryRegion evt; > >>> @@ -108,6 +110,9 @@ struct AcpiGedState { > >>> SysBusDevice parent_obj; > >>> MemHotplugState memhp_state; > >>> MemoryRegion container_memhp; > >>> + CPUHotplugState cpuhp_state; > >>> + MemoryRegion container_cpuhp; > >>> + AcpiCpuHotplug cpuhp; > >> > >> Am I wrong or is that member completely unused/uninitialized? > > > > No it is not. Please check below change in acpi_ged_initfn() > > > > + s->cpuhp.device = OBJECT(s); > > Not the best of my mondays, sorry for that. > > Reviewed-by: David Hildenbrand <david@redhat.com> No issues at all. Thanks for taking time to review this. Best regards Salil.
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index a3d31631fe..d2fa1d0e4a 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -25,6 +25,7 @@ static const uint32_t ged_supported_events[] = { ACPI_GED_MEM_HOTPLUG_EVT, ACPI_GED_PWR_DOWN_EVT, ACPI_GED_NVDIMM_HOTPLUG_EVT, + ACPI_GED_CPU_HOTPLUG_EVT, }; /* @@ -400,6 +401,13 @@ static void acpi_ged_initfn(Object *obj) memory_region_init_io(&ged_st->regs, obj, &ged_regs_ops, ged_st, TYPE_ACPI_GED "-regs", ACPI_GED_REG_COUNT); sysbus_init_mmio(sbd, &ged_st->regs); + + s->cpuhp.device = OBJECT(s); + memory_region_init(&s->container_cpuhp, OBJECT(dev), "cpuhp container", + ACPI_CPU_HOTPLUG_REG_LEN); + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->container_cpuhp); + cpu_hotplug_hw_init(&s->container_cpuhp, OBJECT(dev), + &s->cpuhp_state, 0); } static void acpi_ged_class_init(ObjectClass *class, void *data) diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index d831bbd889..d0a5a43abf 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -60,6 +60,7 @@ #define HW_ACPI_GENERIC_EVENT_DEVICE_H #include "hw/sysbus.h" +#include "hw/acpi/cpu_hotplug.h" #include "hw/acpi/memory_hotplug.h" #include "hw/acpi/ghes.h" #include "qom/object.h" @@ -97,6 +98,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(AcpiGedState, ACPI_GED) #define ACPI_GED_MEM_HOTPLUG_EVT 0x1 #define ACPI_GED_PWR_DOWN_EVT 0x2 #define ACPI_GED_NVDIMM_HOTPLUG_EVT 0x4 +#define ACPI_GED_CPU_HOTPLUG_EVT 0x8 typedef struct GEDState { MemoryRegion evt; @@ -108,6 +110,9 @@ struct AcpiGedState { SysBusDevice parent_obj; MemHotplugState memhp_state; MemoryRegion container_memhp; + CPUHotplugState cpuhp_state; + MemoryRegion container_cpuhp; + AcpiCpuHotplug cpuhp; GEDState ged_state; uint32_t ged_event_bitmap; qemu_irq irq;