Message ID | 20230926100436.28284-25-salil.mehta@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support of Virtual CPU Hotplug for ARMv8 Arch | expand |
On Tue, Sep 26, 2023 at 11:04:23AM +0100, Salil Mehta wrote: > ACPI GED shall be used to convey to the guest kernel about any CPU hot-(un)plug > events. Therefore, existing ACPI GED framework inside QEMU needs to be enhanced > to support CPU hotplug state and events. > > Co-developed-by: Salil Mehta <salil.mehta@huawei.com> Co-developed with yourself? didn't you co-develop this with xianglai li? Just include his S.O.B then, and drop the non-standard Co-developed-by. > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > 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> > --- > hw/acpi/generic_event_device.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c > index ad252e6a91..0266733a54 100644 > --- a/hw/acpi/generic_event_device.c > +++ b/hw/acpi/generic_event_device.c > @@ -12,6 +12,7 @@ > #include "qemu/osdep.h" > #include "qapi/error.h" > #include "hw/acpi/acpi.h" > +#include "hw/acpi/cpu.h" > #include "hw/acpi/generic_event_device.h" > #include "hw/irq.h" > #include "hw/mem/pc-dimm.h" > @@ -239,6 +240,8 @@ static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, > } else { > acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, errp); > } > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); > } else { > error_setg(errp, "virt: device plug request for unsupported device" > " type: %s", object_get_typename(OBJECT(dev))); > @@ -253,6 +256,8 @@ static void acpi_ged_unplug_request_cb(HotplugHandler *hotplug_dev, > if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && > !(object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM)))) { > acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, dev, errp); > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, dev, errp); > } else { > error_setg(errp, "acpi: device unplug request for unsupported device" > " type: %s", object_get_typename(OBJECT(dev))); > @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler *hotplug_dev, > > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { > acpi_memory_unplug_cb(&s->memhp_state, dev, errp); > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); > } else { > error_setg(errp, "acpi: device unplug for unsupported device" > " type: %s", object_get_typename(OBJECT(dev))); > @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list) > AcpiGedState *s = ACPI_GED(adev); > > acpi_memory_ospm_status(&s->memhp_state, list); > + acpi_cpu_ospm_status(&s->cpuhp_state, list); > } > > static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) > @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) > sel = ACPI_GED_PWR_DOWN_EVT; > } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { > sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; > + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { > + sel = ACPI_GED_CPU_HOTPLUG_EVT; > } else { > /* Unknown event. Return without generating interrupt. */ > warn_report("GED: Unsupported event %d. No irq injected", ev); > -- > 2.34.1
> From: Michael S. Tsirkin <mst@redhat.com> > Sent: Tuesday, September 26, 2023 12:02 PM > To: Salil Mehta <salil.mehta@huawei.com> > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org; 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; > david@redhat.com; philmd@linaro.org; eric.auger@redhat.com; > will@kernel.org; ardb@kernel.org; oliver.upton@linux.dev; > pbonzini@redhat.com; gshan@redhat.com; rafael@kernel.org; > borntraeger@linux.ibm.com; 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 > Subject: Re: [PATCH RFC V2 24/37] hw/acpi: Update ACPI GED framework to > support vCPU Hotplug > > On Tue, Sep 26, 2023 at 11:04:23AM +0100, Salil Mehta wrote: > > ACPI GED shall be used to convey to the guest kernel about any CPU hot- > (un)plug > > events. Therefore, existing ACPI GED framework inside QEMU needs to be > enhanced > > to support CPU hotplug state and events. > > > > Co-developed-by: Salil Mehta <salil.mehta@huawei.com> > > Co-developed with yourself? > > didn't you co-develop this with xianglai li? No, our effort is quite old ARM patch-set existed since the year 2020 without any change. Please check the original patch-set here: https://lore.kernel.org/qemu-devel/20200613213629.21984-11-salil.mehta@huawei.com/ To be fair to the authors, it will not be right to add another SOB here. > > Just include his S.O.B then, and drop the non-standard Co-developed-by. Co-developed-by Tag has been added to ensure main authors of the patch get highlighted clearly. > > > > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > 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> > > > > > --- > > hw/acpi/generic_event_device.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/hw/acpi/generic_event_device.c > b/hw/acpi/generic_event_device.c > > index ad252e6a91..0266733a54 100644 > > --- a/hw/acpi/generic_event_device.c > > +++ b/hw/acpi/generic_event_device.c > > @@ -12,6 +12,7 @@ > > #include "qemu/osdep.h" > > #include "qapi/error.h" > > #include "hw/acpi/acpi.h" > > +#include "hw/acpi/cpu.h" > > #include "hw/acpi/generic_event_device.h" > > #include "hw/irq.h" > > #include "hw/mem/pc-dimm.h" > > @@ -239,6 +240,8 @@ static void acpi_ged_device_plug_cb(HotplugHandler > *hotplug_dev, > > } else { > > acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, > errp); > > } > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); > > } else { > > error_setg(errp, "virt: device plug request for unsupported > device" > > " type: %s", object_get_typename(OBJECT(dev))); > > @@ -253,6 +256,8 @@ static void acpi_ged_unplug_request_cb(HotplugHandler > *hotplug_dev, > > if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && > > !(object_dynamic_cast(OBJECT(dev), > TYPE_NVDIMM)))) { > > acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, dev, > errp); > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, dev, > errp); > > } else { > > error_setg(errp, "acpi: device unplug request for unsupported > device" > > " type: %s", object_get_typename(OBJECT(dev))); > > @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler > *hotplug_dev, > > > > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { > > acpi_memory_unplug_cb(&s->memhp_state, dev, errp); > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); > > } else { > > error_setg(errp, "acpi: device unplug for unsupported device" > > " type: %s", object_get_typename(OBJECT(dev))); > > @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf *adev, > ACPIOSTInfoList ***list) > > AcpiGedState *s = ACPI_GED(adev); > > > > acpi_memory_ospm_status(&s->memhp_state, list); > > + acpi_cpu_ospm_status(&s->cpuhp_state, list); > > } > > > > static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits > ev) > > @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, > AcpiEventStatusBits ev) > > sel = ACPI_GED_PWR_DOWN_EVT; > > } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { > > sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; > > + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { > > + sel = ACPI_GED_CPU_HOTPLUG_EVT; > > } else { > > /* Unknown event. Return without generating interrupt. */ > > warn_report("GED: Unsupported event %d. No irq injected", ev); > > -- > > 2.34.1
On Tue, Sep 26, 2023 at 11:37:38AM +0000, Salil Mehta wrote: > > From: Michael S. Tsirkin <mst@redhat.com> > > Sent: Tuesday, September 26, 2023 12:02 PM > > To: Salil Mehta <salil.mehta@huawei.com> > > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org; 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; > > david@redhat.com; philmd@linaro.org; eric.auger@redhat.com; > > will@kernel.org; ardb@kernel.org; oliver.upton@linux.dev; > > pbonzini@redhat.com; gshan@redhat.com; rafael@kernel.org; > > borntraeger@linux.ibm.com; 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 > > Subject: Re: [PATCH RFC V2 24/37] hw/acpi: Update ACPI GED framework to > > support vCPU Hotplug > > > > On Tue, Sep 26, 2023 at 11:04:23AM +0100, Salil Mehta wrote: > > > ACPI GED shall be used to convey to the guest kernel about any CPU hot- > > (un)plug > > > events. Therefore, existing ACPI GED framework inside QEMU needs to be > > enhanced > > > to support CPU hotplug state and events. > > > > > > Co-developed-by: Salil Mehta <salil.mehta@huawei.com> > > > > Co-developed with yourself? > > > > didn't you co-develop this with xianglai li? > > No, our effort is quite old ARM patch-set existed since the year 2020 > without any change. Please check the original patch-set here: > > https://lore.kernel.org/qemu-devel/20200613213629.21984-11-salil.mehta@huawei.com/ > > > To be fair to the authors, it will not be right to add another SOB here. > I see. And what's the difference with patches that xianglai li posted? Are they both rebases of the same old patch then? > > > > > Just include his S.O.B then, and drop the non-standard Co-developed-by. > > Co-developed-by Tag has been added to ensure main authors of the patch > get highlighted clearly. I think I don't know the patch provenance at this point. > > > > > > > > > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > > 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> > > > > > > > > > --- > > > hw/acpi/generic_event_device.c | 10 ++++++++++ > > > 1 file changed, 10 insertions(+) > > > > > > diff --git a/hw/acpi/generic_event_device.c > > b/hw/acpi/generic_event_device.c > > > index ad252e6a91..0266733a54 100644 > > > --- a/hw/acpi/generic_event_device.c > > > +++ b/hw/acpi/generic_event_device.c > > > @@ -12,6 +12,7 @@ > > > #include "qemu/osdep.h" > > > #include "qapi/error.h" > > > #include "hw/acpi/acpi.h" > > > +#include "hw/acpi/cpu.h" > > > #include "hw/acpi/generic_event_device.h" > > > #include "hw/irq.h" > > > #include "hw/mem/pc-dimm.h" > > > @@ -239,6 +240,8 @@ static void acpi_ged_device_plug_cb(HotplugHandler > > *hotplug_dev, > > > } else { > > > acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, > > errp); > > > } > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); > > > } else { > > > error_setg(errp, "virt: device plug request for unsupported > > device" > > > " type: %s", object_get_typename(OBJECT(dev))); > > > @@ -253,6 +256,8 @@ static void acpi_ged_unplug_request_cb(HotplugHandler > > *hotplug_dev, > > > if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && > > > !(object_dynamic_cast(OBJECT(dev), > > TYPE_NVDIMM)))) { > > > acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, dev, > > errp); > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, dev, > > errp); > > > } else { > > > error_setg(errp, "acpi: device unplug request for unsupported > > device" > > > " type: %s", object_get_typename(OBJECT(dev))); > > > @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler > > *hotplug_dev, > > > > > > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { > > > acpi_memory_unplug_cb(&s->memhp_state, dev, errp); > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); > > > } else { > > > error_setg(errp, "acpi: device unplug for unsupported device" > > > " type: %s", object_get_typename(OBJECT(dev))); > > > @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf *adev, > > ACPIOSTInfoList ***list) > > > AcpiGedState *s = ACPI_GED(adev); > > > > > > acpi_memory_ospm_status(&s->memhp_state, list); > > > + acpi_cpu_ospm_status(&s->cpuhp_state, list); > > > } > > > > > > static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits > > ev) > > > @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, > > AcpiEventStatusBits ev) > > > sel = ACPI_GED_PWR_DOWN_EVT; > > > } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { > > > sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; > > > + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { > > > + sel = ACPI_GED_CPU_HOTPLUG_EVT; > > > } else { > > > /* Unknown event. Return without generating interrupt. */ > > > warn_report("GED: Unsupported event %d. No irq injected", ev); > > > -- > > > 2.34.1
> From: Michael S. Tsirkin <mst@redhat.com> > Sent: Tuesday, September 26, 2023 1:00 PM > To: Salil Mehta <salil.mehta@huawei.com> > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org; 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; > david@redhat.com; philmd@linaro.org; eric.auger@redhat.com; > will@kernel.org; ardb@kernel.org; oliver.upton@linux.dev; > pbonzini@redhat.com; gshan@redhat.com; rafael@kernel.org; > borntraeger@linux.ibm.com; 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 > Subject: Re: [PATCH RFC V2 24/37] hw/acpi: Update ACPI GED framework to > support vCPU Hotplug > > On Tue, Sep 26, 2023 at 11:37:38AM +0000, Salil Mehta wrote: > > > From: Michael S. Tsirkin <mst@redhat.com> > > > Sent: Tuesday, September 26, 2023 12:02 PM > > > To: Salil Mehta <salil.mehta@huawei.com> > > > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org; 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; > > > david@redhat.com; philmd@linaro.org; eric.auger@redhat.com; > > > will@kernel.org; ardb@kernel.org; oliver.upton@linux.dev; > > > pbonzini@redhat.com; gshan@redhat.com; rafael@kernel.org; > > > borntraeger@linux.ibm.com; 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 > > > Subject: Re: [PATCH RFC V2 24/37] hw/acpi: Update ACPI GED framework to > > > support vCPU Hotplug > > > > > > On Tue, Sep 26, 2023 at 11:04:23AM +0100, Salil Mehta wrote: > > > > ACPI GED shall be used to convey to the guest kernel about any CPU > hot- > > > (un)plug > > > > events. Therefore, existing ACPI GED framework inside QEMU needs to > be > > > enhanced > > > > to support CPU hotplug state and events. > > > > > > > > Co-developed-by: Salil Mehta <salil.mehta@huawei.com> > > > > > > Co-developed with yourself? > > > > > > didn't you co-develop this with xianglai li? > > > > No, our effort is quite old ARM patch-set existed since the year 2020 > > without any change. Please check the original patch-set here: > > > > https://lore.kernel.org/qemu-devel/20200613213629.21984-11- > salil.mehta@huawei.com/ > > > > > > To be fair to the authors, it will not be right to add another SOB here. > > > > I see. And what's the difference with patches that xianglai li posted? I am not sure if there is. But if there is any change then it can be commented on the architecture agnostic patch-set which I shall be posting later this week. If that change is a common change to all the architectures maybe I can pick-up that change and add in the V2 version of the arch agnostic patch-set and then it will make sense to add the SOBs of the contributing members there. > Are they both rebases of the same old patch then? RFC V2 is an extension of RFC V1. We been working with ARM, Oracle Ampere, Linaro and other companies to get to this stage. It has already been agreed that Loongson folks shall be rebasing their patch-set over ARM RFC V2 patch-set which is very big. https://lore.kernel.org/qemu-devel/20230926100436.28284-1-salil.mehta@huawei.com/T/#m523b37819c4811c7827333982004e07a1ef03879 I have for now pointed the patches in the exact order which can be used to rebase their patch-set . I will be sending a separate arch agnostic patch-set later this week which will be without RFC Tag. This way different companies can work independently. Thanks Salil. > > > Just include his S.O.B then, and drop the non-standard Co-developed-by. > > > > Co-developed-by Tag has been added to ensure main authors of the patch > > get highlighted clearly. > > I think I don't know the patch provenance at this point. It was us from Huawei in the year 2020. https://lore.kernel.org/qemu-devel/20200613213629.21984-10-salil.mehta@huawei.com/ > > > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com> > > > > 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> > > > > > > > > > > > > > --- > > > > hw/acpi/generic_event_device.c | 10 ++++++++++ > > > > 1 file changed, 10 insertions(+) > > > > > > > > diff --git a/hw/acpi/generic_event_device.c > > > b/hw/acpi/generic_event_device.c > > > > index ad252e6a91..0266733a54 100644 > > > > --- a/hw/acpi/generic_event_device.c > > > > +++ b/hw/acpi/generic_event_device.c > > > > @@ -12,6 +12,7 @@ > > > > #include "qemu/osdep.h" > > > > #include "qapi/error.h" > > > > #include "hw/acpi/acpi.h" > > > > +#include "hw/acpi/cpu.h" > > > > #include "hw/acpi/generic_event_device.h" > > > > #include "hw/irq.h" > > > > #include "hw/mem/pc-dimm.h" > > > > @@ -239,6 +240,8 @@ static void > acpi_ged_device_plug_cb(HotplugHandler > > > *hotplug_dev, > > > > } else { > > > > acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, > > > errp); > > > > } > > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > > + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); > > > > } else { > > > > error_setg(errp, "virt: device plug request for unsupported > > > device" > > > > " type: %s", object_get_typename(OBJECT(dev))); > > > > @@ -253,6 +256,8 @@ static void > acpi_ged_unplug_request_cb(HotplugHandler > > > *hotplug_dev, > > > > if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && > > > > !(object_dynamic_cast(OBJECT(dev), > > > TYPE_NVDIMM)))) { > > > > acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, > dev, > > > errp); > > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > > + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, > dev, > > > errp); > > > > } else { > > > > error_setg(errp, "acpi: device unplug request for > unsupported > > > device" > > > > " type: %s", object_get_typename(OBJECT(dev))); > > > > @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler > > > *hotplug_dev, > > > > > > > > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { > > > > acpi_memory_unplug_cb(&s->memhp_state, dev, errp); > > > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { > > > > + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); > > > > } else { > > > > error_setg(errp, "acpi: device unplug for unsupported > device" > > > > " type: %s", object_get_typename(OBJECT(dev))); > > > > @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf > *adev, > > > ACPIOSTInfoList ***list) > > > > AcpiGedState *s = ACPI_GED(adev); > > > > > > > > acpi_memory_ospm_status(&s->memhp_state, list); > > > > + acpi_cpu_ospm_status(&s->cpuhp_state, list); > > > > } > > > > > > > > static void acpi_ged_send_event(AcpiDeviceIf *adev, > AcpiEventStatusBits > > > ev) > > > > @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf > *adev, > > > AcpiEventStatusBits ev) > > > > sel = ACPI_GED_PWR_DOWN_EVT; > > > > } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { > > > > sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; > > > > + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { > > > > + sel = ACPI_GED_CPU_HOTPLUG_EVT; > > > > } else { > > > > /* Unknown event. Return without generating interrupt. */ > > > > warn_report("GED: Unsupported event %d. No irq injected", > ev); > > > > -- > > > > 2.34.1
Hi Michael S. Tsirkin : > On Tue, Sep 26, 2023 at 11:37:38AM +0000, Salil Mehta wrote: >>> From: Michael S. Tsirkin <mst@redhat.com> >>> Sent: Tuesday, September 26, 2023 12:02 PM >>> To: Salil Mehta <salil.mehta@huawei.com> >>> Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org; 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; >>> david@redhat.com; philmd@linaro.org; eric.auger@redhat.com; >>> will@kernel.org; ardb@kernel.org; oliver.upton@linux.dev; >>> pbonzini@redhat.com; gshan@redhat.com; rafael@kernel.org; >>> borntraeger@linux.ibm.com; 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 >>> Subject: Re: [PATCH RFC V2 24/37] hw/acpi: Update ACPI GED framework to >>> support vCPU Hotplug >>> >>> On Tue, Sep 26, 2023 at 11:04:23AM +0100, Salil Mehta wrote: >>>> ACPI GED shall be used to convey to the guest kernel about any CPU hot- >>> (un)plug >>>> events. Therefore, existing ACPI GED framework inside QEMU needs to be >>> enhanced >>>> to support CPU hotplug state and events. >>>> >>>> Co-developed-by: Salil Mehta <salil.mehta@huawei.com> >>> Co-developed with yourself? >>> >>> didn't you co-develop this with xianglai li? >> No, our effort is quite old ARM patch-set existed since the year 2020 >> without any change. Please check the original patch-set here: >> >> https://lore.kernel.org/qemu-devel/20200613213629.21984-11-salil.mehta@huawei.com/ >> >> >> To be fair to the authors, it will not be right to add another SOB here. >> > I see. And what's the difference with patches that xianglai li posted? > Are they both rebases of the same old patch then? > The two patches in front of me in the patch I sent were indeed Salil Mehta's patches from rebase, which were explained in the cover letter of my patch. I apologize for any misunderstanding this may have caused. Thanks, Xianglai. >>> Just include his S.O.B then, and drop the non-standard Co-developed-by. >> Co-developed-by Tag has been added to ensure main authors of the patch >> get highlighted clearly. > I think I don't know the patch provenance at this point. > >>> >>> >>>> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> >>>> 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> >>> >>> >>>> --- >>>> hw/acpi/generic_event_device.c | 10 ++++++++++ >>>> 1 file changed, 10 insertions(+) >>>> >>>> diff --git a/hw/acpi/generic_event_device.c >>> b/hw/acpi/generic_event_device.c >>>> index ad252e6a91..0266733a54 100644 >>>> --- a/hw/acpi/generic_event_device.c >>>> +++ b/hw/acpi/generic_event_device.c >>>> @@ -12,6 +12,7 @@ >>>> #include "qemu/osdep.h" >>>> #include "qapi/error.h" >>>> #include "hw/acpi/acpi.h" >>>> +#include "hw/acpi/cpu.h" >>>> #include "hw/acpi/generic_event_device.h" >>>> #include "hw/irq.h" >>>> #include "hw/mem/pc-dimm.h" >>>> @@ -239,6 +240,8 @@ static void acpi_ged_device_plug_cb(HotplugHandler >>> *hotplug_dev, >>>> } else { >>>> acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, >>> errp); >>>> } >>>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { >>>> + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); >>>> } else { >>>> error_setg(errp, "virt: device plug request for unsupported >>> device" >>>> " type: %s", object_get_typename(OBJECT(dev))); >>>> @@ -253,6 +256,8 @@ static void acpi_ged_unplug_request_cb(HotplugHandler >>> *hotplug_dev, >>>> if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && >>>> !(object_dynamic_cast(OBJECT(dev), >>> TYPE_NVDIMM)))) { >>>> acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, dev, >>> errp); >>>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { >>>> + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, dev, >>> errp); >>>> } else { >>>> error_setg(errp, "acpi: device unplug request for unsupported >>> device" >>>> " type: %s", object_get_typename(OBJECT(dev))); >>>> @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler >>> *hotplug_dev, >>>> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { >>>> acpi_memory_unplug_cb(&s->memhp_state, dev, errp); >>>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { >>>> + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); >>>> } else { >>>> error_setg(errp, "acpi: device unplug for unsupported device" >>>> " type: %s", object_get_typename(OBJECT(dev))); >>>> @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf *adev, >>> ACPIOSTInfoList ***list) >>>> AcpiGedState *s = ACPI_GED(adev); >>>> >>>> acpi_memory_ospm_status(&s->memhp_state, list); >>>> + acpi_cpu_ospm_status(&s->cpuhp_state, list); >>>> } >>>> >>>> static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits >>> ev) >>>> @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, >>> AcpiEventStatusBits ev) >>>> sel = ACPI_GED_PWR_DOWN_EVT; >>>> } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { >>>> sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; >>>> + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { >>>> + sel = ACPI_GED_CPU_HOTPLUG_EVT; >>>> } else { >>>> /* Unknown event. Return without generating interrupt. */ >>>> warn_report("GED: Unsupported event %d. No irq injected", ev); >>>> -- >>>> 2.34.1
diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index ad252e6a91..0266733a54 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/acpi/acpi.h" +#include "hw/acpi/cpu.h" #include "hw/acpi/generic_event_device.h" #include "hw/irq.h" #include "hw/mem/pc-dimm.h" @@ -239,6 +240,8 @@ static void acpi_ged_device_plug_cb(HotplugHandler *hotplug_dev, } else { acpi_memory_plug_cb(hotplug_dev, &s->memhp_state, dev, errp); } + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + acpi_cpu_plug_cb(hotplug_dev, &s->cpuhp_state, dev, errp); } else { error_setg(errp, "virt: device plug request for unsupported device" " type: %s", object_get_typename(OBJECT(dev))); @@ -253,6 +256,8 @@ static void acpi_ged_unplug_request_cb(HotplugHandler *hotplug_dev, if ((object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && !(object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM)))) { acpi_memory_unplug_request_cb(hotplug_dev, &s->memhp_state, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + acpi_cpu_unplug_request_cb(hotplug_dev, &s->cpuhp_state, dev, errp); } else { error_setg(errp, "acpi: device unplug request for unsupported device" " type: %s", object_get_typename(OBJECT(dev))); @@ -266,6 +271,8 @@ static void acpi_ged_unplug_cb(HotplugHandler *hotplug_dev, if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) { acpi_memory_unplug_cb(&s->memhp_state, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) { + acpi_cpu_unplug_cb(&s->cpuhp_state, dev, errp); } else { error_setg(errp, "acpi: device unplug for unsupported device" " type: %s", object_get_typename(OBJECT(dev))); @@ -277,6 +284,7 @@ static void acpi_ged_ospm_status(AcpiDeviceIf *adev, ACPIOSTInfoList ***list) AcpiGedState *s = ACPI_GED(adev); acpi_memory_ospm_status(&s->memhp_state, list); + acpi_cpu_ospm_status(&s->cpuhp_state, list); } static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) @@ -291,6 +299,8 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev) sel = ACPI_GED_PWR_DOWN_EVT; } else if (ev & ACPI_NVDIMM_HOTPLUG_STATUS) { sel = ACPI_GED_NVDIMM_HOTPLUG_EVT; + } else if (ev & ACPI_CPU_HOTPLUG_STATUS) { + sel = ACPI_GED_CPU_HOTPLUG_EVT; } else { /* Unknown event. Return without generating interrupt. */ warn_report("GED: Unsupported event %d. No irq injected", ev);