Discussion:
[Qemu-devel] [PULL 01/33] spapr: Provide an error message when migration fails due to htab_shift mismatch
David Gibson
2015-09-21 01:05:56 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Include an error message when migration fails due to mismatch in
htab_shift values at source and target. This should provide a bit more
verbose message in addition to the current migration failure message
that reads like:

qemu-system-ppc64: error while loading state for instance 0x0 of device 'spapr/htab'

After this patch, the failure message will look like this:

qemu-system-ppc64: htab_shift mismatch: source 29 target 24
qemu-system-ppc64: error while loading state for instance 0x0 of device 'spapr/htab'

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 05926a3..dd58eb4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1329,6 +1329,8 @@ static int htab_load(QEMUFile *f, void *opaque, int version_id)
if (section_hdr) {
/* First section, just the hash shift */
if (spapr->htab_shift != section_hdr) {
+ error_report("htab_shift mismatch: source %d target %d",
+ section_hdr, spapr->htab_shift);
return -EINVAL;
}
return 0;
--
2.4.3
David Gibson
2015-09-21 01:06:01 UTC
Permalink
From: Sam Bobroff <***@au1.ibm.com>

Improve the SPLPAR Characteristics information:

Add MaxPlatProcs: set to max_cpus, the maximum CPUs that could be
addded to the system.
Add DesMem: set to the initial memory of the system.
Add DesProcs: set to smp_cpus, the inital number of CPUs in the
system.

These tokens and values are specified by PAPR.

Signed-off-by: Sam Bobroff <***@au1.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_rtas.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 9869bc9..5cbf9a0 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -34,6 +34,7 @@
#include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_vio.h"
#include "qapi-event.h"
+#include "hw/boards.h"

#include <libfdt.h>
#include "hw/ppc/spapr_drc.h"
@@ -240,8 +241,14 @@ static void rtas_ibm_get_system_parameter(PowerPCCPU *cpu,

switch (parameter) {
case RTAS_SYSPARM_SPLPAR_CHARACTERISTICS: {
- char *param_val = g_strdup_printf("MaxEntCap=%d,MaxPlatProcs=%d",
- max_cpus, smp_cpus);
+ char *param_val = g_strdup_printf("MaxEntCap=%d,"
+ "DesMem=%llu,"
+ "DesProcs=%d,"
+ "MaxPlatProcs=%d",
+ max_cpus,
+ current_machine->ram_size / M_BYTE,
+ smp_cpus,
+ max_cpus);
rtas_st_buffer(buffer, length, (uint8_t *)param_val, strlen(param_val));
g_free(param_val);
break;
--
2.4.3
David Gibson
2015-09-21 01:06:07 UTC
Permalink
From: Laurent Vivier <***@redhat.com>

When a device is hotplugged, attach() sets "configured" to
false, waiting an action from the OS to configure it and then
to call ibm,configure-connector. On ibm,configure-connector,
the hypervisor sets "configured" to true.

In case of coldplugged device, attach() sets "configured" to
false, but firmware and OS never call the ibm,configure-connector
in this case, so it remains set to false.

It could be harmless, but when we unplug a device, hypervisor
waits the device becomes configured because for it, a not configured
device is a device being configured, so it waits the end of configuration
to unplug it... and it never happens, so it is never unplugged.

This patch set by default coldplugged device to "configured=true",
hotplugged device to "configured=false".

Signed-off-by: Laurent Vivier <***@redhat.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_drc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index 8cbcf4d..9ce844a 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -310,7 +310,7 @@ static void attach(sPAPRDRConnector *drc, DeviceState *d, void *fdt,
drc->dev = d;
drc->fdt = fdt;
drc->fdt_start_offset = fdt_start_offset;
- drc->configured = false;
+ drc->configured = coldplug;

object_property_add_link(OBJECT(drc), "device",
object_get_typename(OBJECT(drc->dev)),
--
2.4.3
David Gibson
2015-09-21 01:05:57 UTC
Permalink
Add pseries-2.5 machine version.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
[Altered to merge before memory hotplug -- dwg]
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index dd58eb4..668879f 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1976,7 +1976,7 @@ static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data)

mc->desc = "pSeries Logical Partition (PAPR compliant) v2.4";
mc->alias = "pseries";
- mc->is_default = 1;
+ mc->is_default = 0;
}

static const TypeInfo spapr_machine_2_4_info = {
@@ -1985,6 +1985,22 @@ static const TypeInfo spapr_machine_2_4_info = {
.class_init = spapr_machine_2_4_class_init,
};

+static void spapr_machine_2_5_class_init(ObjectClass *oc, void *data)
+{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
+ mc->name = "pseries-2.5";
+ mc->desc = "pSeries Logical Partition (PAPR compliant) v2.5";
+ mc->alias = "pseries";
+ mc->is_default = 1;
+}
+
+static const TypeInfo spapr_machine_2_5_info = {
+ .name = TYPE_SPAPR_MACHINE "2.5",
+ .parent = TYPE_SPAPR_MACHINE,
+ .class_init = spapr_machine_2_5_class_init,
+};
+
static void spapr_machine_register_types(void)
{
type_register_static(&spapr_machine_info);
@@ -1992,6 +2008,7 @@ static void spapr_machine_register_types(void)
type_register_static(&spapr_machine_2_2_info);
type_register_static(&spapr_machine_2_3_info);
type_register_static(&spapr_machine_2_4_info);
+ type_register_static(&spapr_machine_2_5_info);
}

type_init(spapr_machine_register_types)
--
2.4.3
David Gibson
2015-09-21 01:05:59 UTC
Permalink
From: Sam Bobroff <***@au1.ibm.com>

QEMU is MSI-X capable and makes it available via ibm,change-msi, so
we should indicate this by adding /rtas/ibm,change-msix-capable to the
device tree.

This is specificed by PAPR.

Signed-off-by: Sam Bobroff <***@au1.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 2795b33..f91058c 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -432,6 +432,10 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
_FDT((fdt_property_cell(fdt, "rtas-event-scan-rate",
RTAS_EVENT_SCAN_RATE)));

+ if (msi_supported) {
+ _FDT((fdt_property(fdt, "ibm,change-msix-capable", NULL, 0)));
+ }
+
/*
* According to PAPR, rtas ibm,os-term does not guarantee a return
* back to the guest cpu.
--
2.4.3
David Gibson
2015-09-21 01:06:03 UTC
Permalink
The DRC_INDEX_ID_MASK macro does a left shift on ~0, which is a signed
quantity, and therefore undefined behaviour according to the C spec. In
particular this causes warnings from the clang sanitizer.

This fixes it by calculating the same mask without using ~0 (I think the
new method is a more common idiom for generating masks anyway). For good
measure I also use 1ULL to force the expression's type to unsigned long
long, which should be good for assigning to anything we're going to want
to.

Reported-by: Peter Maydell <***@linaro.org>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
Reviewed-by: Alexey Kardashevskiy <***@ozlabs.ru>
---
hw/ppc/spapr_drc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index ee87432..8cbcf4d 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -32,7 +32,7 @@

#define DRC_CONTAINER_PATH "/dr-connector"
#define DRC_INDEX_TYPE_SHIFT 28
-#define DRC_INDEX_ID_MASK (~(~0 << DRC_INDEX_TYPE_SHIFT))
+#define DRC_INDEX_ID_MASK ((1ULL << DRC_INDEX_TYPE_SHIFT) - 1)

static sPAPRDRConnectorTypeShift get_type_shift(sPAPRDRConnectorType type)
{
--
2.4.3
David Gibson
2015-09-21 01:06:21 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Currently PowerPC kernel doesn't allow hot-adding memory to memory-less
node, but instead will silently add the memory to the first node that has
some memory. This causes two unexpected behaviours for the user.

- Memory gets hotplugged to a different node than what the user specified.
- Since pc-dimm subsystem in QEMU still thinks that memory belongs to
memory-less node, a reboot will set things accordingly and the previously
hotplugged memory now ends in the right node. This appears as if some
memory moved from one node to another.

So until kernel starts supporting memory hotplug to memory-less
nodes, just prevent such attempts upfront in QEMU.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 9ab6284..23d4d85 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2136,7 +2136,7 @@ static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(qdev_get_machine());

if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
- uint32_t node;
+ int node;

if (!smc->dr_lmb_enabled) {
error_setg(errp, "Memory hotplug not supported for this machine");
@@ -2147,6 +2147,28 @@ static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
return;
}

+ /*
+ * Currently PowerPC kernel doesn't allow hot-adding memory to
+ * memory-less node, but instead will silently add the memory
+ * to the first node that has some memory. This causes two
+ * unexpected behaviours for the user.
+ *
+ * - Memory gets hotplugged to a different node than what the user
+ * specified.
+ * - Since pc-dimm subsystem in QEMU still thinks that memory belongs
+ * to memory-less node, a reboot will set things accordingly
+ * and the previously hotplugged memory now ends in the right node.
+ * This appears as if some memory moved from one node to another.
+ *
+ * So until kernel starts supporting memory hotplug to memory-less
+ * nodes, just prevent such attempts upfront in QEMU.
+ */
+ if (nb_numa_nodes && !numa_info[node].node_mem) {
+ error_setg(errp, "Can't hotplug memory to memory-less node %d",
+ node);
+ return;
+ }
+
spapr_memory_plug(hotplug_dev, dev, node, errp);
}
}
--
2.4.3
David Gibson
2015-09-21 01:06:11 UTC
Permalink
From: Michael Roth <***@linux.vnet.ibm.com>

PAPR requires ibm,req#msi and ibm,req#msi-x to be present in the
device node to define the number of msi/msi-x interrupts the device
supports, respectively.

Currently we have ibm,req#msi-x hardcoded to a non-sensical constant
that happens to be 2, and are missing ibm,req#msi entirely. The result
of that is that msi-x capable devices get limited to 2 msi-x
interrupts (which can impact performance), and msi-only devices likely
wouldn't work at all. Additionally, if devices expect a minimum that
exceeds 2, the guest driver may fail to load entirely.

SLOF still owns the generation of these properties at boot-time
(although other device properties have since been offloaded to QEMU),
but for hotplugged devices we rely on the values generated by QEMU
and thus hit the limitations above.

Fix this by generating these properties in QEMU as expected by guests.

In the future it may make sense to modify SLOF to pass through these
values directly as we do with other props since we're duplicating SLOF
code.

Cc: qemu-***@nongnu.org
Cc: qemu-***@nongnu.org
Cc: David Gibson <***@gibson.dropbear.id.au>
Cc: Nikunj A Dadhania <***@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_pci.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 54292c9..d2188c8 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -957,6 +957,7 @@ static int spapr_populate_pci_child_dt(PCIDevice *dev, void *fdt, int offset,
int pci_status, err;
char *buf = NULL;
uint32_t drc_index = spapr_phb_get_pci_drc_index(sphb, dev);
+ uint32_t max_msi, max_msix;

if (pci_default_read_config(dev, PCI_HEADER_TYPE, 1) ==
PCI_HEADER_TYPE_BRIDGE) {
@@ -1037,8 +1038,15 @@ static int spapr_populate_pci_child_dt(PCIDevice *dev, void *fdt, int offset,
RESOURCE_CELLS_ADDRESS));
_FDT(fdt_setprop_cell(fdt, offset, "#size-cells",
RESOURCE_CELLS_SIZE));
- _FDT(fdt_setprop_cell(fdt, offset, "ibm,req#msi-x",
- RESOURCE_CELLS_SIZE));
+
+ max_msi = msi_nr_vectors_allocated(dev);
+ if (max_msi) {
+ _FDT(fdt_setprop_cell(fdt, offset, "ibm,req#msi", max_msi));
+ }
+ max_msix = dev->msix_entries_nr;
+ if (max_msix) {
+ _FDT(fdt_setprop_cell(fdt, offset, "ibm,req#msi-x", max_msix));
+ }

populate_resource_props(dev, &rp);
_FDT(fdt_setprop(fdt, offset, "reg", (uint8_t *)rp.reg, rp.reg_len));
--
2.4.3
David Gibson
2015-09-21 01:06:04 UTC
Permalink
From: Thomas Huth <***@redhat.com>

To see the output of the hcall_dprintf statements, you currently have
to enable the DEBUG_SPAPR_HCALLS macro in include/hw/ppc/spapr.h.
This is ugly because a) not every user who wants to debug guest
problems can or wants to recompile QEMU to be able to see such issues,
and b) since this macro is disabled by default, the code in the
hcall_dprintf() brackets tends to bitrot until somebody temporarily
enables that macro again.
Since the hcall_dprintf statements except one indicate guest
problems, let's always use qemu_log_mask(LOG_GUEST_ERROR, ...) for
this macro instead. One spot indicated an unimplemented host feature,
so this is changed into qemu_log_mask(LOG_UNIMP, ...) instead. Now
it's possible to see all those messages by simply adding the CLI
parameter "-d guest_errors,unimp", without the need to re-compile
the binary.

Signed-off-by: Thomas Huth <***@redhat.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_hcall.c | 3 ++-
include/hw/ppc/spapr.h | 11 +++--------
2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 652ddf6..71fc9f2 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -971,7 +971,8 @@ target_ulong spapr_hypercall(PowerPCCPU *cpu, target_ulong opcode,
}
}

- hcall_dprintf("Unimplemented hcall 0x" TARGET_FMT_lx "\n", opcode);
+ qemu_log_mask(LOG_UNIMP, "Unimplemented SPAPR hcall 0x" TARGET_FMT_lx "\n",
+ opcode);
return H_FUNCTION;
}

diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 91a61ab..d250967 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -353,15 +353,10 @@ typedef struct sPAPRDeviceTreeUpdateHeader {
uint32_t version_id;
} sPAPRDeviceTreeUpdateHeader;

-/*#define DEBUG_SPAPR_HCALLS*/
-
-#ifdef DEBUG_SPAPR_HCALLS
-#define hcall_dprintf(fmt, ...) \
- do { fprintf(stderr, "%s: " fmt, __func__, ## __VA_ARGS__); } while (0)
-#else
#define hcall_dprintf(fmt, ...) \
- do { } while (0)
-#endif
+ do { \
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: " fmt, __func__, ## __VA_ARGS__); \
+ } while (0)

typedef target_ulong (*spapr_hcall_fn)(PowerPCCPU *cpu, sPAPRMachineState *sm,
target_ulong opcode,
--
2.4.3
David Gibson
2015-09-21 01:06:00 UTC
Permalink
From: Sam Bobroff <***@au1.ibm.com>

Currently, rtas_ibm_change_msi() always returns four values even if
less are specified.

Correct this by only returning the fourth parameter if it was
requested.

This is specified by PAPR.

Signed-off-by: Sam Bobroff <***@au1.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_pci.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index a2feb4c..6782fd0 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -375,7 +375,9 @@ out:
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
rtas_st(rets, 1, req_num);
rtas_st(rets, 2, ++seq_num);
- rtas_st(rets, 3, ret_intr_type);
+ if (nret > 3) {
+ rtas_st(rets, 3, ret_intr_type);
+ }

trace_spapr_pci_rtas_ibm_change_msi(config_addr, func, req_num, irq);
}
--
2.4.3
David Gibson
2015-09-21 01:06:26 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Till now memory hotplug used RTAS_LOG_V6_HP_ID_DRC_INDEX hotplug type
which meant that we generated one hotplug type of EPOW event for every
256MB (SPAPR_MEMORY_BLOCK_SIZE). This quickly overruns the kernel
rtas log buffer thus resulting in loss of memory hotplug events. Switch
to RTAS_LOG_V6_HP_ID_DRC_COUNT hotplug type for memory so that we
generate only one event per hotplug request.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: Michael Roth <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 10f0d8a..430fac4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2062,9 +2062,9 @@ static void spapr_add_lmbs(DeviceState *dev, uint64_t addr, uint64_t size,

drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
drck->attach(drc, dev, fdt, fdt_offset, !dev->hotplugged, errp);
- spapr_hotplug_req_add_by_index(drc);
addr += SPAPR_MEMORY_BLOCK_SIZE;
}
+ spapr_hotplug_req_add_by_count(SPAPR_DR_CONNECTOR_TYPE_LMB, nr_lmbs);
}

static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
--
2.4.3
David Gibson
2015-09-21 01:06:12 UTC
Permalink
From: Michael Roth <***@linux.vnet.ibm.com>

Logical resources start with allocation-state:UNUSABLE /
isolation-state:ISOLATED. During hotplug, guests will transition
them to allocation-state:USABLE, and then to
isolation-state:UNISOLATED.

For cases where we cannot transition to allocation-state:USABLE,
in this case due to no device/resource being association with
the logical DRC, we should return an error -3.

For physical DRCs, we default to allocation-state:USABLE and stay
there, so in this case we should report an error -3 when the guest
attempts to make the isolation-state:ISOLATED transition for a DRC
with no device associated.

These are as documented in PAPR 2.7, 13.5.3.4.

We also ensure allocation-state:USABLE when the guest attempts
transition to isolation-state:UNISOLATED to deal with misbehaving
guests attempting to bring online an unallocated logical resource.

This is as documented in PAPR 2.7, 13.7.

Currently we implement no such error logic. Fix this by handling
these error cases as PAPR defines.

Cc: Bharata B Rao <***@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_drc.c | 21 +++++++++++++++++++++
include/hw/ppc/spapr.h | 1 +
2 files changed, 22 insertions(+)

diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index 9ce844a..faf8760 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -66,6 +66,16 @@ static int set_isolation_state(sPAPRDRConnector *drc,

DPRINTFN("drc: %x, set_isolation_state: %x", get_index(drc), state);

+ if (state == SPAPR_DR_ISOLATION_STATE_UNISOLATED) {
+ /* cannot unisolate a non-existant resource, and, or resources
+ * which are in an 'UNUSABLE' allocation state. (PAPR 2.7, 13.5.3.5)
+ */
+ if (!drc->dev ||
+ drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
+ return RTAS_OUT_NO_SUCH_INDICATOR;
+ }
+ }
+
drc->isolation_state = state;

if (drc->isolation_state == SPAPR_DR_ISOLATION_STATE_ISOLATED) {
@@ -107,6 +117,17 @@ static int set_allocation_state(sPAPRDRConnector *drc,

DPRINTFN("drc: %x, set_allocation_state: %x", get_index(drc), state);

+ if (state == SPAPR_DR_ALLOCATION_STATE_USABLE) {
+ /* if there's no resource/device associated with the DRC, there's
+ * no way for us to put it in an allocation state consistent with
+ * being 'USABLE'. PAPR 2.7, 13.5.3.4 documents that this should
+ * result in an RTAS return code of -3 / "no such indicator"
+ */
+ if (!drc->dev) {
+ return RTAS_OUT_NO_SUCH_INDICATOR;
+ }
+ }
+
if (drc->type != SPAPR_DR_CONNECTOR_TYPE_PCI) {
drc->allocation_state = state;
if (drc->awaiting_release &&
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index cbe3463..8a0a74d 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -409,6 +409,7 @@ int spapr_allocate_irq_block(int num, bool lsi, bool msi);
#define RTAS_OUT_BUSY -2
#define RTAS_OUT_PARAM_ERROR -3
#define RTAS_OUT_NOT_SUPPORTED -3
+#define RTAS_OUT_NO_SUCH_INDICATOR -3
#define RTAS_OUT_NOT_AUTHORIZED -9002

/* RTAS tokens */
--
2.4.3
David Gibson
2015-09-21 01:06:09 UTC
Permalink
The device tree presented to pseries machine type guests includes an
ibm,chip-id property which gives essentially the socket number of each
vcpu core (individual vcpu threads don't get a node in the device
tree).

To calculate this, it uses a vcpus_per_socket variable computed as
(smp_cpus / #sockets). This is correct for the usual case where
smp_cpus == smp_threads * smp_cores * #sockets.

However, you can start QEMU with the number of cores and threads
mismatching the total number of vcpus (whether that _should_ be
permitted is a topic for another day). It's a bit hard to say what
the "real" number of vcpus per socket here is, but for most purposes
(smp_threads * smp_cores) will more meaningfully match how QEMU
behaves with respect to socket boundaries.

Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
Reviewed-by: Alexey Kardashevskiy <***@ozlabs.ru>
---
hw/ppc/spapr.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index e0f7b54..9e187a1 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -630,9 +630,7 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
uint32_t cpufreq = kvm_enabled() ? kvmppc_get_clockfreq() : 1000000000;
uint32_t page_sizes_prop[64];
size_t page_sizes_prop_size;
- QemuOpts *opts = qemu_opts_find(qemu_find_opts("smp-opts"), NULL);
- unsigned sockets = opts ? qemu_opt_get_number(opts, "sockets", 0) : 0;
- uint32_t cpus_per_socket = sockets ? (smp_cpus / sockets) : 1;
+ uint32_t vcpus_per_socket = smp_threads * smp_cores;
uint32_t pft_size_prop[] = {0, cpu_to_be32(spapr->htab_shift)};

_FDT((fdt_setprop_cell(fdt, offset, "reg", index)));
@@ -701,7 +699,7 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
}

_FDT((fdt_setprop_cell(fdt, offset, "ibm,chip-id",
- cs->cpu_index / cpus_per_socket)));
+ cs->cpu_index / vcpus_per_socket)));

_FDT((fdt_setprop(fdt, offset, "ibm,pft-size",
pft_size_prop, sizeof(pft_size_prop))));
--
2.4.3
David Gibson
2015-09-21 01:06:05 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

If drmgr is used in the guest to hotplug a device before a device_add
has been issued via the QEMU monitor, QEMU segfaults in configure_connector
call. This occurs due to accessing of NULL FDT which otherwise would have
been created and associated with the DRC during device_add command.

Check for NULL FDT and return failure from configure_connector call.
As per PAPR+, an error value of -9003 seems appropriate for this failure.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Cc: Michael Roth <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_rtas.c | 6 ++++++
include/hw/ppc/spapr_drc.h | 15 ++++++++-------
2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 5cbf9a0..2f8e25c 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -522,6 +522,12 @@ static void rtas_ibm_configure_connector(PowerPCCPU *cpu,

drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
fdt = drck->get_fdt(drc, NULL);
+ if (!fdt) {
+ DPRINTF("rtas_ibm_configure_connector: Missing FDT for DRC index: %xh\n",
+ drc_index);
+ rc = SPAPR_DR_CC_RESPONSE_NOT_CONFIGURABLE;
+ goto out;
+ }

ccs = spapr_ccs_find(spapr, drc_index);
if (!ccs) {
diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h
index 60cda35..28ffeae 100644
--- a/include/hw/ppc/spapr_drc.h
+++ b/include/hw/ppc/spapr_drc.h
@@ -119,13 +119,14 @@ typedef enum {
} sPAPRDREntitySense;

typedef enum {
- SPAPR_DR_CC_RESPONSE_NEXT_SIB = 1, /* currently unused */
- SPAPR_DR_CC_RESPONSE_NEXT_CHILD = 2,
- SPAPR_DR_CC_RESPONSE_NEXT_PROPERTY = 3,
- SPAPR_DR_CC_RESPONSE_PREV_PARENT = 4,
- SPAPR_DR_CC_RESPONSE_SUCCESS = 0,
- SPAPR_DR_CC_RESPONSE_ERROR = -1,
- SPAPR_DR_CC_RESPONSE_CONTINUE = -2,
+ SPAPR_DR_CC_RESPONSE_NEXT_SIB = 1, /* currently unused */
+ SPAPR_DR_CC_RESPONSE_NEXT_CHILD = 2,
+ SPAPR_DR_CC_RESPONSE_NEXT_PROPERTY = 3,
+ SPAPR_DR_CC_RESPONSE_PREV_PARENT = 4,
+ SPAPR_DR_CC_RESPONSE_SUCCESS = 0,
+ SPAPR_DR_CC_RESPONSE_ERROR = -1,
+ SPAPR_DR_CC_RESPONSE_CONTINUE = -2,
+ SPAPR_DR_CC_RESPONSE_NOT_CONFIGURABLE = -9003,
} sPAPRDRCCResponse;

typedef void (spapr_drc_detach_cb)(DeviceState *d, void *opaque);
--
2.4.3
David Gibson
2015-09-21 01:06:17 UTC
Permalink
Enable memory hotplug for pseries 2.4 and add LMB DR connectors.
With memory hotplug, enforce RAM size, NUMA node memory size and maxmem
to be a multiple of SPAPR_MEMORY_BLOCK_SIZE (256M) since that's the
granularity in which LMBs are represented and hot-added.

LMB DR connectors will be used by the memory hotplug code.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <***@linux.vnet.ibm.com>
[spapr_drc_reset implementation]
[since this missed the 2.4 cutoff, changing to only enable for 2.5]
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++
include/hw/ppc/spapr.h | 1 +
2 files changed, 88 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 18f8113..f8d5b9b 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -61,6 +61,7 @@
#include "hw/nmi.h"

#include "hw/compat.h"
+#include "qemu-common.h"

#include <libfdt.h>

@@ -1446,10 +1447,84 @@ static void spapr_cpu_init(sPAPRMachineState *spapr, PowerPCCPU *cpu)
qemu_register_reset(spapr_cpu_reset, cpu);
}

+/*
+ * Reset routine for LMB DR devices.
+ *
+ * Unlike PCI DR devices, LMB DR devices explicitly register this reset
+ * routine. Reset for PCI DR devices will be handled by PHB reset routine
+ * when it walks all its children devices. LMB devices reset occurs
+ * as part of spapr_ppc_reset().
+ */
+static void spapr_drc_reset(void *opaque)
+{
+ sPAPRDRConnector *drc = opaque;
+ DeviceState *d = DEVICE(drc);
+
+ if (d) {
+ device_reset(d);
+ }
+}
+
+static void spapr_create_lmb_dr_connectors(sPAPRMachineState *spapr)
+{
+ MachineState *machine = MACHINE(spapr);
+ uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
+ uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
+ uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
+ uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
+ int i;
+
+ for (i = 0; i < nr_lmbs; i++) {
+ sPAPRDRConnector *drc;
+ uint64_t addr;
+
+ if (i < nr_assigned_lmbs) {
+ addr = (i + nr_rma_lmbs) * lmb_size;
+ } else {
+ addr = (i - nr_assigned_lmbs) * lmb_size +
+ spapr->hotplug_memory.base;
+ }
+ drc = spapr_dr_connector_new(OBJECT(spapr), SPAPR_DR_CONNECTOR_TYPE_LMB,
+ addr/lmb_size);
+ qemu_register_reset(spapr_drc_reset, drc);
+ }
+}
+
+/*
+ * If RAM size, maxmem size and individual node mem sizes aren't aligned
+ * to SPAPR_MEMORY_BLOCK_SIZE(256MB), then refuse to start the guest
+ * since we can't support such unaligned sizes with DRCONF_MEMORY.
+ */
+static void spapr_validate_node_memory(MachineState *machine)
+{
+ int i;
+
+ if (machine->maxram_size % SPAPR_MEMORY_BLOCK_SIZE ||
+ machine->ram_size % SPAPR_MEMORY_BLOCK_SIZE) {
+ error_report("Can't support memory configuration where RAM size "
+ "0x" RAM_ADDR_FMT " or maxmem size "
+ "0x" RAM_ADDR_FMT " isn't aligned to %llu MB",
+ machine->ram_size, machine->maxram_size,
+ SPAPR_MEMORY_BLOCK_SIZE/M_BYTE);
+ exit(EXIT_FAILURE);
+ }
+
+ for (i = 0; i < nb_numa_nodes; i++) {
+ if (numa_info[i].node_mem % SPAPR_MEMORY_BLOCK_SIZE) {
+ error_report("Can't support memory configuration where memory size"
+ " %" PRIx64 " of node %d isn't aligned to %llu MB",
+ numa_info[i].node_mem, i,
+ SPAPR_MEMORY_BLOCK_SIZE/M_BYTE);
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
/* pSeries LPAR / sPAPR hardware init */
static void ppc_spapr_init(MachineState *machine)
{
sPAPRMachineState *spapr = SPAPR_MACHINE(machine);
+ sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine);
const char *kernel_filename = machine->kernel_filename;
const char *kernel_cmdline = machine->kernel_cmdline;
const char *initrd_filename = machine->initrd_filename;
@@ -1528,6 +1603,10 @@ static void ppc_spapr_init(MachineState *machine)
smp_threads),
XICS_IRQS);

+ if (smc->dr_lmb_enabled) {
+ spapr_validate_node_memory(machine);
+ }
+
/* init CPUs */
if (machine->cpu_model == NULL) {
machine->cpu_model = kvm_enabled() ? "host" : "POWER7";
@@ -1578,6 +1657,10 @@ static void ppc_spapr_init(MachineState *machine)
&spapr->hotplug_memory.mr);
}

+ if (smc->dr_lmb_enabled) {
+ spapr_create_lmb_dr_connectors(spapr);
+ }
+
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "spapr-rtas.bin");
if (!filename) {
error_report("Could not find LPAR rtas '%s'", "spapr-rtas.bin");
@@ -1851,6 +1934,7 @@ static void spapr_nmi(NMIState *n, int cpu_index, Error **errp)
static void spapr_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc);
FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(oc);
NMIClass *nc = NMI_CLASS(oc);

@@ -1865,6 +1949,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
mc->has_dynamic_sysbus = true;
mc->pci_allow_0_address = true;

+ smc->dr_lmb_enabled = false;
fwc->get_dev_path = spapr_get_fw_dev_path;
nc->nmi_monitor_handler = spapr_nmi;
}
@@ -2014,11 +2099,13 @@ static const TypeInfo spapr_machine_2_4_info = {
static void spapr_machine_2_5_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc);

mc->name = "pseries-2.5";
mc->desc = "pSeries Logical Partition (PAPR compliant) v2.5";
mc->alias = "pseries";
mc->is_default = 1;
+ smc->dr_lmb_enabled = true;
}

static const TypeInfo spapr_machine_2_5_info = {
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index e882770..5de54d4 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -35,6 +35,7 @@ struct sPAPRMachineClass {
MachineClass parent_class;

/*< public >*/
+ bool dr_lmb_enabled; /* enable dynamic-reconfig/hotplug of LMBs */
};

/**
--
2.4.3
David Gibson
2015-09-21 01:06:19 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

The hash table size is dependent on ram_size, but since with hotplug
the memory can grow till maxram_size. Hence make hash table size dependent
on maxram_size.

This allows to hotplug huge amounts of memory to the guest.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index f2477b2..6f9e64a 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1715,7 +1715,7 @@ static void ppc_spapr_init(MachineState *machine)
* more than needed for the Linux guests we support. */
spapr->htab_shift = 18; /* Minimum architected size */
while (spapr->htab_shift <= 46) {
- if ((1ULL << (spapr->htab_shift + 7)) >= machine->ram_size) {
+ if ((1ULL << (spapr->htab_shift + 7)) >= machine->maxram_size) {
break;
}
spapr->htab_shift++;
--
2.4.3
David Gibson
2015-09-21 01:06:13 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Initialize a hotplug memory region under which all the hotplugged
memory is accommodated. Also enable memory hotplug by setting
CONFIG_MEM_HOTPLUG.

Modelled on i386 memory hotplug.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
default-configs/ppc64-softmmu.mak | 1 +
hw/ppc/spapr.c | 18 ++++++++++++++++++
include/hw/ppc/spapr.h | 12 ++++++++++++
3 files changed, 31 insertions(+)

diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-softmmu.mak
index ab62cc7..e77cb1a 100644
--- a/default-configs/ppc64-softmmu.mak
+++ b/default-configs/ppc64-softmmu.mak
@@ -52,3 +52,4 @@ CONFIG_XICS_KVM=$(and $(CONFIG_PSERIES),$(CONFIG_KVM))
# For PReP
CONFIG_MC146818RTC=y
CONFIG_ISA_TESTDEV=y
+CONFIG_MEM_HOTPLUG=y
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 45e0e54..8e97579 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1562,6 +1562,24 @@ static void ppc_spapr_init(MachineState *machine)
memory_region_add_subregion(sysmem, 0, rma_region);
}

+ /* initialize hotplug memory address space */
+ if (machine->ram_size < machine->maxram_size) {
+ ram_addr_t hotplug_mem_size = machine->maxram_size - machine->ram_size;
+
+ if (machine->ram_slots > SPAPR_MAX_RAM_SLOTS) {
+ error_report("unsupported amount of memory slots: %"PRIu64,
+ machine->ram_slots);
+ exit(EXIT_FAILURE);
+ }
+
+ spapr->hotplug_memory.base = ROUND_UP(machine->ram_size,
+ SPAPR_HOTPLUG_MEM_ALIGN);
+ memory_region_init(&spapr->hotplug_memory.mr, OBJECT(spapr),
+ "hotplug-memory", hotplug_mem_size);
+ memory_region_add_subregion(sysmem, spapr->hotplug_memory.base,
+ &spapr->hotplug_memory.mr);
+ }
+
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "spapr-rtas.bin");
if (!filename) {
error_report("Could not find LPAR rtas '%s'", "spapr-rtas.bin");
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 8a0a74d..e882770 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -5,6 +5,7 @@
#include "hw/boards.h"
#include "hw/ppc/xics.h"
#include "hw/ppc/spapr_drc.h"
+#include "hw/mem/pc-dimm.h"

struct VIOsPAPRBus;
struct sPAPRPHBState;
@@ -76,6 +77,7 @@ struct sPAPRMachineState {

/*< public >*/
char *kvm_type;
+ MemoryHotplugState hotplug_memory;
};

#define H_SUCCESS 0
@@ -610,4 +612,14 @@ int spapr_rtc_import_offset(DeviceState *dev, int64_t legacy_offset);

#define SPAPR_MEMORY_BLOCK_SIZE (1 << 28) /* 256MB */

+/*
+ * This defines the maximum number of DIMM slots we can have for sPAPR
+ * guest. This is not defined by sPAPR but we are defining it to 32 slots
+ * based on default number of slots provided by PowerPC kernel.
+ */
+#define SPAPR_MAX_RAM_SLOTS 32
+
+/* 1GB alignment for hotplug memory region */
+#define SPAPR_HOTPLUG_MEM_ALIGN (1ULL << 30)
+
#endif /* !defined (__HW_SPAPR_H__) */
--
2.4.3
David Gibson
2015-09-21 01:06:02 UTC
Permalink
From: Andrew Jones <***@redhat.com>

dumpdtb (-machine dumpdtb=<file>) allows one to inspect the generated
device tree of machine types that generate device trees. This is
useful for a) seeing what's there b) debugging/testing device tree
generator patches. It can be used as follows

$QEMU_CMDLINE -machine dumpdtb=dtb
dtc -I dtb -O dts dtb

Signed-off-by: Andrew Jones <***@redhat.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index f91058c..e0f7b54 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -30,6 +30,7 @@
#include "hw/fw-path-provider.h"
#include "elf.h"
#include "net/net.h"
+#include "sysemu/device_tree.h"
#include "sysemu/block-backend.h"
#include "sysemu/cpus.h"
#include "sysemu/kvm.h"
@@ -831,6 +832,7 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
exit(1);
}

+ qemu_fdt_dumpdtb(fdt, fdt_totalsize(fdt));
cpu_physical_memory_write(fdt_addr, fdt, fdt_totalsize(fdt));

g_free(bootlist);
--
2.4.3
David Gibson
2015-09-21 01:06:14 UTC
Permalink
From: Michael Roth <***@linux.vnet.ibm.com>

Certain methods in sPAPRDRConnector objects are only ever called by
RTAS and in many cases are responsible for the logic that determines
the RTAS return codes.

Rather than having a level of indirection requiring RTAS code to
re-interpret return values from such methods to determine the
appropriate return code, just pass them through directly.

This requires changing method return types to uint32_t to match the
type of values currently passed to RTAS helpers.

In the case of read accesses like drc->entity_sense() where we weren't
previously reporting any errors, just the read value, we modify the
function to return RTAS return code, and pass the read value back via
reference.

Suggested-by: Bharata B Rao <***@linux.vnet.ibm.com>
Suggested-by: David Gibson <***@gibson.dropbear.id.au>
Cc: Bharata B Rao <***@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_drc.c | 37 +++++++++++++++++++------------------
hw/ppc/spapr_rtas.c | 40 ++++++++++++++++++++++------------------
include/hw/ppc/spapr_drc.h | 14 +++++++-------
3 files changed, 48 insertions(+), 43 deletions(-)

diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index faf8760..b7b9891 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -15,6 +15,7 @@
#include "hw/qdev.h"
#include "qapi/visitor.h"
#include "qemu/error-report.h"
+#include "hw/ppc/spapr.h" /* for RTAS return codes */

/* #define DEBUG_SPAPR_DRC */

@@ -59,8 +60,8 @@ static uint32_t get_index(sPAPRDRConnector *drc)
(drc->id & DRC_INDEX_ID_MASK);
}

-static int set_isolation_state(sPAPRDRConnector *drc,
- sPAPRDRIsolationState state)
+static uint32_t set_isolation_state(sPAPRDRConnector *drc,
+ sPAPRDRIsolationState state)
{
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);

@@ -99,19 +100,19 @@ static int set_isolation_state(sPAPRDRConnector *drc,
drc->configured = false;
}

- return 0;
+ return RTAS_OUT_SUCCESS;
}

-static int set_indicator_state(sPAPRDRConnector *drc,
- sPAPRDRIndicatorState state)
+static uint32_t set_indicator_state(sPAPRDRConnector *drc,
+ sPAPRDRIndicatorState state)
{
DPRINTFN("drc: %x, set_indicator_state: %x", get_index(drc), state);
drc->indicator_state = state;
- return 0;
+ return RTAS_OUT_SUCCESS;
}

-static int set_allocation_state(sPAPRDRConnector *drc,
- sPAPRDRAllocationState state)
+static uint32_t set_allocation_state(sPAPRDRConnector *drc,
+ sPAPRDRAllocationState state)
{
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);

@@ -137,7 +138,7 @@ static int set_allocation_state(sPAPRDRConnector *drc,
drc->detach_cb_opaque, NULL);
}
}
- return 0;
+ return RTAS_OUT_SUCCESS;
}

static uint32_t get_type(sPAPRDRConnector *drc)
@@ -178,10 +179,8 @@ static void set_configured(sPAPRDRConnector *drc)
* based on the current allocation/indicator/power states
* for the DR connector.
*/
-static sPAPRDREntitySense entity_sense(sPAPRDRConnector *drc)
+static uint32_t entity_sense(sPAPRDRConnector *drc, sPAPRDREntitySense *state)
{
- sPAPRDREntitySense state;
-
if (drc->dev) {
if (drc->type != SPAPR_DR_CONNECTOR_TYPE_PCI &&
drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
@@ -190,7 +189,7 @@ static sPAPRDREntitySense entity_sense(sPAPRDRConnector *drc)
* Otherwise, report the state as USABLE/PRESENT,
* as we would for PCI.
*/
- state = SPAPR_DR_ENTITY_SENSE_UNUSABLE;
+ *state = SPAPR_DR_ENTITY_SENSE_UNUSABLE;
} else {
/* this assumes all PCI devices are assigned to
* a 'live insertion' power domain, where QEMU
@@ -198,21 +197,21 @@ static sPAPRDREntitySense entity_sense(sPAPRDRConnector *drc)
* to the guest. present, non-PCI resources are
* unaffected by power state.
*/
- state = SPAPR_DR_ENTITY_SENSE_PRESENT;
+ *state = SPAPR_DR_ENTITY_SENSE_PRESENT;
}
} else {
if (drc->type == SPAPR_DR_CONNECTOR_TYPE_PCI) {
/* PCI devices, and only PCI devices, use EMPTY
* in cases where we'd otherwise use UNUSABLE
*/
- state = SPAPR_DR_ENTITY_SENSE_EMPTY;
+ *state = SPAPR_DR_ENTITY_SENSE_EMPTY;
} else {
- state = SPAPR_DR_ENTITY_SENSE_UNUSABLE;
+ *state = SPAPR_DR_ENTITY_SENSE_UNUSABLE;
}
}

DPRINTFN("drc: %x, entity_sense: %x", get_index(drc), state);
- return state;
+ return RTAS_OUT_SUCCESS;
}

