mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
acpi: add hardware implementation for memory hot unplug
- implements QEMU hardware part of memory hot unplug protocol described at "docs/spec/acpi_mem_hotplug.txt" - handles memory remove notification event - handles device eject notification Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
660e8ec700
commit
c06b2ffb02
8 changed files with 61 additions and 5 deletions
|
|
@ -2,6 +2,7 @@
|
|||
#include "hw/acpi/pc-hotplug.h"
|
||||
#include "hw/mem/pc-dimm.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/qdev-core.h"
|
||||
#include "trace.h"
|
||||
#include "qapi-event.h"
|
||||
|
||||
|
|
@ -91,6 +92,8 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
|||
MemHotplugState *mem_st = opaque;
|
||||
MemStatus *mdev;
|
||||
ACPIOSTInfo *info;
|
||||
DeviceState *dev = NULL;
|
||||
HotplugHandler *hotplug_ctrl = NULL;
|
||||
|
||||
if (!mem_st->dev_count) {
|
||||
return;
|
||||
|
|
@ -128,13 +131,29 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
|||
qapi_event_send_acpi_device_ost(info, &error_abort);
|
||||
qapi_free_ACPIOSTInfo(info);
|
||||
break;
|
||||
case 0x14:
|
||||
case 0x14: /* set is_* fields */
|
||||
mdev = &mem_st->devs[mem_st->selector];
|
||||
if (data & 2) { /* clear insert event */
|
||||
mdev->is_inserting = false;
|
||||
trace_mhp_acpi_clear_insert_evt(mem_st->selector);
|
||||
} else if (data & 4) {
|
||||
mdev->is_removing = false;
|
||||
trace_mhp_acpi_clear_remove_evt(mem_st->selector);
|
||||
} else if (data & 8) {
|
||||
if (!mdev->is_enabled) {
|
||||
trace_mhp_acpi_ejecting_invalid_slot(mem_st->selector);
|
||||
break;
|
||||
}
|
||||
|
||||
dev = DEVICE(mdev->dimm);
|
||||
hotplug_ctrl = qdev_get_hotplug_handler(dev);
|
||||
/* call pc-dimm unplug cb */
|
||||
hotplug_handler_unplug(hotplug_ctrl, dev, NULL);
|
||||
trace_mhp_acpi_pc_dimm_deleted(mem_st->selector);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue