This series is an attempt to provide device memory hotplug support on ARM virt platform. This is based on Eric's recent works here[1] and carries some of the pc-dimm related patches dropped from his series. The kernel support for arm64 memory hot add was added recently by Robin and hence the guest kernel should be => 5.0-rc1. NVDIM support is not included currently as we still have an unresolved issue while hot adding NVDIMM[2]. However NVDIMM cold plug patches can be included, but not done for now, for keeping it simple. This makes use of GED device to sent hotplug ACPI events to the Guest. GED code is based on Nemu. Thanks to the efforts of Samuel and Sebastien to add the hardware-reduced support to Nemu using GED device[3]. (Please shout if I got the author/signed-off wrong for those patches or missed any names). This is sanity tested on a HiSilicon ARM64 platform and appreciate any further testing. Note: Attempted adding dimm_pxm test case to bios-tables-test for arm/virt. But noticed the issue decribed here[5]. This is under investigation now. upstream url: https://patchwork.kernel.org/cover/11150345/ Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
73 lines
2.6 KiB
Diff
73 lines
2.6 KiB
Diff
From e6b1fd7bfbfe116e9d5df590f7069336c1eb1983 Mon Sep 17 00:00:00 2001
|
|
From: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|
Date: Wed, 18 Sep 2019 14:06:29 +0100
|
|
Subject: [PATCH] hw/arm: Factor out powerdown notifier from GPIO
|
|
|
|
This is in preparation of using GED device for
|
|
system_powerdown event. Make the powerdown notifier
|
|
registration independent of create_gpio() fn.
|
|
|
|
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|
Reviewed-by: Eric Auger <eric.auger@redhat.com>
|
|
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
|
|
Message-Id: <20190918130633.4872-8-shameerali.kolothum.thodi@huawei.com>
|
|
Acked-by: Peter Maydell <peter.maydell@linaro.org>
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
---
|
|
hw/arm/virt.c | 12 ++++--------
|
|
include/hw/arm/virt.h | 1 +
|
|
2 files changed, 5 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
|
index ab33cce4b3..aaefa5578e 100644
|
|
--- a/hw/arm/virt.c
|
|
+++ b/hw/arm/virt.c
|
|
@@ -910,10 +910,6 @@ static void virt_powerdown_req(Notifier *n, void *opaque)
|
|
qemu_set_irq(qdev_get_gpio_in(gpio_key_dev, 0), 1);
|
|
}
|
|
|
|
-static Notifier virt_system_powerdown_notifier = {
|
|
- .notify = virt_powerdown_req
|
|
-};
|
|
-
|
|
static void create_gpio(const VirtMachineState *vms, qemu_irq *pic)
|
|
{
|
|
char *nodename;
|
|
@@ -954,10 +950,6 @@ static void create_gpio(const VirtMachineState *vms, qemu_irq *pic)
|
|
KEY_POWER);
|
|
qemu_fdt_setprop_cells(vms->fdt, "/gpio-keys/poweroff",
|
|
"gpios", phandle, 3, 0);
|
|
-
|
|
- /* connect powerdown request */
|
|
- qemu_register_powerdown_notifier(&virt_system_powerdown_notifier);
|
|
-
|
|
g_free(nodename);
|
|
}
|
|
|
|
@@ -1856,6 +1848,10 @@ static void machvirt_init(MachineState *machine)
|
|
vms->acpi_dev = create_acpi_ged(vms, pic);
|
|
}
|
|
|
|
+ /* connect powerdown request */
|
|
+ vms->powerdown_notifier.notify = virt_powerdown_req;
|
|
+ qemu_register_powerdown_notifier(&vms->powerdown_notifier);
|
|
+
|
|
/* Create mmio transports, so the user can create virtio backends
|
|
* (which will be automatically plugged in to the transports). If
|
|
* no backend is created the transport will just sit harmlessly idle.
|
|
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
|
|
index 0350285136..dcceb9c615 100644
|
|
--- a/include/hw/arm/virt.h
|
|
+++ b/include/hw/arm/virt.h
|
|
@@ -139,6 +139,7 @@ typedef struct {
|
|
int psci_conduit;
|
|
hwaddr highest_gpa;
|
|
DeviceState *acpi_dev;
|
|
+ Notifier powerdown_notifier;
|
|
} VirtMachineState;
|
|
|
|
#define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM : VIRT_PCIE_ECAM)
|
|
--
|
|
2.19.1
|