static void prop_get_index(Object *obj, Visitor *v, void *opaque,
@@ -245,7 +244,9 @@ static void prop_get_entity_sense(Object *obj, Visitor *v, void *opaque,
{
sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj);
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
- uint32_t value = (uint32_t)drck->entity_sense(drc);
+ uint32_t value;
+
+ drck->entity_sense(drc, &value);
visit_type_uint32(v, &value, name, errp);
}

diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c
index 2f8e25c..34b12a3 100644
--- a/hw/ppc/spapr_rtas.c
+++ b/hw/ppc/spapr_rtas.c
@@ -372,12 +372,13 @@ static void rtas_set_indicator(PowerPCCPU *cpu, sPAPRMachineState *spapr,
uint32_t sensor_type;
uint32_t sensor_index;
uint32_t sensor_state;
+ uint32_t ret = RTAS_OUT_SUCCESS;
sPAPRDRConnector *drc;
sPAPRDRConnectorClass *drck;

if (nargs != 3 || nret != 1) {
- rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
- return;
+ ret = RTAS_OUT_PARAM_ERROR;
+ goto out;
}

sensor_type = rtas_ld(args, 0);
@@ -393,8 +394,8 @@ static void rtas_set_indicator(PowerPCCPU *cpu, sPAPRMachineState *spapr,
if (!drc) {
DPRINTF("rtas_set_indicator: invalid sensor/DRC index: %xh\n",
sensor_index);
- rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
- return;
+ ret = RTAS_OUT_PARAM_ERROR;
+ goto out;
}
drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);

@@ -413,19 +414,20 @@ static void rtas_set_indicator(PowerPCCPU *cpu, sPAPRMachineState *spapr,
spapr_ccs_remove(spapr, ccs);
}
}
- drck->set_isolation_state(drc, sensor_state);
+ ret = drck->set_isolation_state(drc, sensor_state);
break;
case RTAS_SENSOR_TYPE_DR:
- drck->set_indicator_state(drc, sensor_state);
+ ret = drck->set_indicator_state(drc, sensor_state);
break;
case RTAS_SENSOR_TYPE_ALLOCATION_STATE:
- drck->set_allocation_state(drc, sensor_state);
+ ret = drck->set_allocation_state(drc, sensor_state);
break;
default:
goto out_unimplemented;
}

- rtas_st(rets, 0, RTAS_OUT_SUCCESS);
+out:
+ rtas_st(rets, 0, ret);
return;

out_unimplemented:
@@ -442,13 +444,14 @@ static void rtas_get_sensor_state(PowerPCCPU *cpu, sPAPRMachineState *spapr,
{
uint32_t sensor_type;
uint32_t sensor_index;
+ uint32_t sensor_state = 0;
sPAPRDRConnector *drc;
sPAPRDRConnectorClass *drck;
- uint32_t entity_sense;
+ uint32_t ret = RTAS_OUT_SUCCESS;

if (nargs != 2 || nret != 2) {
- rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
- return;
+ ret = RTAS_OUT_PARAM_ERROR;
+ goto out;
}

sensor_type = rtas_ld(args, 0);
@@ -458,22 +461,23 @@ static void rtas_get_sensor_state(PowerPCCPU *cpu, sPAPRMachineState *spapr,
/* currently only DR-related sensors are implemented */
DPRINTF("rtas_get_sensor_state: sensor/indicator not implemented: %d\n",
sensor_type);
- rtas_st(rets, 0, RTAS_OUT_NOT_SUPPORTED);
- return;
+ ret = RTAS_OUT_NOT_SUPPORTED;
+ goto out;
}

drc = spapr_dr_connector_by_index(sensor_index);
if (!drc) {
DPRINTF("rtas_get_sensor_state: invalid sensor/DRC index: %xh\n",
sensor_index);
- rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
- return;
+ ret = RTAS_OUT_PARAM_ERROR;
+ goto out;
}
drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
- entity_sense = drck->entity_sense(drc);
+ ret = drck->entity_sense(drc, &sensor_state);

- rtas_st(rets, 0, RTAS_OUT_SUCCESS);
- rtas_st(rets, 1, entity_sense);
+out:
+ rtas_st(rets, 0, ret);
+ rtas_st(rets, 1, sensor_state);
}

/* configure-connector work area offsets, int32_t units for field
diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h
index 28ffeae..7e56347 100644
--- a/include/hw/ppc/spapr_drc.h
+++ b/include/hw/ppc/spapr_drc.h
@@ -165,17 +165,17 @@ typedef struct sPAPRDRConnectorClass {
/*< public >*/

/* accessors for guest-visible (generally via RTAS) DR state */
- int (*set_isolation_state)(sPAPRDRConnector *drc,
- sPAPRDRIsolationState state);
- int (*set_indicator_state)(sPAPRDRConnector *drc,
- sPAPRDRIndicatorState state);
- int (*set_allocation_state)(sPAPRDRConnector *drc,
- sPAPRDRAllocationState state);
+ uint32_t (*set_isolation_state)(sPAPRDRConnector *drc,
+ sPAPRDRIsolationState state);
+ uint32_t (*set_indicator_state)(sPAPRDRConnector *drc,
+ sPAPRDRIndicatorState state);
+ uint32_t (*set_allocation_state)(sPAPRDRConnector *drc,
+ sPAPRDRAllocationState state);
uint32_t (*get_index)(sPAPRDRConnector *drc);
uint32_t (*get_type)(sPAPRDRConnector *drc);
const char *(*get_name)(sPAPRDRConnector *drc);

- sPAPRDREntitySense (*entity_sense)(sPAPRDRConnector *drc);
+ uint32_t (*entity_sense)(sPAPRDRConnector *drc, sPAPRDREntitySense *state);

/* QEMU interfaces for managing FDT/configure-connector */
const void *(*get_fdt)(sPAPRDRConnector *drc, int *fdt_start_offset);
--
2.4.3
David Gibson
2015-09-21 01:06:27 UTC
Permalink
At present, if guest numa nodes are requested, but the cpus in each node
are not specified, spapr just uses the default behaviour or assigning each
vcpu round-robin to nodes.

If smp_threads != 1, that will assign adjacent threads in a core to
different NUMA nodes. As well as being just weird, that's a configuration
that can't be represented in the device tree we give to the guest, which
means the guest and qemu end up with different ideas of the NUMA topology.

This patch implements mc->cpu_index_to_socket_id in the spapr code to
make sure vcpus get assigned to nodes only at the socket granularity.

Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
Reviewed-by: Alexey Kardashevskiy <***@ozlabs.ru>
---
hw/ppc/spapr.c | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 430fac4..6ccf26f 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2162,6 +2162,13 @@ static HotplugHandler *spapr_get_hotpug_handler(MachineState *machine,
return NULL;
}

+static unsigned spapr_cpu_index_to_socket_id(unsigned cpu_index)
+{
+ /* Allocate to NUMA nodes on a "socket" basis (not that concept of
+ * socket means much for the paravirtualized PAPR platform) */
+ return cpu_index / smp_threads / smp_cores;
+}
+
static void spapr_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -2183,6 +2190,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
mc->get_hotplug_handler = spapr_get_hotpug_handler;
hc->plug = spapr_machine_device_plug;
hc->unplug = spapr_machine_device_unplug;
+ mc->cpu_index_to_socket_id = spapr_cpu_index_to_socket_id;

smc->dr_lmb_enabled = false;
fwc->get_dev_path = spapr_get_fw_dev_path;
--
2.4.3
David Gibson
2015-09-21 01:06:16 UTC
Permalink
From: Alexey Kardashevskiy <***@ozlabs.ru>

sPAPR uses hard coded limit of maximum 255 supported CPUs which is
exactly the same as QEMU-wide limit which is MAX_CPUMASK_BITS and also
defined as 255.

This makes use of a global CPU number limit for the "pseries" machine.

In order to anticipate future increase of the MAX_CPUMASK_BITS
(or to help debugging large systems), this also bumps the FDT_MAX_SIZE
limit from 256K to 1M assuming that 1 CPU core needs roughly 512 bytes
in the device tree so the new limit can cover up to 2048 CPU cores.

Signed-off-by: Alexey Kardashevskiy <***@ozlabs.ru>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 8e97579..18f8113 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -74,7 +74,7 @@
*
* We load our kernel at 4M, leaving space for SLOF initial image
*/
-#define FDT_MAX_SIZE 0x40000
+#define FDT_MAX_SIZE 0x100000
#define RTAS_MAX_SIZE 0x10000
#define RTAS_MAX_ADDR 0x80000000 /* RTAS must stay below that */
#define FW_MAX_SIZE 0x400000
@@ -86,8 +86,6 @@

#define TIMEBASE_FREQ 512000000ULL

-#define MAX_CPUS 255
-
#define PHANDLE_XICP 0x00001111

#define HTAB_SIZE(spapr) (1ULL << ((spapr)->htab_shift))
@@ -1859,7 +1857,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
mc->init = ppc_spapr_init;
mc->reset = ppc_spapr_reset;
mc->block_default_type = IF_SCSI;
- mc->max_cpus = MAX_CPUS;
+ mc->max_cpus = MAX_CPUMASK_BITS;
mc->no_parallel = 1;
mc->default_boot_order = "";
mc->default_ram_size = 512 * M_BYTE;
--
2.4.3
David Gibson
2015-09-21 01:05:58 UTC
Permalink
From: Sam Bobroff <***@au1.ibm.com>

QEMU has a notion of the guest name, so if it's present we might as
well put that into the device tree as /ibm,partition-name.

This is specificed by PAPR.

Signed-off-by: Sam Bobroff <***@au1.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 668879f..2795b33 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -375,6 +375,11 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
_FDT((fdt_property_string(fdt, "vm,uuid", buf)));
g_free(buf);

+ if (qemu_get_vm_name()) {
+ _FDT((fdt_property_string(fdt, "ibm,partition-name",
+ qemu_get_vm_name())));
+ }
+
_FDT((fdt_property_cell(fdt, "#address-cells", 0x2)));
_FDT((fdt_property_cell(fdt, "#size-cells", 0x2)));
--
2.4.3
David Gibson
2015-09-21 01:06:28 UTC
Permalink
From: Thomas Huth <***@redhat.com>

The buffer that is allocated in spapr_populate_drconf_memory()
is used for setting both, the "ibm,dynamic-memory" and the
"ibm,associativity-lookup-arrays" property. However, only the
size of the first one is taken into account when allocating the
memory. So if the length of the second property is larger than
the length of the first one, we run into a buffer overflow here!
Fix it by taking the length of the second property into account,
too.

Fixes: "spapr: Support ibm,dynamic-reconfiguration-memory" patch
Signed-off-by: Thomas Huth <***@redhat.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 6ccf26f..bd34289 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -725,9 +725,12 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
uint32_t *int_buf, *cur_index, buf_len;
int nr_nodes = nb_numa_nodes ? nb_numa_nodes : 1;

- /* Allocate enough buffer size to fit in ibm,dynamic-memory */
- buf_len = nr_lmbs * SPAPR_DR_LMB_LIST_ENTRY_SIZE * sizeof(uint32_t) +
- sizeof(uint32_t);
+ /*
+ * Allocate enough buffer size to fit in ibm,dynamic-memory
+ * or ibm,associativity-lookup-arrays
+ */
+ buf_len = MAX(nr_lmbs * SPAPR_DR_LMB_LIST_ENTRY_SIZE + 1, nr_nodes * 4 + 2)
+ * sizeof(uint32_t);
cur_index = int_buf = g_malloc0(buf_len);

offset = fdt_add_subnode(fdt, 0, "ibm,dynamic-reconfiguration-memory");
--
2.4.3
David Gibson
2015-09-21 01:06:15 UTC
Permalink
The dynamic reconfiguration (hotplug) code for the pseries machine type
uses a "DR connector" QOM object for each resource it will be possible
to hotplug. Each of these is added to its owner using
object_property_add_child(owner, "dr-connector[*], ...);

That works ok, mostly, but it means that the property indices are
arbitrary, depending on the order in which the connectors are constructed.
That might line up to something useful, but it doesn't have to.

It will get worse once we add hotplug RAM support. That will add a DR
connector object for every 256MB of potential memory. So if maxmem=2T,
for example, there are 8192 objects under the same parent.

The QOM interfaces aren't really designed for this. In particular
object_property_add() with [*] has O(n^2) time complexity (in the number of
existing children): first it has a linear search through array indices to
find a free slot, each of which is attempted to a recursive call to
object_property_add() with a specific [N]. Those calls are O(n) because
there's a linear search through all properties to check for duplicates.

By using a meaningful index value, which we already know is unique we can
avoid the [*] special behaviour. That lets us reduce the total time for
creating the DR objects from O(n^3) to O(n^2).

O(n^2) is still kind of crappy, but it's enough to reduce the startup time
of qemu (with in-progress memory hotplug support) with maxmem=2T from ~20
minutes to ~4 seconds.

Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
Cc: Bharata B Rao <***@linux.vnet.ibm.com>
Tested-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: Alexey Kardashevskiy <***@ozlabs.ru>
---
hw/ppc/spapr_drc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index b7b9891..5d6ea7c 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -473,14 +473,17 @@ sPAPRDRConnector *spapr_dr_connector_new(Object *owner,
{
sPAPRDRConnector *drc =
SPAPR_DR_CONNECTOR(object_new(TYPE_SPAPR_DR_CONNECTOR));
+ char *prop_name;

g_assert(type);

drc->type = type;
drc->id = id;
drc->owner = owner;
- object_property_add_child(owner, "dr-connector[*]", OBJECT(drc), NULL);
+ prop_name = g_strdup_printf("dr-connector[%"PRIu32"]", get_index(drc));
+ object_property_add_child(owner, prop_name, OBJECT(drc), NULL);
object_property_set_bool(OBJECT(drc), true, "realized", NULL);
+ g_free(prop_name);

/* human-readable name for a DRC to encode into the DT
* description. this is mainly only used within a guest in place
--
2.4.3
David Gibson
2015-09-21 01:06:25 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Support hotplug identifier type RTAS_LOG_V6_HP_ID_DRC_COUNT that allows
hotplugging of DRCs by specifying the DRC count.

While we are here, rename

spapr_hotplug_req_add_event() to spapr_hotplug_req_add_by_index()
spapr_hotplug_req_remove_event() to spapr_hotplug_req_remove_by_index()

so that they match with spapr_hotplug_req_add_by_count().

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 2 +-
hw/ppc/spapr_events.c | 47 ++++++++++++++++++++++++++++++++++++++---------
hw/ppc/spapr_pci.c | 4 ++--
include/hw/ppc/spapr.h | 8 ++++++--
4 files changed, 47 insertions(+), 14 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 94e8522..10f0d8a 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2062,7 +2062,7 @@ static void spapr_add_lmbs(DeviceState *dev, uint64_t addr, uint64_t size,

drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
drck->attach(drc, dev, fdt, fdt_offset, !dev->hotplugged, errp);
- spapr_hotplug_req_add_event(drc);
+ spapr_hotplug_req_add_by_index(drc);
addr += SPAPR_MEMORY_BLOCK_SIZE;
}
}
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index 98bf7ae..744ea62 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -386,7 +386,9 @@ static void spapr_powerdown_req(Notifier *n, void *opaque)
qemu_irq_pulse(xics_get_qirq(spapr->icp, spapr->check_exception_irq));
}

-static void spapr_hotplug_req_event(sPAPRDRConnector *drc, uint8_t hp_action)
+static void spapr_hotplug_req_event(uint8_t hp_id, uint8_t hp_action,
+ sPAPRDRConnectorType drc_type,
+ uint32_t drc)
{
sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
struct hp_log_full *new_hp;
@@ -395,8 +397,6 @@ static void spapr_hotplug_req_event(sPAPRDRConnector *drc, uint8_t hp_action)
struct rtas_event_log_v6_maina *maina;
struct rtas_event_log_v6_mainb *mainb;
struct rtas_event_log_v6_hp *hp;
- sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
- sPAPRDRConnectorType drc_type = drck->get_type(drc);

new_hp = g_malloc0(sizeof(struct hp_log_full));
hdr = &new_hp->hdr;
@@ -427,8 +427,7 @@ static void spapr_hotplug_req_event(sPAPRDRConnector *drc, uint8_t hp_action)
hp->hdr.section_length = cpu_to_be16(sizeof(*hp));
hp->hdr.section_version = 1; /* includes extended modifier */
hp->hotplug_action = hp_action;
- hp->drc.index = cpu_to_be32(drck->get_index(drc));
- hp->hotplug_identifier = RTAS_LOG_V6_HP_ID_DRC_INDEX;
+ hp->hotplug_identifier = hp_id;

switch (drc_type) {
case SPAPR_DR_CONNECTOR_TYPE_PCI:
@@ -445,19 +444,49 @@ static void spapr_hotplug_req_event(sPAPRDRConnector *drc, uint8_t hp_action)
return;
}

+ if (hp_id == RTAS_LOG_V6_HP_ID_DRC_COUNT) {
+ hp->drc.count = cpu_to_be32(drc);
+ } else if (hp_id == RTAS_LOG_V6_HP_ID_DRC_INDEX) {
+ hp->drc.index = cpu_to_be32(drc);
+ }
+
rtas_event_log_queue(RTAS_LOG_TYPE_HOTPLUG, new_hp, true);

qemu_irq_pulse(xics_get_qirq(spapr->icp, spapr->check_exception_irq));
}

-void spapr_hotplug_req_add_event(sPAPRDRConnector *drc)
+void spapr_hotplug_req_add_by_index(sPAPRDRConnector *drc)
+{
+ sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
+ sPAPRDRConnectorType drc_type = drck->get_type(drc);
+ uint32 index = drck->get_index(drc);
+
+ spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_INDEX,
+ RTAS_LOG_V6_HP_ACTION_ADD, drc_type, index);
+}
+
+void spapr_hotplug_req_remove_by_index(sPAPRDRConnector *drc)
+{
+ sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
+ sPAPRDRConnectorType drc_type = drck->get_type(drc);
+ uint32 index = drck->get_index(drc);
+
+ spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_INDEX,
+ RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, index);
+}
+
+void spapr_hotplug_req_add_by_count(sPAPRDRConnectorType drc_type,
+ uint32_t count)
{
- spapr_hotplug_req_event(drc, RTAS_LOG_V6_HP_ACTION_ADD);
+ spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT,
+ RTAS_LOG_V6_HP_ACTION_ADD, drc_type, count);
}

-void spapr_hotplug_req_remove_event(sPAPRDRConnector *drc)
+void spapr_hotplug_req_remove_by_count(sPAPRDRConnectorType drc_type,
+ uint32_t count)
{
- spapr_hotplug_req_event(drc, RTAS_LOG_V6_HP_ACTION_REMOVE);
+ spapr_hotplug_req_event(RTAS_LOG_V6_HP_ID_DRC_COUNT,
+ RTAS_LOG_V6_HP_ACTION_REMOVE, drc_type, count);
}

static void check_exception(PowerPCCPU *cpu, sPAPRMachineState *spapr,
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index d2188c8..b088491 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -1187,7 +1187,7 @@ static void spapr_phb_hot_plug_child(HotplugHandler *plug_handler,
return;
}
if (plugged_dev->hotplugged) {
- spapr_hotplug_req_add_event(drc);
+ spapr_hotplug_req_add_by_index(drc);
}
}

@@ -1215,7 +1215,7 @@ static void spapr_phb_hot_unplug_child(HotplugHandler *plug_handler,
error_propagate(errp, local_err);
return;
}
- spapr_hotplug_req_remove_event(drc);
+ spapr_hotplug_req_remove_by_index(drc);
}
}

diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 7d20798..ffb108d 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -594,8 +594,12 @@ int spapr_dma_dt(void *fdt, int node_off, const char *propname,
int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname,
sPAPRTCETable *tcet);
void spapr_pci_switch_vga(bool big_endian);
-void spapr_hotplug_req_add_event(sPAPRDRConnector *drc);
-void spapr_hotplug_req_remove_event(sPAPRDRConnector *drc);
+void spapr_hotplug_req_add_by_index(sPAPRDRConnector *drc);
+void spapr_hotplug_req_remove_by_index(sPAPRDRConnector *drc);
+void spapr_hotplug_req_add_by_count(sPAPRDRConnectorType drc_type,
+ uint32_t count);
+void spapr_hotplug_req_remove_by_count(sPAPRDRConnectorType drc_type,
+ uint32_t count);

/* rtas-configure-connector state */
struct sPAPRConfigureConnectorState {
--
2.4.3
David Gibson
2015-09-21 01:06:06 UTC
Permalink
From: Gavin Shan <***@linux.vnet.ibm.com>

This introduces rtas_ldq() to load 64-bits parameter from continuous
two 4-bytes memory chunk of RTAS parameter buffer, to simplify the
code.

Signed-off-by: Gavin Shan <***@linux.vnet.ibm.com>
Reviewed-by: Thomas Huth <***@redhat.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr_pci.c | 20 ++++++++++----------
include/hw/ppc/spapr.h | 5 +++++
2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 6782fd0..54292c9 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -140,7 +140,7 @@ static void rtas_ibm_read_pci_config(PowerPCCPU *cpu, sPAPRMachineState *spapr,
return;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
size = rtas_ld(args, 3);
addr = rtas_ld(args, 0);

@@ -206,7 +206,7 @@ static void rtas_ibm_write_pci_config(PowerPCCPU *cpu, sPAPRMachineState *spapr,
return;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
val = rtas_ld(args, 4);
size = rtas_ld(args, 3);
addr = rtas_ld(args, 0);
@@ -269,7 +269,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong rets)
{
uint32_t config_addr = rtas_ld(args, 0);
- uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ uint64_t buid = rtas_ldq(args, 1);
unsigned int func = rtas_ld(args, 3);
unsigned int req_num = rtas_ld(args, 4); /* 0 == remove all */
unsigned int seq_num = rtas_ld(args, 5);
@@ -391,7 +391,7 @@ static void rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu,
target_ulong rets)
{
uint32_t config_addr = rtas_ld(args, 0);
- uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ uint64_t buid = rtas_ldq(args, 1);
unsigned int intr_src_num = -1, ioa_intr_num = rtas_ld(args, 3);
sPAPRPHBState *phb = NULL;
PCIDevice *pdev = NULL;
@@ -440,7 +440,7 @@ static void rtas_ibm_set_eeh_option(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
addr = rtas_ld(args, 0);
option = rtas_ld(args, 3);

@@ -484,7 +484,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) {
goto param_error_exit;
@@ -539,7 +539,7 @@ static void rtas_ibm_read_slot_reset_state2(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) {
goto param_error_exit;
@@ -584,7 +584,7 @@ static void rtas_ibm_set_slot_reset(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
option = rtas_ld(args, 3);
sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) {
@@ -619,7 +619,7 @@ static void rtas_ibm_configure_pe(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) {
goto param_error_exit;
@@ -654,7 +654,7 @@ static void rtas_ibm_slot_error_detail(PowerPCCPU *cpu,
goto param_error_exit;
}

- buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
+ buid = rtas_ldq(args, 1);
sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) {
goto param_error_exit;
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index d250967..cbe3463 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -489,6 +489,11 @@ static inline uint32_t rtas_ld(target_ulong phys, int n)
return ldl_be_phys(&address_space_memory, ppc64_phys_to_real(phys + 4*n));
}

+static inline uint64_t rtas_ldq(target_ulong phys, int n)
+{
+ return (uint64_t)rtas_ld(phys, n) << 32 | rtas_ld(phys, n + 1);
+}
+
static inline void rtas_st(target_ulong phys, int n, uint32_t val)
{
stl_be_phys(&address_space_memory, ppc64_phys_to_real(phys + 4*n), val);
--
2.4.3
David Gibson
2015-09-21 01:06:22 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Currently when user specifies more slots than allowed max of
SPAPR_MAX_RAM_SLOTS (32), we error out like this:

qemu-system-ppc64: unsupported amount of memory slots: 64

Let the user know about the max allowed slots like this:

qemu-system-ppc64: Specified number of memory slots 64 exceeds max supported 32

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 23d4d85..dd0e5c7 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1774,8 +1774,8 @@ static void ppc_spapr_init(MachineState *machine)
ram_addr_t hotplug_mem_size = machine->maxram_size - machine->ram_size;

if (machine->ram_slots > SPAPR_MAX_RAM_SLOTS) {
- error_report("unsupported amount of memory slots: %"PRIu64,
- machine->ram_slots);
+ error_report("Specified number of memory slots %"PRIu64" exceeds max supported %d\n",
+ machine->ram_slots, SPAPR_MAX_RAM_SLOTS);
exit(EXIT_FAILURE);
}
--
2.4.3
David Gibson
2015-09-21 01:06:10 UTC
Permalink
From: Alexey Kardashevskiy <***@ozlabs.ru>

For setting debug watchpoints, sPAPR guests use H_SET_MODE hypercall.
The existing QEMU H_SET_MODE handler does not support this but
the KVM handler in HV KVM does. However it is not enabled.

This enables the in-kernel H_SET_MODE handler which handles:
- Completed Instruction Address Breakpoint Register
- Watch point 0 registers.

The rest is still handled in QEMU.

Reported-by: Anton Blanchard <***@samba.org>
Signed-off-by: Alexey Kardashevskiy <***@ozlabs.ru>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 1 +
target-ppc/kvm.c | 5 +++++
target-ppc/kvm_ppc.h | 5 +++++
3 files changed, 11 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 9e187a1..45e0e54 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1546,6 +1546,7 @@ static void ppc_spapr_init(MachineState *machine)
if (kvm_enabled()) {
/* Enable H_LOGICAL_CI_* so SLOF can talk to in-kernel devices */
kvmppc_enable_logical_ci_hcalls();
+ kvmppc_enable_set_mode_hcall();
}

/* allocate RAM */
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 110436d..9cf5308 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -1953,6 +1953,11 @@ void kvmppc_enable_logical_ci_hcalls(void)
kvmppc_enable_hcall(kvm_state, H_LOGICAL_CI_STORE);
}

+void kvmppc_enable_set_mode_hcall(void)
+{
+ kvmppc_enable_hcall(kvm_state, H_SET_MODE);
+}
+
void kvmppc_set_papr(PowerPCCPU *cpu)
{
CPUState *cs = CPU(cpu);
diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
index 4d30e27..0714ba0 100644
--- a/target-ppc/kvm_ppc.h
+++ b/target-ppc/kvm_ppc.h
@@ -25,6 +25,7 @@ int kvmppc_get_hasidle(CPUPPCState *env);
int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len);
int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level);
void kvmppc_enable_logical_ci_hcalls(void);
+void kvmppc_enable_set_mode_hcall(void);
void kvmppc_set_papr(PowerPCCPU *cpu);
int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t cpu_version);
void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy);
@@ -112,6 +113,10 @@ static inline void kvmppc_enable_logical_ci_hcalls(void)
{
}

+static inline void kvmppc_enable_set_mode_hcall(void)
+{
+}
+
static inline void kvmppc_set_papr(PowerPCCPU *cpu)
{
}
--
2.4.3
David Gibson
2015-09-21 01:06:08 UTC
Permalink
From: Alexey Kardashevskiy <***@ozlabs.ru>

The changes are:
1. GPT support;
2. Much faster VGA support.
Add missing half word access case to _FASTRMOVE and _FASTMOVE
Remove unused RMOVE64 stub
fbuffer: Implement RFILL as an accelerated primitive
fbuffer: Implement MRMOVE as an accelerated primitive
fbuffer: Precalculate line length in bytes
terminal: Disable the terminal-write trace by default
boot: remove trailing ":" in the bootpath
ci: implement boot client interface
boot: bootpath should be complete device path
fbuffer: Use a smaller cursor
fbuffer: Improve invert-region helper
usb-hid: Caps is not always shift
cas: Increase FDT buffer size to accomodate larger ibm, cas node properties
README: Update with patch submittion note
disk-label: add support for booting from GPT FAT partition
disk-label: introduce helper to check fat filesystem
introduce 8-byte LE helpers
disk-label: simplify gpt-prep-partition? routine
fbuffer: introduce the invert-region-x helper
fbuffer: introduce the invert-region helper
fbuffer: simplify address computations in fb8-toggle-cursor
Signed-off-by: Alexey Kardashevskiy <***@ozlabs.ru>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
pc-bios/README | 2 +-
pc-bios/slof.bin | Bin 912720 -> 915584 bytes
roms/SLOF | 2 +-
3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pc-bios/README b/pc-bios/README
index 05cf042..e4154ab 100644
--- a/pc-bios/README
+++ b/pc-bios/README
@@ -17,7 +17,7 @@
- SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware
implementation for certain IBM POWER hardware. The sources are at
https://github.com/aik/SLOF, and the image currently in qemu is
- built from git tag qemu-slof-20150429.
+ built from git tag qemu-slof-20150813.

- sgabios (the Serial Graphics Adapter option ROM) provides a means for
legacy x86 software to communicate with an attached serial console as
diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin
index 0398ac67bc8d07410fe2ccc9d62c376ef3cf87c3..701933f7dc7b20f6cfcbb538a95142d0a598ada8 100644
GIT binary patch
delta 165318
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

delta 163955
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
XeDaqAj_$**y?;P!-`)4GKjQxb%CXf`

diff --git a/roms/SLOF b/roms/SLOF
index 7d766a3..811277a 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@
-Subproject commit 7d766a3ac9b2474f6c7da0084d43590cbbf047bf
+Subproject commit 811277ac91f674a9273e2b529791e9b75350f3e8
--
2.4.3
David Gibson
2015-09-21 01:06:23 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

When NUMA isn't configured explicitly, assume node 0 is present for
the purpose of creating ibm,associativity-lookup-arrays property
under ibm,dynamic-reconfiguration-memory DT node. This ensures that
the associativity index property is correctly updated in ibm,dynamic-memory
for the LMB that is hotplugged.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index dd0e5c7..c3c5e0a 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -724,6 +724,7 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
uint32_t *int_buf, *cur_index, buf_len;
+ int nr_nodes = nb_numa_nodes ? nb_numa_nodes : 1;

/* Allocate enough buffer size to fit in ibm,dynamic-memory */
buf_len = nr_lmbs * SPAPR_DR_LMB_LIST_ENTRY_SIZE * sizeof(uint32_t) +
@@ -789,10 +790,10 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)

/* ibm,associativity-lookup-arrays */
cur_index = int_buf;
- int_buf[0] = cpu_to_be32(nb_numa_nodes);
+ int_buf[0] = cpu_to_be32(nr_nodes);
int_buf[1] = cpu_to_be32(4); /* Number of entries per associativity list */
cur_index += 2;
- for (i = 0; i < nb_numa_nodes; i++) {
+ for (i = 0; i < nr_nodes; i++) {
uint32_t associativity[] = {
cpu_to_be32(0x0),
cpu_to_be32(0x0),
--
2.4.3
David Gibson
2015-09-21 01:06:18 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Parse ibm,architecture.vec table obtained from the guest and enable
memory node configuration via ibm,dynamic-reconfiguration-memory if guest
supports it. This is in preparation to support memory hotplug for
sPAPR guests.

This changes the way memory node configuration is done. Currently all
memory nodes are built upfront. But after this patch, only ***@0 node
for RMA is built upfront. Guest kernel boots with just that and rest of
the memory nodes (via ***@XXX or ibm,dynamic-reconfiguration-memory)
are built when guest does ibm,client-architecture-support call.

Note: This patch needs a SLOF enhancement which is already part of
SLOF binary in QEMU.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
docs/specs/ppc-spapr-hotplug.txt | 48 +++++++++
hw/ppc/spapr.c | 210 +++++++++++++++++++++++++++++++--------
hw/ppc/spapr_hcall.c | 51 ++++++++--
include/hw/ppc/spapr.h | 15 ++-
4 files changed, 274 insertions(+), 50 deletions(-)

diff --git a/docs/specs/ppc-spapr-hotplug.txt b/docs/specs/ppc-spapr-hotplug.txt
index 46e0719..631b0ca 100644
--- a/docs/specs/ppc-spapr-hotplug.txt
+++ b/docs/specs/ppc-spapr-hotplug.txt
@@ -302,4 +302,52 @@ consisting of <phys>, <size> and <maxcpus>.
pseries guests use this property to note the maximum allowed CPUs for the
guest.

+== ibm,dynamic-reconfiguration-memory ==
+
+ibm,dynamic-reconfiguration-memory is a device tree node that represents
+dynamically reconfigurable logical memory blocks (LMB). This node
+is generated only when the guest advertises the support for it via
+ibm,client-architecture-support call. Memory that is not dynamically
+reconfigurable is represented by /memory nodes. The properties of this
+node that are of interest to the sPAPR memory hotplug implementation
+in QEMU are described here.
+
+ibm,lmb-size
+
+This 64bit integer defines the size of each dynamically reconfigurable LMB.
+
+ibm,associativity-lookup-arrays
+
+This property defines a lookup array in which the NUMA associativity
+information for each LMB can be found. It is a property encoded array
+that begins with an integer M, the number of associativity lists followed
+by an integer N, the number of entries per associativity list and terminated
+by M associativity lists each of length N integers.
+
+This property provides the same information as given by ibm,associativity
+property in a /memory node. Each assigned LMB has an index value between
+0 and M-1 which is used as an index into this table to select which
+associativity list to use for the LMB. This index value for each LMB
+is defined in ibm,dynamic-memory property.
+
+ibm,dynamic-memory
+
+This property describes the dynamically reconfigurable memory. It is a
+property encoded array that has an integer N, the number of LMBs followed
+by N LMB list entires.
+
+Each LMB list entry consists of the following elements:
+
+- Logical address of the start of the LMB encoded as a 64bit integer. This
+ corresponds to reg property in /memory node.
+- DRC index of the LMB that corresponds to ibm,my-drc-index property
+ in a /memory node.
+- Four bytes reserved for expansion.
+- Associativity list index for the LMB that is used as an index into
+ ibm,associativity-lookup-arrays property described earlier. This
+ is used to retrieve the right associativity list to be used for this
+ LMB.
+- A 32bit flags word. The bit at bit position 0x00000008 defines whether
+ the LMB is assigned to the the partition as of boot time.
+
[1] http://thread.gmane.org/gmane.linux.ports.ppc.embedded/75350/focus=106867
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index f8d5b9b..f2477b2 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -504,44 +504,7 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
return fdt;
}

-int spapr_h_cas_compose_response(sPAPRMachineState *spapr,
- target_ulong addr, target_ulong size)
-{
- void *fdt, *fdt_skel;
- sPAPRDeviceTreeUpdateHeader hdr = { .version_id = 1 };
-
- size -= sizeof(hdr);
-
- /* Create sceleton */
- fdt_skel = g_malloc0(size);
- _FDT((fdt_create(fdt_skel, size)));
- _FDT((fdt_begin_node(fdt_skel, "")));
- _FDT((fdt_end_node(fdt_skel)));
- _FDT((fdt_finish(fdt_skel)));
- fdt = g_malloc0(size);
- _FDT((fdt_open_into(fdt_skel, fdt, size)));
- g_free(fdt_skel);
-
- /* Fix skeleton up */
- _FDT((spapr_fixup_cpu_dt(fdt, spapr)));
-
- /* Pack resulting tree */
- _FDT((fdt_pack(fdt)));
-
- if (fdt_totalsize(fdt) + sizeof(hdr) > size) {
- trace_spapr_cas_failed(size);
- return -1;
- }
-
- cpu_physical_memory_write(addr, &hdr, sizeof(hdr));
- cpu_physical_memory_write(addr + sizeof(hdr), fdt, fdt_totalsize(fdt));
- trace_spapr_cas_continue(fdt_totalsize(fdt) + sizeof(hdr));
- g_free(fdt);
-
- return 0;
-}
-
-static void spapr_populate_memory_node(void *fdt, int nodeid, hwaddr start,
+static int spapr_populate_memory_node(void *fdt, int nodeid, hwaddr start,
hwaddr size)
{
uint32_t associativity[] = {
@@ -564,6 +527,7 @@ static void spapr_populate_memory_node(void *fdt, int nodeid, hwaddr start,
sizeof(mem_reg_property))));
_FDT((fdt_setprop(fdt, off, "ibm,associativity", associativity,
sizeof(associativity))));
+ return off;
}

static int spapr_populate_memory(sPAPRMachineState *spapr, void *fdt)
@@ -595,7 +559,6 @@ static int spapr_populate_memory(sPAPRMachineState *spapr, void *fdt)
}
if (!mem_start) {
/* ppc_spapr_init() checks for rma_size <= node0_size already */
- spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
mem_start += spapr->rma_size;
node_size -= spapr->rma_size;
}
@@ -745,6 +708,154 @@ static void spapr_populate_cpus_dt_node(void *fdt, sPAPRMachineState *spapr)

}

+/*
+ * Adds ibm,dynamic-reconfiguration-memory node.
+ * Refer to docs/specs/ppc-spapr-hotplug.txt for the documentation
+ * of this device tree node.
+ */
+static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
+{
+ MachineState *machine = MACHINE(spapr);
+ int ret, i, offset;
+ uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
+ uint32_t prop_lmb_size[] = {0, cpu_to_be32(lmb_size)};
+ uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
+ uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
+ uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
+ uint32_t *int_buf, *cur_index, buf_len;
+
+ /* Allocate enough buffer size to fit in ibm,dynamic-memory */
+ buf_len = nr_lmbs * SPAPR_DR_LMB_LIST_ENTRY_SIZE * sizeof(uint32_t) +
+ sizeof(uint32_t);
+ cur_index = int_buf = g_malloc0(buf_len);
+
+ offset = fdt_add_subnode(fdt, 0, "ibm,dynamic-reconfiguration-memory");
+
+ ret = fdt_setprop(fdt, offset, "ibm,lmb-size", prop_lmb_size,
+ sizeof(prop_lmb_size));
+ if (ret < 0) {
+ goto out;
+ }
+
+ ret = fdt_setprop_cell(fdt, offset, "ibm,memory-flags-mask", 0xff);
+ if (ret < 0) {
+ goto out;
+ }
+
+ ret = fdt_setprop_cell(fdt, offset, "ibm,memory-preservation-time", 0x0);
+ if (ret < 0) {
+ goto out;
+ }
+
+ /* ibm,dynamic-memory */
+ int_buf[0] = cpu_to_be32(nr_lmbs);
+ cur_index++;
+ for (i = 0; i < nr_lmbs; i++) {
+ sPAPRDRConnector *drc;
+ sPAPRDRConnectorClass *drck;
+ uint64_t addr;
+ uint32_t *dynamic_memory = cur_index;
+
+ if (i < nr_assigned_lmbs) {
+ addr = (i + nr_rma_lmbs) * lmb_size;
+ } else {
+ addr = (i - nr_assigned_lmbs) * lmb_size +
+ spapr->hotplug_memory.base;
+ }
+ drc = spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB,
+ addr/lmb_size);
+ g_assert(drc);
+ drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
+
+ dynamic_memory[0] = cpu_to_be32(addr >> 32);
+ dynamic_memory[1] = cpu_to_be32(addr & 0xffffffff);
+ dynamic_memory[2] = cpu_to_be32(drck->get_index(drc));
+ dynamic_memory[3] = cpu_to_be32(0); /* reserved */
+ dynamic_memory[4] = cpu_to_be32(numa_get_node(addr, NULL));
+ if (addr < machine->ram_size ||
+ memory_region_present(get_system_memory(), addr)) {
+ dynamic_memory[5] = cpu_to_be32(SPAPR_LMB_FLAGS_ASSIGNED);
+ } else {
+ dynamic_memory[5] = cpu_to_be32(0);
+ }
+
+ cur_index += SPAPR_DR_LMB_LIST_ENTRY_SIZE;
+ }
+ ret = fdt_setprop(fdt, offset, "ibm,dynamic-memory", int_buf, buf_len);
+ if (ret < 0) {
+ goto out;
+ }
+
+ /* ibm,associativity-lookup-arrays */
+ cur_index = int_buf;
+ int_buf[0] = cpu_to_be32(nb_numa_nodes);
+ int_buf[1] = cpu_to_be32(4); /* Number of entries per associativity list */
+ cur_index += 2;
+ for (i = 0; i < nb_numa_nodes; i++) {
+ uint32_t associativity[] = {
+ cpu_to_be32(0x0),
+ cpu_to_be32(0x0),
+ cpu_to_be32(0x0),
+ cpu_to_be32(i)
+ };
+ memcpy(cur_index, associativity, sizeof(associativity));
+ cur_index += 4;
+ }
+ ret = fdt_setprop(fdt, offset, "ibm,associativity-lookup-arrays", int_buf,
+ (cur_index - int_buf) * sizeof(uint32_t));
+out:
+ g_free(int_buf);
+ return ret;
+}
+
+int spapr_h_cas_compose_response(sPAPRMachineState *spapr,
+ target_ulong addr, target_ulong size,
+ bool cpu_update, bool memory_update)
+{
+ void *fdt, *fdt_skel;
+ sPAPRDeviceTreeUpdateHeader hdr = { .version_id = 1 };
+ sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(qdev_get_machine());
+
+ size -= sizeof(hdr);
+
+ /* Create sceleton */
+ fdt_skel = g_malloc0(size);
+ _FDT((fdt_create(fdt_skel, size)));
+ _FDT((fdt_begin_node(fdt_skel, "")));
+ _FDT((fdt_end_node(fdt_skel)));
+ _FDT((fdt_finish(fdt_skel)));
+ fdt = g_malloc0(size);
+ _FDT((fdt_open_into(fdt_skel, fdt, size)));
+ g_free(fdt_skel);
+
+ /* Fixup cpu nodes */
+ if (cpu_update) {
+ _FDT((spapr_fixup_cpu_dt(fdt, spapr)));
+ }
+
+ /* Generate memory nodes or ibm,dynamic-reconfiguration-memory node */
+ if (memory_update && smc->dr_lmb_enabled) {
+ _FDT((spapr_populate_drconf_memory(spapr, fdt)));
+ } else {
+ _FDT((spapr_populate_memory(spapr, fdt)));
+ }
+
+ /* Pack resulting tree */
+ _FDT((fdt_pack(fdt)));
+
+ if (fdt_totalsize(fdt) + sizeof(hdr) > size) {
+ trace_spapr_cas_failed(size);
+ return -1;
+ }
+
+ cpu_physical_memory_write(addr, &hdr, sizeof(hdr));
+ cpu_physical_memory_write(addr + sizeof(hdr), fdt, fdt_totalsize(fdt));
+ trace_spapr_cas_continue(fdt_totalsize(fdt) + sizeof(hdr));
+ g_free(fdt);
+
+ return 0;
+}
+
static void spapr_finalize_fdt(sPAPRMachineState *spapr,
hwaddr fdt_addr,
hwaddr rtas_addr,
@@ -763,10 +874,23 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
/* open out the base tree into a temp buffer for the final tweaks */
_FDT((fdt_open_into(spapr->fdt_skel, fdt, FDT_MAX_SIZE)));

- ret = spapr_populate_memory(spapr, fdt);
- if (ret < 0) {
- fprintf(stderr, "couldn't setup memory nodes in fdt\n");
- exit(1);
+ /*
+ * Add ***@0 node to represent RMA. Rest of the memory is either
+ * represented by memory nodes or ibm,dynamic-reconfiguration-memory
+ * node later during ibm,client-architecture-support call.
+ *
+ * If NUMA is configured, ensure that ***@0 ends up in the
+ * first memory-less node.
+ */
+ if (nb_numa_nodes) {
+ for (i = 0; i < nb_numa_nodes; ++i) {
+ if (numa_info[i].node_mem) {
+ spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
+ break;
+ }
+ }
+ } else {
+ spapr_populate_memory_node(fdt, 0, 0, spapr->rma_size);
}

ret = spapr_populate_vdevice(spapr->vio_bus, fdt);
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 71fc9f2..cebceea 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -808,6 +808,32 @@ static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPRMachineState *spapr,
return ret;
}

+/*
+ * Return the offset to the requested option vector @vector in the
+ * option vector table @table.
+ */
+static target_ulong cas_get_option_vector(int vector, target_ulong table)
+{
+ int i;
+ char nr_vectors, nr_entries;
+
+ if (!table) {
+ return 0;
+ }
+
+ nr_vectors = (ldl_phys(&address_space_memory, table) >> 24) + 1;
+ if (!vector || vector > nr_vectors) {
+ return 0;
+ }
+ table++; /* skip nr option vectors */
+
+ for (i = 0; i < vector - 1; i++) {
+ nr_entries = ldl_phys(&address_space_memory, table) >> 24;
+ table += nr_entries + 2;
+ }
+ return table;
+}
+
typedef struct {
PowerPCCPU *cpu;
uint32_t cpu_version;
@@ -828,19 +854,22 @@ static void do_set_compat(void *arg)
((cpuver) == CPU_POWERPC_LOGICAL_2_06_PLUS) ? 2061 : \
((cpuver) == CPU_POWERPC_LOGICAL_2_07) ? 2070 : 0)

+#define OV5_DRCONF_MEMORY 0x20
+
static target_ulong h_client_architecture_support(PowerPCCPU *cpu_,
sPAPRMachineState *spapr,
target_ulong opcode,
target_ulong *args)
{
- target_ulong list = args[0];
+ target_ulong list = args[0], ov_table;
PowerPCCPUClass *pcc_ = POWERPC_CPU_GET_CLASS(cpu_);
CPUState *cs;
- bool cpu_match = false;
+ bool cpu_match = false, cpu_update = true, memory_update = false;
unsigned old_cpu_version = cpu_->cpu_version;
unsigned compat_lvl = 0, cpu_version = 0;
unsigned max_lvl = get_compat_level(cpu_->max_compat);
int counter;
+ char ov5_byte2;

/* Parse PVR list */
for (counter = 0; counter < 512; ++counter) {
@@ -890,8 +919,6 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu_,
}
}

- /* For the future use: here @list points to the first capability */
-
/* Parsing finished */
trace_spapr_cas_pvr(cpu_->cpu_version, cpu_match,
cpu_version, pcc_->pcr_mask);
@@ -915,14 +942,26 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu_,
}

if (!cpu_version) {
- return H_SUCCESS;
+ cpu_update = false;
}

+ /* For the future use: here @ov_table points to the first option vector */
+ ov_table = list;
+
+ list = cas_get_option_vector(5, ov_table);
if (!list) {
return H_SUCCESS;
}

- if (spapr_h_cas_compose_response(spapr, args[1], args[2])) {
+ /* @list now points to OV 5 */
+ list += 2;
+ ov5_byte2 = rtas_ld(list, 0) >> 24;
+ if (ov5_byte2 & OV5_DRCONF_MEMORY) {
+ memory_update = true;
+ }
+
+ if (spapr_h_cas_compose_response(spapr, args[1], args[2],
+ cpu_update, memory_update)) {
qemu_system_reset_request();
}

diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 5de54d4..7d20798 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -581,7 +581,8 @@ struct sPAPREventLogEntry {
void spapr_events_init(sPAPRMachineState *sm);
void spapr_events_fdt_skel(void *fdt, uint32_t epow_irq);
int spapr_h_cas_compose_response(sPAPRMachineState *sm,
- target_ulong addr, target_ulong size);
+ target_ulong addr, target_ulong size,
+ bool cpu_update, bool memory_update);
sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn,
uint64_t bus_offset,
uint32_t page_shift,
@@ -623,4 +624,16 @@ int spapr_rtc_import_offset(DeviceState *dev, int64_t legacy_offset);
/* 1GB alignment for hotplug memory region */
#define SPAPR_HOTPLUG_MEM_ALIGN (1ULL << 30)

+/*
+ * Number of 32 bit words in each LMB list entry in ibm,dynamic-memory
+ * property under ibm,dynamic-reconfiguration-memory node.
+ */
+#define SPAPR_DR_LMB_LIST_ENTRY_SIZE 6
+
+/*
+ * This flag value defines the LMB as assigned in ibm,dynamic-memory
+ * property under ibm,dynamic-reconfiguration-memory node.
+ */
+#define SPAPR_LMB_FLAGS_ASSIGNED 0x00000008
+
#endif /* !defined (__HW_SPAPR_H__) */
--
2.4.3
David Gibson
2015-09-21 01:06:20 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Make use of pc-dimm infrastructure to support memory hotplug
for PowerPC.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++
hw/ppc/spapr_events.c | 8 ++--
2 files changed, 123 insertions(+), 3 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 6f9e64a..9ab6284 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -34,6 +34,7 @@
#include "sysemu/block-backend.h"
#include "sysemu/cpus.h"
#include "sysemu/kvm.h"
+#include "sysemu/device_tree.h"
#include "kvm_ppc.h"
#include "migration/migration.h"
#include "mmu-hash64.h"
@@ -862,6 +863,7 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
hwaddr rtas_size)
{
MachineState *machine = MACHINE(qdev_get_machine());
+ sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine);
const char *boot_device = machine->boot_order;
int ret, i;
size_t cb = 0;
@@ -945,6 +947,10 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
spapr_populate_chosen_stdout(fdt, spapr->vio_bus);
}

+ if (smc->dr_lmb_enabled) {
+ _FDT(spapr_drc_populate_dt(fdt, 0, NULL, SPAPR_DR_CONNECTOR_TYPE_LMB));
+ }
+
_FDT((fdt_pack(fdt)));

if (fdt_totalsize(fdt) > FDT_MAX_SIZE) {
@@ -2055,12 +2061,120 @@ static void spapr_nmi(NMIState *n, int cpu_index, Error **errp)
}
}

+static void spapr_add_lmbs(DeviceState *dev, uint64_t addr, uint64_t size,
+ uint32_t node, Error **errp)
+{
+ sPAPRDRConnector *drc;
+ sPAPRDRConnectorClass *drck;
+ uint32_t nr_lmbs = size/SPAPR_MEMORY_BLOCK_SIZE;
+ int i, fdt_offset, fdt_size;
+ void *fdt;
+
+ /*
+ * Check for DRC connectors and send hotplug notification to the
+ * guest only in case of hotplugged memory. This allows cold plugged
+ * memory to be specified at boot time.
+ */
+ if (!dev->hotplugged) {
+ return;
+ }
+
+ for (i = 0; i < nr_lmbs; i++) {
+ drc = spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB,
+ addr/SPAPR_MEMORY_BLOCK_SIZE);
+ g_assert(drc);
+
+ fdt = create_device_tree(&fdt_size);
+ fdt_offset = spapr_populate_memory_node(fdt, node, addr,
+ SPAPR_MEMORY_BLOCK_SIZE);
+
+ drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
+ drck->attach(drc, dev, fdt, fdt_offset, !dev->hotplugged, errp);
+ spapr_hotplug_req_add_event(drc);
+ addr += SPAPR_MEMORY_BLOCK_SIZE;
+ }
+}
+
+static void spapr_memory_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
+ uint32_t node, Error **errp)
+{
+ Error *local_err = NULL;
+ sPAPRMachineState *ms = SPAPR_MACHINE(hotplug_dev);
+ PCDIMMDevice *dimm = PC_DIMM(dev);
+ PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
+ MemoryRegion *mr = ddc->get_memory_region(dimm);
+ uint64_t align = memory_region_get_alignment(mr);
+ uint64_t size = memory_region_size(mr);
+ uint64_t addr;
+
+ if (size % SPAPR_MEMORY_BLOCK_SIZE) {
+ error_setg(&local_err, "Hotplugged memory size must be a multiple of "
+ "%lld MB", SPAPR_MEMORY_BLOCK_SIZE/M_BYTE);
+ goto out;
+ }
+
+ pc_dimm_memory_plug(dev, &ms->hotplug_memory, mr, align, &local_err);
+ if (local_err) {
+ goto out;
+ }
+
+ addr = object_property_get_int(OBJECT(dimm), PC_DIMM_ADDR_PROP, &local_err);
+ if (local_err) {
+ pc_dimm_memory_unplug(dev, &ms->hotplug_memory, mr);
+ goto out;
+ }
+
+ spapr_add_lmbs(dev, addr, size, node, &error_abort);
+
+out:
+ error_propagate(errp, local_err);
+}
+
+static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
+ DeviceState *dev, Error **errp)
+{
+ sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(qdev_get_machine());
+
+ if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
+ uint32_t node;
+
+ if (!smc->dr_lmb_enabled) {
+ error_setg(errp, "Memory hotplug not supported for this machine");
+ return;
+ }
+ node = object_property_get_int(OBJECT(dev), PC_DIMM_NODE_PROP, errp);
+ if (*errp) {
+ return;
+ }
+
+ spapr_memory_plug(hotplug_dev, dev, node, errp);
+ }
+}
+
+static void spapr_machine_device_unplug(HotplugHandler *hotplug_dev,
+ DeviceState *dev, Error **errp)
+{
+ if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
+ error_setg(errp, "Memory hot unplug not supported by sPAPR");
+ }
+}
+
+static HotplugHandler *spapr_get_hotpug_handler(MachineState *machine,
+ DeviceState *dev)
+{
+ if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
+ return HOTPLUG_HANDLER(machine);
+ }
+ return NULL;
+}
+
static void spapr_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(oc);
FWPathProviderClass *fwc = FW_PATH_PROVIDER_CLASS(oc);
NMIClass *nc = NMI_CLASS(oc);
+ HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);

