From: Igor Mammedov <imammedo@redhat.com>
To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
Cc: "peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"sameo@linux.intel.com" <sameo@linux.intel.com>,
"shannon.zhaosl@gmail.com" <shannon.zhaosl@gmail.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Linuxarm <linuxarm@huawei.com>,
"eric.auger@redhat.com" <eric.auger@redhat.com>,
"qemu-arm@nongnu.org" <qemu-arm@nongnu.org>,
"xuwei \(O\)" <xuwei5@huawei.com>,
"sebastien.boeuf@intel.com" <sebastien.boeuf@intel.com>
Subject: Re: [Qemu-devel] [PATCH v3 05/10] hw/arm/virt: Add ACPI support for device memory cold-plug
Date: Tue, 2 Apr 2019 09:22:06 +0200 [thread overview]
Message-ID: <20190402092206.2c3188a6@redhat.com> (raw)
In-Reply-To: <5FC3163CFD30C246ABAA99954A238FA8393477CA@lhreml524-mbb.china.huawei.com>
On Mon, 1 Apr 2019 16:24:40 +0000
Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com> wrote:
> > -----Original Message-----
> > From: Igor Mammedov [mailto:imammedo@redhat.com]
> > Sent: 01 April 2019 14:34
> > To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org;
> > eric.auger@redhat.com; peter.maydell@linaro.org;
> > shannon.zhaosl@gmail.com; sameo@linux.intel.com;
> > sebastien.boeuf@intel.com; Linuxarm <linuxarm@huawei.com>; xuwei (O)
> > <xuwei5@huawei.com>
> > Subject: Re: [PATCH v3 05/10] hw/arm/virt: Add ACPI support for device
> > memory cold-plug
> >
> > On Thu, 21 Mar 2019 10:47:40 +0000
> > Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> wrote:
> >
> > > This adds support to build the aml code so that Guest(ACPI boot)
> > > can see the cold-plugged device memory. Memory cold plug support
> > > with DT boot is not yet enabled.
> > >
> > > Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> > > ---
> > > default-configs/arm-softmmu.mak | 2 ++
> > > hw/acpi/generic_event_device.c | 23
> > +++++++++++++++++++++++
> > > hw/arm/virt-acpi-build.c | 9 +++++++++
> > > hw/arm/virt.c | 23
> > +++++++++++++++++++++++
> > > include/hw/acpi/generic_event_device.h | 5 +++++
> > > include/hw/arm/virt.h | 2 ++
> > > 6 files changed, 64 insertions(+)
> > >
> > > diff --git a/default-configs/arm-softmmu.mak
> > b/default-configs/arm-softmmu.mak
> > > index 795cb89..6db444e 100644
> > > --- a/default-configs/arm-softmmu.mak
> > > +++ b/default-configs/arm-softmmu.mak
> > > @@ -162,3 +162,5 @@ CONFIG_LSI_SCSI_PCI=y
> > >
> > > CONFIG_MEM_DEVICE=y
> > > CONFIG_DIMM=y
> > > +CONFIG_ACPI_MEMORY_HOTPLUG=y
> > > +CONFIG_ACPI_HW_REDUCED=y
> > > diff --git a/hw/acpi/generic_event_device.c
> > b/hw/acpi/generic_event_device.c
> > > index b21a551..0b32fc9 100644
> > > --- a/hw/acpi/generic_event_device.c
> > > +++ b/hw/acpi/generic_event_device.c
> > > @@ -16,13 +16,26 @@
> > > */
> > >
> > > #include "qemu/osdep.h"
> > > +#include "qapi/error.h"
> > > +#include "exec/address-spaces.h"
> > > #include "hw/sysbus.h"
> > > #include "hw/acpi/acpi.h"
> > > #include "hw/acpi/generic_event_device.h"
> > > +#include "hw/mem/pc-dimm.h"
> > >
> > > static void virt_device_plug_cb(HotplugHandler *hotplug_dev,
> > > DeviceState *dev, Error **errp)
> > > {
> > > + VirtAcpiState *s = VIRT_ACPI(hotplug_dev);
> > > +
> > > + if (s->memhp_state.is_enabled &&
> > > + object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> > > + acpi_memory_plug_cb(hotplug_dev, &s->memhp_state,
> > > + dev, errp);
> > > + } else {
> > > + error_setg(errp, "virt: device plug request for unsupported
> > device"
> > > + " type: %s", object_get_typename(OBJECT(dev)));
> > > + }
> > > }
> > >
> > > static void virt_send_ged(AcpiDeviceIf *adev, AcpiEventStatusBits ev)
> > > @@ -31,9 +44,19 @@ static void virt_send_ged(AcpiDeviceIf *adev,
> > AcpiEventStatusBits ev)
> > >
> > > static void virt_device_realize(DeviceState *dev, Error **errp)
> > > {
> > > + VirtAcpiState *s = VIRT_ACPI(dev);
> > > +
> > > + if (s->memhp_state.is_enabled) {
> > > + acpi_memory_hotplug_init(get_system_memory(), OBJECT(dev),
> > > + &s->memhp_state,
> > > + s->memhp_base);
> > > + }
> > > }
> > >
> > > static Property virt_acpi_properties[] = {
> > > + DEFINE_PROP_UINT64("memhp_base", VirtAcpiState, memhp_base,
> > 0),
> >
> > it's preferred to use '-' in property names
>
> Ok.
>
> > > + DEFINE_PROP_BOOL("memory-hotplug-support", VirtAcpiState,
> > > + memhp_state.is_enabled, true),
> > > DEFINE_PROP_END_OF_LIST(),
> > > };
> > >
> > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > > index bf9c0bc..20d3c83 100644
> > > --- a/hw/arm/virt-acpi-build.c
> > > +++ b/hw/arm/virt-acpi-build.c
> > > @@ -40,6 +40,7 @@
> > > #include "hw/loader.h"
> > > #include "hw/hw.h"
> > > #include "hw/acpi/aml-build.h"
> > > +#include "hw/acpi/memory_hotplug.h"
> > > #include "hw/pci/pcie_host.h"
> > > #include "hw/pci/pci.h"
> > > #include "hw/arm/virt.h"
> > > @@ -49,6 +50,13 @@
> > > #define ARM_SPI_BASE 32
> > > #define ACPI_POWER_BUTTON_DEVICE "PWRB"
> > >
> > > +static void acpi_dsdt_add_memory_hotplug(Aml *scope, MachineState
> > *ms)
> > > +{
> > it's dummy wrapper that never will be reused,
> > I suggest to just inline contents at call site and drop wrapper.
>
> Ok. I will move it then.
>
> >
> > > + uint32_t nr_mem = ms->ram_slots;
> > > +
> > > + build_memory_hotplug_aml(scope, nr_mem, "\\_SB", NULL,
> > AML_SYSTEM_MEMORY);
> > > +}
> > > +
> > > static void acpi_dsdt_add_cpus(Aml *scope, int smp_cpus)
> > > {
> > > uint16_t i;
> > > @@ -740,6 +748,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
> > VirtMachineState *vms)
> > > * the RTC ACPI device at all when using UEFI.
> > > */
> > > scope = aml_scope("\\_SB");
> > > + acpi_dsdt_add_memory_hotplug(scope, MACHINE(vms));
> > > acpi_dsdt_add_cpus(scope, vms->smp_cpus);
> > > acpi_dsdt_add_uart(scope, &memmap[VIRT_UART],
> > > (irqmap[VIRT_UART] + ARM_SPI_BASE));
> > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> > > index d0ff20d..13db0e9 100644
> > > --- a/hw/arm/virt.c
> > > +++ b/hw/arm/virt.c
> > > @@ -133,6 +133,7 @@ static const MemMapEntry base_memmap[] = {
> > > [VIRT_GPIO] = { 0x09030000, 0x00001000 },
> > > [VIRT_SECURE_UART] = { 0x09040000, 0x00001000 },
> > > [VIRT_SMMU] = { 0x09050000, 0x00020000 },
> > > + [VIRT_PCDIMM_ACPI] = { 0x09070000, 0x00010000 },
> > ^^^^^^^^^^^
> > where from this magic number comes?
>
> I think the only requirement for size is >= MEMORY_HOTPLUG_IO_LEN(24).
> So may be 64K is bit too much, 4K might as well do the job.
>
> Or is it best to just use MEMORY_HOTPLUG_IO_LEN directly here?
4K is a waste for handling a handful bytes, so I'd go with
MEMORY_HOTPLUG_IO_LEN unless there is compelling reason for using
page size granularity.
>
> >
> > > [VIRT_MMIO] = { 0x0a000000, 0x00000200 },
> > > /* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that
> > size */
> > > [VIRT_PLATFORM_BUS] = { 0x0c000000, 0x02000000 },
> > > @@ -516,6 +517,18 @@ static void fdt_add_pmu_nodes(const
> > VirtMachineState *vms)
> > > }
> > > }
> > >
> > > +static DeviceState *create_virt_acpi(VirtMachineState *vms)
> > > +{
> > > + DeviceState *dev;
> > > +
> > > + dev = qdev_create(NULL, "virt-acpi");
> > > + qdev_prop_set_uint64(dev, "memhp_base",
> > > + vms->memmap[VIRT_PCDIMM_ACPI].base);
> > > + qdev_init_nofail(dev);
> > > +
> > > + return dev;
> >
> > Probably no worth a wrapper either, since code is trivial and isn't reused
> > elsewhere.
>
> Ok, I will make it an inline then.
>
> Thanks,
> Shameer
>
> > > +}
> > > +
> > > static void create_its(VirtMachineState *vms, DeviceState *gicdev)
> > > {
> > > const char *itsclass = its_class_name();
> > > @@ -1644,6 +1657,8 @@ static void machvirt_init(MachineState *machine)
> > >
> > > create_platform_bus(vms, pic);
> > >
> > > + vms->acpi = create_virt_acpi(vms);
> > > +
> > > vms->bootinfo.ram_size = machine->ram_size;
> > > vms->bootinfo.kernel_filename = machine->kernel_filename;
> > > vms->bootinfo.kernel_cmdline = machine->kernel_cmdline;
> > > @@ -1828,11 +1843,19 @@ static void
> > virt_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> > > static void virt_memory_plug(HotplugHandler *hotplug_dev,
> > > DeviceState *dev, Error **errp)
> > > {
> > > + HotplugHandlerClass *hhc;
> > > VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> > > Error *local_err = NULL;
> > >
> > > pc_dimm_plug(PC_DIMM(dev), MACHINE(vms), &local_err);
> > > + if (local_err) {
> > > + goto out;
> > > + }
> > > +
> > > + hhc = HOTPLUG_HANDLER_GET_CLASS(vms->acpi);
> > > + hhc->plug(HOTPLUG_HANDLER(vms->acpi), dev, &error_abort);
> > >
> > > +out:
> > > error_propagate(errp, local_err);
> > > }
> > >
> > > diff --git a/include/hw/acpi/generic_event_device.h
> > b/include/hw/acpi/generic_event_device.h
> > > index f314515..262ca7d 100644
> > > --- a/include/hw/acpi/generic_event_device.h
> > > +++ b/include/hw/acpi/generic_event_device.h
> > > @@ -18,12 +18,17 @@
> > > #ifndef HW_ACPI_GED_H
> > > #define HW_ACPI_GED_H
> > >
> > > +#include "hw/acpi/memory_hotplug.h"
> > > +
> > > #define TYPE_VIRT_ACPI "virt-acpi"
> > > #define VIRT_ACPI(obj) \
> > > OBJECT_CHECK(VirtAcpiState, (obj), TYPE_VIRT_ACPI)
> > >
> > > typedef struct VirtAcpiState {
> > > SysBusDevice parent_obj;
> > > + MemHotplugState memhp_state;
> > > + hwaddr memhp_base;
> > > } VirtAcpiState;
> > >
> > > +
> > > #endif
> > > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> > > index 507517c..c5e4c96 100644
> > > --- a/include/hw/arm/virt.h
> > > +++ b/include/hw/arm/virt.h
> > > @@ -77,6 +77,7 @@ enum {
> > > VIRT_GPIO,
> > > VIRT_SECURE_UART,
> > > VIRT_SECURE_MEM,
> > > + VIRT_PCDIMM_ACPI,
> > > VIRT_LOWMEMMAP_LAST,
> > > };
> > >
> > > @@ -132,6 +133,7 @@ typedef struct {
> > > uint32_t iommu_phandle;
> > > int psci_conduit;
> > > hwaddr highest_gpa;
> > > + DeviceState *acpi;
> > > } VirtMachineState;
> > >
> > > #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM :
> > VIRT_PCIE_ECAM)
>
WARNING: multiple messages have this Message-ID (diff)
From: Igor Mammedov <imammedo@redhat.com>
To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"qemu-arm@nongnu.org" <qemu-arm@nongnu.org>,
"eric.auger@redhat.com" <eric.auger@redhat.com>,
"peter.maydell@linaro.org" <peter.maydell@linaro.org>,
"shannon.zhaosl@gmail.com" <shannon.zhaosl@gmail.com>,
"sameo@linux.intel.com" <sameo@linux.intel.com>,
"sebastien.boeuf@intel.com" <sebastien.boeuf@intel.com>,
Linuxarm <linuxarm@huawei.com>, "xuwei (O)" <xuwei5@huawei.com>
Subject: Re: [Qemu-devel] [PATCH v3 05/10] hw/arm/virt: Add ACPI support for device memory cold-plug
Date: Tue, 2 Apr 2019 09:22:06 +0200 [thread overview]
Message-ID: <20190402092206.2c3188a6@redhat.com> (raw)
In-Reply-To: <5FC3163CFD30C246ABAA99954A238FA8393477CA@lhreml524-mbb.china.huawei.com>
On Mon, 1 Apr 2019 16:24:40 +0000
Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com> wrote:
> > -----Original Message-----
> > From: Igor Mammedov [mailto:imammedo@redhat.com]
> > Sent: 01 April 2019 14:34
> > To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> > Cc: qemu-devel@nongnu.org; qemu-arm@nongnu.org;
> > eric.auger@redhat.com; peter.maydell@linaro.org;
> > shannon.zhaosl@gmail.com; sameo@linux.intel.com;
> > sebastien.boeuf@intel.com; Linuxarm <linuxarm@huawei.com>; xuwei (O)
> > <xuwei5@huawei.com>
> > Subject: Re: [PATCH v3 05/10] hw/arm/virt: Add ACPI support for device
> > memory cold-plug
> >
> > On Thu, 21 Mar 2019 10:47:40 +0000
> > Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> wrote:
> >
> > > This adds support to build the aml code so that Guest(ACPI boot)
> > > can see the cold-plugged device memory. Memory cold plug support
> > > with DT boot is not yet enabled.
> > >
> > > Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> > > ---
> > > default-configs/arm-softmmu.mak | 2 ++
> > > hw/acpi/generic_event_device.c | 23
> > +++++++++++++++++++++++
> > > hw/arm/virt-acpi-build.c | 9 +++++++++
> > > hw/arm/virt.c | 23
> > +++++++++++++++++++++++
> > > include/hw/acpi/generic_event_device.h | 5 +++++
> > > include/hw/arm/virt.h | 2 ++
> > > 6 files changed, 64 insertions(+)
> > >
> > > diff --git a/default-configs/arm-softmmu.mak
> > b/default-configs/arm-softmmu.mak
> > > index 795cb89..6db444e 100644
> > > --- a/default-configs/arm-softmmu.mak
> > > +++ b/default-configs/arm-softmmu.mak
> > > @@ -162,3 +162,5 @@ CONFIG_LSI_SCSI_PCI=y
> > >
> > > CONFIG_MEM_DEVICE=y
> > > CONFIG_DIMM=y
> > > +CONFIG_ACPI_MEMORY_HOTPLUG=y
> > > +CONFIG_ACPI_HW_REDUCED=y
> > > diff --git a/hw/acpi/generic_event_device.c
> > b/hw/acpi/generic_event_device.c
> > > index b21a551..0b32fc9 100644
> > > --- a/hw/acpi/generic_event_device.c
> > > +++ b/hw/acpi/generic_event_device.c
> > > @@ -16,13 +16,26 @@
> > > */
> > >
> > > #include "qemu/osdep.h"
> > > +#include "qapi/error.h"
> > > +#include "exec/address-spaces.h"
> > > #include "hw/sysbus.h"
> > > #include "hw/acpi/acpi.h"
> > > #include "hw/acpi/generic_event_device.h"
> > > +#include "hw/mem/pc-dimm.h"
> > >
> > > static void virt_device_plug_cb(HotplugHandler *hotplug_dev,
> > > DeviceState *dev, Error **errp)
> > > {
> > > + VirtAcpiState *s = VIRT_ACPI(hotplug_dev);
> > > +
> > > + if (s->memhp_state.is_enabled &&
> > > + object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> > > + acpi_memory_plug_cb(hotplug_dev, &s->memhp_state,
> > > + dev, errp);
> > > + } else {
> > > + error_setg(errp, "virt: device plug request for unsupported
> > device"
> > > + " type: %s", object_get_typename(OBJECT(dev)));
> > > + }
> > > }
> > >
> > > static void virt_send_ged(AcpiDeviceIf *adev, AcpiEventStatusBits ev)
> > > @@ -31,9 +44,19 @@ static void virt_send_ged(AcpiDeviceIf *adev,
> > AcpiEventStatusBits ev)
> > >
> > > static void virt_device_realize(DeviceState *dev, Error **errp)
> > > {
> > > + VirtAcpiState *s = VIRT_ACPI(dev);
> > > +
> > > + if (s->memhp_state.is_enabled) {
> > > + acpi_memory_hotplug_init(get_system_memory(), OBJECT(dev),
> > > + &s->memhp_state,
> > > + s->memhp_base);
> > > + }
> > > }
> > >
> > > static Property virt_acpi_properties[] = {
> > > + DEFINE_PROP_UINT64("memhp_base", VirtAcpiState, memhp_base,
> > 0),
> >
> > it's preferred to use '-' in property names
>
> Ok.
>
> > > + DEFINE_PROP_BOOL("memory-hotplug-support", VirtAcpiState,
> > > + memhp_state.is_enabled, true),
> > > DEFINE_PROP_END_OF_LIST(),
> > > };
> > >
> > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > > index bf9c0bc..20d3c83 100644
> > > --- a/hw/arm/virt-acpi-build.c
> > > +++ b/hw/arm/virt-acpi-build.c
> > > @@ -40,6 +40,7 @@
> > > #include "hw/loader.h"
> > > #include "hw/hw.h"
> > > #include "hw/acpi/aml-build.h"
> > > +#include "hw/acpi/memory_hotplug.h"
> > > #include "hw/pci/pcie_host.h"
> > > #include "hw/pci/pci.h"
> > > #include "hw/arm/virt.h"
> > > @@ -49,6 +50,13 @@
> > > #define ARM_SPI_BASE 32
> > > #define ACPI_POWER_BUTTON_DEVICE "PWRB"
> > >
> > > +static void acpi_dsdt_add_memory_hotplug(Aml *scope, MachineState
> > *ms)
> > > +{
> > it's dummy wrapper that never will be reused,
> > I suggest to just inline contents at call site and drop wrapper.
>
> Ok. I will move it then.
>
> >
> > > + uint32_t nr_mem = ms->ram_slots;
> > > +
> > > + build_memory_hotplug_aml(scope, nr_mem, "\\_SB", NULL,
> > AML_SYSTEM_MEMORY);
> > > +}
> > > +
> > > static void acpi_dsdt_add_cpus(Aml *scope, int smp_cpus)
> > > {
> > > uint16_t i;
> > > @@ -740,6 +748,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
> > VirtMachineState *vms)
> > > * the RTC ACPI device at all when using UEFI.
> > > */
> > > scope = aml_scope("\\_SB");
> > > + acpi_dsdt_add_memory_hotplug(scope, MACHINE(vms));
> > > acpi_dsdt_add_cpus(scope, vms->smp_cpus);
> > > acpi_dsdt_add_uart(scope, &memmap[VIRT_UART],
> > > (irqmap[VIRT_UART] + ARM_SPI_BASE));
> > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> > > index d0ff20d..13db0e9 100644
> > > --- a/hw/arm/virt.c
> > > +++ b/hw/arm/virt.c
> > > @@ -133,6 +133,7 @@ static const MemMapEntry base_memmap[] = {
> > > [VIRT_GPIO] = { 0x09030000, 0x00001000 },
> > > [VIRT_SECURE_UART] = { 0x09040000, 0x00001000 },
> > > [VIRT_SMMU] = { 0x09050000, 0x00020000 },
> > > + [VIRT_PCDIMM_ACPI] = { 0x09070000, 0x00010000 },
> > ^^^^^^^^^^^
> > where from this magic number comes?
>
> I think the only requirement for size is >= MEMORY_HOTPLUG_IO_LEN(24).
> So may be 64K is bit too much, 4K might as well do the job.
>
> Or is it best to just use MEMORY_HOTPLUG_IO_LEN directly here?
4K is a waste for handling a handful bytes, so I'd go with
MEMORY_HOTPLUG_IO_LEN unless there is compelling reason for using
page size granularity.
>
> >
> > > [VIRT_MMIO] = { 0x0a000000, 0x00000200 },
> > > /* ...repeating for a total of NUM_VIRTIO_TRANSPORTS, each of that
> > size */
> > > [VIRT_PLATFORM_BUS] = { 0x0c000000, 0x02000000 },
> > > @@ -516,6 +517,18 @@ static void fdt_add_pmu_nodes(const
> > VirtMachineState *vms)
> > > }
> > > }
> > >
> > > +static DeviceState *create_virt_acpi(VirtMachineState *vms)
> > > +{
> > > + DeviceState *dev;
> > > +
> > > + dev = qdev_create(NULL, "virt-acpi");
> > > + qdev_prop_set_uint64(dev, "memhp_base",
> > > + vms->memmap[VIRT_PCDIMM_ACPI].base);
> > > + qdev_init_nofail(dev);
> > > +
> > > + return dev;
> >
> > Probably no worth a wrapper either, since code is trivial and isn't reused
> > elsewhere.
>
> Ok, I will make it an inline then.
>
> Thanks,
> Shameer
>
> > > +}
> > > +
> > > static void create_its(VirtMachineState *vms, DeviceState *gicdev)
> > > {
> > > const char *itsclass = its_class_name();
> > > @@ -1644,6 +1657,8 @@ static void machvirt_init(MachineState *machine)
> > >
> > > create_platform_bus(vms, pic);
> > >
> > > + vms->acpi = create_virt_acpi(vms);
> > > +
> > > vms->bootinfo.ram_size = machine->ram_size;
> > > vms->bootinfo.kernel_filename = machine->kernel_filename;
> > > vms->bootinfo.kernel_cmdline = machine->kernel_cmdline;
> > > @@ -1828,11 +1843,19 @@ static void
> > virt_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> > > static void virt_memory_plug(HotplugHandler *hotplug_dev,
> > > DeviceState *dev, Error **errp)
> > > {
> > > + HotplugHandlerClass *hhc;
> > > VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
> > > Error *local_err = NULL;
> > >
> > > pc_dimm_plug(PC_DIMM(dev), MACHINE(vms), &local_err);
> > > + if (local_err) {
> > > + goto out;
> > > + }
> > > +
> > > + hhc = HOTPLUG_HANDLER_GET_CLASS(vms->acpi);
> > > + hhc->plug(HOTPLUG_HANDLER(vms->acpi), dev, &error_abort);
> > >
> > > +out:
> > > error_propagate(errp, local_err);
> > > }
> > >
> > > diff --git a/include/hw/acpi/generic_event_device.h
> > b/include/hw/acpi/generic_event_device.h
> > > index f314515..262ca7d 100644
> > > --- a/include/hw/acpi/generic_event_device.h
> > > +++ b/include/hw/acpi/generic_event_device.h
> > > @@ -18,12 +18,17 @@
> > > #ifndef HW_ACPI_GED_H
> > > #define HW_ACPI_GED_H
> > >
> > > +#include "hw/acpi/memory_hotplug.h"
> > > +
> > > #define TYPE_VIRT_ACPI "virt-acpi"
> > > #define VIRT_ACPI(obj) \
> > > OBJECT_CHECK(VirtAcpiState, (obj), TYPE_VIRT_ACPI)
> > >
> > > typedef struct VirtAcpiState {
> > > SysBusDevice parent_obj;
> > > + MemHotplugState memhp_state;
> > > + hwaddr memhp_base;
> > > } VirtAcpiState;
> > >
> > > +
> > > #endif
> > > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> > > index 507517c..c5e4c96 100644
> > > --- a/include/hw/arm/virt.h
> > > +++ b/include/hw/arm/virt.h
> > > @@ -77,6 +77,7 @@ enum {
> > > VIRT_GPIO,
> > > VIRT_SECURE_UART,
> > > VIRT_SECURE_MEM,
> > > + VIRT_PCDIMM_ACPI,
> > > VIRT_LOWMEMMAP_LAST,
> > > };
> > >
> > > @@ -132,6 +133,7 @@ typedef struct {
> > > uint32_t iommu_phandle;
> > > int psci_conduit;
> > > hwaddr highest_gpa;
> > > + DeviceState *acpi;
> > > } VirtMachineState;
> > >
> > > #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM :
> > VIRT_PCIE_ECAM)
>
next prev parent reply other threads:[~2019-04-02 7:35 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-21 10:47 [Qemu-arm] [PATCH v3 00/10] ARM virt: ACPI memory hotplug support Shameer Kolothum
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 01/10] hw/acpi: Make ACPI IO address space configurable Shameer Kolothum
2019-04-01 12:58 ` [Qemu-arm] " Igor Mammedov
2019-04-01 12:58 ` [Qemu-devel] " Igor Mammedov
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 02/10] hw/acpi: Do not create memory hotplug method when handler is not defined Shameer Kolothum
2019-03-28 14:14 ` [Qemu-arm] " Auger Eric
2019-03-21 10:47 ` [Qemu-arm] [PATCH v3 03/10] hw/arm/virt: Add virtual ACPI device Shameer Kolothum
2019-03-28 14:14 ` Auger Eric
2019-03-29 11:22 ` Shameerali Kolothum Thodi
2019-04-01 13:08 ` [Qemu-arm] [Qemu-devel] " Igor Mammedov
2019-04-01 13:08 ` Igor Mammedov
2019-04-01 14:21 ` Shameerali Kolothum Thodi
2019-04-01 14:21 ` Shameerali Kolothum Thodi
2019-04-02 6:31 ` [Qemu-arm] " Igor Mammedov
2019-04-02 6:31 ` Igor Mammedov
2019-03-21 10:47 ` [Qemu-arm] [PATCH v3 04/10] hw/arm/virt: Add memory hotplug framework Shameer Kolothum
2019-03-28 15:37 ` Auger Eric
2019-03-29 12:03 ` Shameerali Kolothum Thodi
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 05/10] hw/arm/virt: Add ACPI support for device memory cold-plug Shameer Kolothum
2019-03-29 9:31 ` [Qemu-arm] " Auger Eric
2019-03-29 10:54 ` Shameerali Kolothum Thodi
2019-04-01 13:43 ` Igor Mammedov
2019-04-01 13:43 ` [Qemu-devel] " Igor Mammedov
2019-04-01 14:51 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-01 14:51 ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-04-02 7:19 ` [Qemu-arm] " Igor Mammedov
2019-04-02 7:19 ` Igor Mammedov
2019-04-01 14:59 ` [Qemu-arm] " Auger Eric
2019-04-01 14:59 ` Auger Eric
2019-04-01 13:34 ` [Qemu-arm] " Igor Mammedov
2019-04-01 13:34 ` [Qemu-devel] " Igor Mammedov
2019-04-01 16:24 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-01 16:24 ` [Qemu-devel] " Shameerali Kolothum Thodi
2019-04-02 7:22 ` Igor Mammedov [this message]
2019-04-02 7:22 ` Igor Mammedov
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 06/10] hw/arm/virt-acpi-build: Add PC-DIMM in SRAT Shameer Kolothum
2019-03-21 10:47 ` [Qemu-arm] [PATCH v3 07/10] hw/arm/virt: Introduce opt-in feature "fdt" Shameer Kolothum
2019-03-29 9:31 ` Auger Eric
2019-03-29 9:41 ` Shameerali Kolothum Thodi
2019-03-29 13:41 ` Auger Eric
2019-03-29 9:59 ` Shameerali Kolothum Thodi
2019-03-29 13:12 ` Auger Eric
2019-03-29 13:14 ` Ard Biesheuvel
2019-03-29 13:56 ` [Qemu-arm] [Qemu-devel] " Auger Eric
2019-03-29 14:08 ` Shameerali Kolothum Thodi
2019-04-01 13:07 ` Laszlo Ersek
2019-04-01 13:07 ` Laszlo Ersek
2019-04-02 7:42 ` Igor Mammedov
2019-04-02 7:42 ` Igor Mammedov
2019-04-02 10:33 ` [Qemu-arm] " Laszlo Ersek
2019-04-02 10:33 ` Laszlo Ersek
2019-04-02 15:42 ` [Qemu-arm] " Auger Eric
2019-04-02 15:42 ` Auger Eric
2019-04-02 15:52 ` Laszlo Ersek
2019-04-02 15:52 ` Laszlo Ersek
2019-04-02 15:56 ` [Qemu-arm] " Laszlo Ersek
2019-04-02 15:56 ` Laszlo Ersek
2019-04-02 16:07 ` [Qemu-arm] " Auger Eric
2019-04-02 16:07 ` Auger Eric
2019-04-02 14:26 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-02 14:26 ` Shameerali Kolothum Thodi
2019-04-02 15:29 ` [Qemu-arm] " Auger Eric
2019-04-02 15:29 ` Auger Eric
2019-04-02 15:38 ` Laszlo Ersek
2019-04-02 15:38 ` Laszlo Ersek
2019-04-02 15:50 ` Auger Eric
2019-04-02 15:50 ` Auger Eric
2019-04-03 9:49 ` [Qemu-arm] " Igor Mammedov
2019-04-03 9:49 ` Igor Mammedov
2019-04-03 12:10 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-03 12:10 ` Shameerali Kolothum Thodi
2019-04-03 13:29 ` [Qemu-arm] " Laszlo Ersek
2019-04-03 13:29 ` Laszlo Ersek
2019-04-03 16:25 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-03 16:25 ` Shameerali Kolothum Thodi
2019-04-08 8:11 ` [Qemu-arm] " Igor Mammedov
2019-04-08 8:11 ` Igor Mammedov
2019-04-08 8:11 ` Igor Mammedov
2019-04-09 10:43 ` [Qemu-arm] " Shameerali Kolothum Thodi
2019-04-09 10:43 ` Shameerali Kolothum Thodi
2019-04-09 10:43 ` Shameerali Kolothum Thodi
2019-04-03 13:19 ` [Qemu-arm] " Laszlo Ersek
2019-04-03 13:19 ` Laszlo Ersek
2019-04-08 8:13 ` [Qemu-arm] " Igor Mammedov
2019-04-08 8:13 ` Igor Mammedov
2019-04-08 8:13 ` Igor Mammedov
2019-04-02 8:39 ` [Qemu-arm] " Peter Maydell
2019-04-02 8:39 ` Peter Maydell
2019-03-21 10:47 ` [Qemu-arm] [PATCH v3 08/10] hw/arm/boot: Expose the PC-DIMM nodes in the DT Shameer Kolothum
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 09/10] hw/acpi: Add ACPI Generic Event Device Support Shameer Kolothum
2019-03-29 13:09 ` [Qemu-arm] " Auger Eric
2019-03-29 13:44 ` Shameerali Kolothum Thodi
2019-03-21 10:47 ` [Qemu-devel] [PATCH v3 10/10] hw/arm/virt: Init GED device and enable memory hotplug Shameer Kolothum
2019-03-29 14:16 ` [Qemu-arm] " Auger Eric
2019-03-21 11:06 ` [Qemu-arm] [Qemu-devel] [PATCH v3 00/10] ARM virt: ACPI memory hotplug support no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190402092206.2c3188a6@redhat.com \
--to=imammedo@redhat.com \
--cc=eric.auger@redhat.com \
--cc=linuxarm@huawei.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sameo@linux.intel.com \
--cc=sebastien.boeuf@intel.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=shannon.zhaosl@gmail.com \
--cc=xuwei5@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.