Skip to content

Commit

Permalink
acpi:piix4: add memory hotplug handling
Browse files Browse the repository at this point in the history
Add memory hotplug initialization/handling to PIIX4_PM device
and enable it by default for post 2.0 machine types

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

MST: resolve conflict in pc.h
  • Loading branch information
Igor Mammedov authored and mstsirkin committed Jun 19, 2014
1 parent f1adc36 commit 3477432
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
15 changes: 14 additions & 1 deletion hw/acpi/piix4.c
Expand Up @@ -33,6 +33,8 @@
#include "hw/acpi/pcihp.h"
#include "hw/acpi/cpu_hotplug.h"
#include "hw/hotplug.h"
#include "hw/mem/pc-dimm.h"
#include "hw/acpi/memory_hotplug.h"

//#define DEBUG

Expand Down Expand Up @@ -81,6 +83,8 @@ typedef struct PIIX4PMState {

AcpiCpuHotplug gpe_cpu;
Notifier cpu_added_notifier;

MemHotplugState acpi_memory_hotplug;
} PIIX4PMState;

#define TYPE_PIIX4_PM "PIIX4_PM"
Expand Down Expand Up @@ -313,7 +317,10 @@ static void piix4_device_plug_cb(HotplugHandler *hotplug_dev,
{
PIIX4PMState *s = PIIX4_PM(hotplug_dev);

if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
if (s->acpi_memory_hotplug.is_enabled &&
object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
acpi_memory_plug_cb(&s->ar, s->irq, &s->acpi_memory_hotplug, dev, errp);
} else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
acpi_pcihp_device_plug_cb(&s->ar, s->irq, &s->acpi_pci_hotplug, dev,
errp);
} else {
Expand Down Expand Up @@ -531,6 +538,10 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion *parent,
PIIX4_CPU_HOTPLUG_IO_BASE);
s->cpu_added_notifier.notify = piix4_cpu_added_req;
qemu_register_cpu_added_notifier(&s->cpu_added_notifier);

if (s->acpi_memory_hotplug.is_enabled) {
acpi_memory_hotplug_init(parent, OBJECT(s), &s->acpi_memory_hotplug);
}
}

static Property piix4_pm_properties[] = {
Expand All @@ -540,6 +551,8 @@ static Property piix4_pm_properties[] = {
DEFINE_PROP_UINT8(ACPI_PM_PROP_S4_VAL, PIIX4PMState, s4_val, 2),
DEFINE_PROP_BOOL("acpi-pci-hotplug-with-bridge-support", PIIX4PMState,
use_acpi_pci_hotplug, true),
DEFINE_PROP_BOOL("memory-hotplug-support", PIIX4PMState,
acpi_memory_hotplug.is_enabled, true),
DEFINE_PROP_END_OF_LIST(),
};

Expand Down
1 change: 1 addition & 0 deletions include/hw/acpi/memory_hotplug.h
Expand Up @@ -15,6 +15,7 @@ typedef struct MemStatus {
} MemStatus;

typedef struct MemHotplugState {
bool is_enabled; /* true if memory hotplug is supported */
MemoryRegion io;
uint32_t selector;
uint32_t dev_count;
Expand Down
8 changes: 7 additions & 1 deletion include/hw/i386/pc.h
Expand Up @@ -310,11 +310,17 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
PC_Q35_COMPAT_1_5

#define PC_COMPAT_2_0 \
{\
.driver = "PIIX4_PM",\
.property = "memory-hotplug-support",\
.value = "off",\
},\
{\
.driver = "apic",\
.property = "version",\
.value = stringify(0x11),\
},{\
},\
{\
.driver = "nec-usb-xhci",\
.property = "superspeed-ports-first",\
.value = "off",\
Expand Down

0 comments on commit 3477432

Please sign in to comment.