mc->init = ppc_spapr_init;
mc->reset = ppc_spapr_reset;
@@ -2072,6 +2186,9 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
mc->kvm_type = spapr_kvm_type;
mc->has_dynamic_sysbus = true;
mc->pci_allow_0_address = true;
+ mc->get_hotplug_handler = spapr_get_hotpug_handler;
+ hc->plug = spapr_machine_device_plug;
+ hc->unplug = spapr_machine_device_unplug;

smc->dr_lmb_enabled = false;
fwc->get_dev_path = spapr_get_fw_dev_path;
@@ -2089,6 +2206,7 @@ static const TypeInfo spapr_machine_info = {
.interfaces = (InterfaceInfo[]) {
{ TYPE_FW_PATH_PROVIDER },
{ TYPE_NMI },
+ { TYPE_HOTPLUG_HANDLER },
{ }
},
};
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index f626eb7..98bf7ae 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -427,14 +427,16 @@ static void spapr_hotplug_req_event(sPAPRDRConnector *drc, uint8_t hp_action)
hp->hdr.section_length = cpu_to_be16(sizeof(*hp));
hp->hdr.section_version = 1; /* includes extended modifier */
hp->hotplug_action = hp_action;
-
+ hp->drc.index = cpu_to_be32(drck->get_index(drc));
+ hp->hotplug_identifier = RTAS_LOG_V6_HP_ID_DRC_INDEX;

switch (drc_type) {
case SPAPR_DR_CONNECTOR_TYPE_PCI:
- hp->drc.index = cpu_to_be32(drck->get_index(drc));
- hp->hotplug_identifier = RTAS_LOG_V6_HP_ID_DRC_INDEX;
hp->hotplug_type = RTAS_LOG_V6_HP_TYPE_PCI;
break;
+ case SPAPR_DR_CONNECTOR_TYPE_LMB:
+ hp->hotplug_type = RTAS_LOG_V6_HP_TYPE_MEMORY;
+ break;
default:
/* we shouldn't be signaling hotplug events for resources
* that don't support them
--
2.4.3
David Gibson
2015-09-21 01:06:24 UTC
Permalink
From: Bharata B Rao <***@linux.vnet.ibm.com>

Don't represent non-hotluggable memory under drconf node. With this
we don't have to create DRC objects for them.

The effect of this patch is that we revert back to ***@XXXX representation
for all the memory specified with -m option and represent the cold
plugged memory and hot-pluggable memory under
ibm,dynamic-reconfiguration-memory.

Signed-off-by: Bharata B Rao <***@linux.vnet.ibm.com>
Reviewed-by: David Gibson <***@gibson.dropbear.id.au>
Signed-off-by: David Gibson <***@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 47 +++++++++--------------------------------------
1 file changed, 9 insertions(+), 38 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index c3c5e0a..94e8522 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -560,6 +560,7 @@ static int spapr_populate_memory(sPAPRMachineState *spapr, void *fdt)
}
if (!mem_start) {
/* ppc_spapr_init() checks for rma_size <= node0_size already */
+ spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
mem_start += spapr->rma_size;
node_size -= spapr->rma_size;
}
@@ -720,9 +721,7 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
int ret, i, offset;
uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
uint32_t prop_lmb_size[] = {0, cpu_to_be32(lmb_size)};
- uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
- uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
- uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
+ uint32_t nr_lmbs = (machine->maxram_size - machine->ram_size)/lmb_size;
uint32_t *int_buf, *cur_index, buf_len;
int nr_nodes = nb_numa_nodes ? nb_numa_nodes : 1;

@@ -755,15 +754,9 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
for (i = 0; i < nr_lmbs; i++) {
sPAPRDRConnector *drc;
sPAPRDRConnectorClass *drck;
- uint64_t addr;
+ uint64_t addr = i * lmb_size + spapr->hotplug_memory.base;;
uint32_t *dynamic_memory = cur_index;

- if (i < nr_assigned_lmbs) {
- addr = (i + nr_rma_lmbs) * lmb_size;
- } else {
- addr = (i - nr_assigned_lmbs) * lmb_size +
- spapr->hotplug_memory.base;
- }
drc = spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB,
addr/lmb_size);
g_assert(drc);
@@ -838,8 +831,6 @@ int spapr_h_cas_compose_response(sPAPRMachineState *spapr,
/* Generate memory nodes or ibm,dynamic-reconfiguration-memory node */
if (memory_update && smc->dr_lmb_enabled) {
_FDT((spapr_populate_drconf_memory(spapr, fdt)));
- } else {
- _FDT((spapr_populate_memory(spapr, fdt)));
}

/* Pack resulting tree */
@@ -877,23 +868,10 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
/* open out the base tree into a temp buffer for the final tweaks */
_FDT((fdt_open_into(spapr->fdt_skel, fdt, FDT_MAX_SIZE)));

- /*
- * Add ***@0 node to represent RMA. Rest of the memory is either
- * represented by memory nodes or ibm,dynamic-reconfiguration-memory
- * node later during ibm,client-architecture-support call.
- *
- * If NUMA is configured, ensure that ***@0 ends up in the
- * first memory-less node.
- */
- if (nb_numa_nodes) {
- for (i = 0; i < nb_numa_nodes; ++i) {
- if (numa_info[i].node_mem) {
- spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
- break;
- }
- }
- } else {
- spapr_populate_memory_node(fdt, 0, 0, spapr->rma_size);
+ ret = spapr_populate_memory(spapr, fdt);
+ if (ret < 0) {
+ fprintf(stderr, "couldn't setup memory nodes in fdt\n");
+ exit(1);
}

ret = spapr_populate_vdevice(spapr->vio_bus, fdt);
@@ -1600,21 +1578,14 @@ static void spapr_create_lmb_dr_connectors(sPAPRMachineState *spapr)
{
MachineState *machine = MACHINE(spapr);
uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
- uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
- uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
- uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
+ uint32_t nr_lmbs = (machine->maxram_size - machine->ram_size)/lmb_size;
int i;

for (i = 0; i < nr_lmbs; i++) {
sPAPRDRConnector *drc;
uint64_t addr;

- if (i < nr_assigned_lmbs) {
- addr = (i + nr_rma_lmbs) * lmb_size;
- } else {
- addr = (i - nr_assigned_lmbs) * lmb_size +
- spapr->hotplug_memory.base;
- }
+ addr = i * lmb_size + spapr->hotplug_memory.base;
drc = spapr_dr_connector_new(OBJECT(spapr), SPAPR_DR_CONNECTOR_TYPE_LMB,
addr/lmb_size);
qemu_register_reset(spapr_drc_reset, drc);
--
2.4.3
Peter Maydell
2015-09-21 21:33:12 UTC
Permalink
Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2015-09-19 15:59:52 +0100)
git://github.com/dgibson/qemu.git spapr-next-20150921
ppc/spapr: Fix buffer overflow in spapr_populate_drconf_memory() (2015-09-21 10:35:42 +1000)
----------------------------------------------------------------
sPAPR Patch Queue: 2015-09-21
* Memory hotplug for "pseries" guests
* Fixes to the PAPR Dynamic Reconfiguration hotplug code
* Several PAPR compliance fixes
* GPT support
* Much faster VGA handling
Hi. I'm afraid this fails 'make check':

qemu-system-ppc64:
/home/petmay01/linaro/qemu-for-merges/hw/core/machine.c:324:
machine_class_base_init: Assertion `g_str_has_suffix(cname,
"-machine")' failed.

(happens for all the tests that run a qemu-system-ppc64 I think.)

thanks
-- PMM
David Gibson
2015-09-23 00:49:02 UTC
Permalink
Post by Peter Maydell
Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2015-09-19 15:59:52 +0100)
git://github.com/dgibson/qemu.git spapr-next-20150921
ppc/spapr: Fix buffer overflow in spapr_populate_drconf_memory() (2015-09-21 10:35:42 +1000)
----------------------------------------------------------------
sPAPR Patch Queue: 2015-09-21
* Memory hotplug for "pseries" guests
* Fixes to the PAPR Dynamic Reconfiguration hotplug code
* Several PAPR compliance fixes
* GPT support
* Much faster VGA handling
machine_class_base_init: Assertion `g_str_has_suffix(cname,
"-machine")' failed.
Sod, sorry. Right after I sent it I realised that I hadn't updated
the 2.5 machine type (added in that pull) for the stuff requiring
"-machine" in the type names.

I hadn't realised it broke things so badly though, because I thought
Travis CI would catch a make check failure for me. Seems not though
:(.

I'll fix this up and send a new pull shortly.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
Loading...