* [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
@ 2018-06-22 10:35 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 01/25] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
` (26 more replies)
0 siblings, 27 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
are available in the Git repository at:
git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
----------------------------------------------------------------
ppc patch queue 2018-06-22
Another assorted patch of patches for ppc and spapr.
* Rework of guest pagesize handling for ppc, which avoids guest
visibly different behaviour between accelerators
* A number of Pnv cleanups, working towards more complete POWER9
support
* Migration of VPA data, a significant bugfix
----------------------------------------------------------------
Alexey Kardashevskiy (1):
pseries: Update SLOF firmware image to qemu-slof-20180621
BALATON Zoltan (3):
ppc4xx_i2c: Remove unimplemented sdata and intr registers
ppc4xx_i2c: Implement directcntl register
target/ppc: Add missing opcode for icbt on PPC440
Cédric Le Goater (6):
ppc/pnv: introduce a new intc_create() operation to the chip model
ppc/pnv: introduce a new isa_create() operation to the chip model
ppc/pnv: introduce Pnv8Chip and Pnv9Chip models
ppc/pnv: consolidate the creation of the ISA bus device tree
spapr: split the IRQ allocation sequence
spapr: remove unused spapr_irq routines
David Gibson (9):
target/ppc: Allow cpu compatiblity checks based on type, not instance
spapr: Compute effective capability values earlier
spapr: Add cpu_apply hook to capabilities
target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper
spapr: Maximum (HPT) pagesize property
spapr: Use maximum page size capability to simplify memory backend checking
target/ppc: Add ppc_hash64_filter_pagesizes()
spapr: Limit available pagesizes to provide a consistent guest environment
spapr: Don't rewrite mmu capabilities in KVM mode
Greg Kurz (2):
spapr_cpu_core: migrate per-CPU data
spapr_cpu_core: migrate VPA related state
John Arbuckle (1):
fpu_helper.c: fix helper_fpscr_clrbit() function
Sebastian Bauer (1):
sm501: Fix hardware cursor color conversion
default-configs/ppc-softmmu.mak | 1 +
default-configs/ppcemb-softmmu.mak | 1 +
hw/display/sm501.c | 6 +-
hw/i2c/ppc4xx_i2c.c | 30 ++-
hw/ppc/pnv.c | 383 +++++++++++++++++++++++--------------
hw/ppc/pnv_core.c | 18 +-
hw/ppc/pnv_lpc.c | 30 ++-
hw/ppc/spapr.c | 122 ++++++------
hw/ppc/spapr_caps.c | 158 +++++++++++++--
hw/ppc/spapr_cpu_core.c | 91 ++++++++-
hw/ppc/spapr_events.c | 18 +-
hw/ppc/spapr_pci.c | 23 ++-
hw/ppc/spapr_vio.c | 10 +-
include/hw/i2c/ppc4xx_i2c.h | 8 +-
include/hw/ppc/pnv.h | 26 ++-
include/hw/ppc/pnv_lpc.h | 3 +-
include/hw/ppc/spapr.h | 19 +-
include/hw/ppc/spapr_cpu_core.h | 1 +
pc-bios/README | 2 +-
pc-bios/slof.bin | Bin 913880 -> 924840 bytes
roms/SLOF | 2 +-
target/ppc/compat.c | 27 ++-
target/ppc/cpu.h | 4 +
target/ppc/fpu_helper.c | 28 +++
target/ppc/kvm.c | 146 +++++++-------
target/ppc/kvm_ppc.h | 11 +-
target/ppc/mmu-hash64.c | 59 ++++++
target/ppc/mmu-hash64.h | 3 +
target/ppc/translate.c | 2 +
29 files changed, 865 insertions(+), 367 deletions(-)
^ permalink raw reply [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 01/25] ppc/pnv: introduce a new intc_create() operation to the chip model
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 02/25] ppc/pnv: introduce a new isa_create() " David Gibson
` (25 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
On Power9, the thread interrupt presenter has a different type and is
linked to the chip owning the cores.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/pnv.c | 21 +++++++++++++++++++--
hw/ppc/pnv_core.c | 18 +++++++++---------
include/hw/ppc/pnv.h | 1 +
3 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 0d2b79f798..c7e127ae97 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -671,6 +671,13 @@ static uint32_t pnv_chip_core_pir_p8(PnvChip *chip, uint32_t core_id)
return (chip->chip_id << 7) | (core_id << 3);
}
+static Object *pnv_chip_power8_intc_create(PnvChip *chip, Object *child,
+ Error **errp)
+{
+ return icp_create(child, TYPE_PNV_ICP, XICS_FABRIC(qdev_get_machine()),
+ errp);
+}
+
/*
* 0:48 Reserved - Read as zeroes
* 49:52 Node ID
@@ -686,6 +693,12 @@ static uint32_t pnv_chip_core_pir_p9(PnvChip *chip, uint32_t core_id)
return (chip->chip_id << 8) | (core_id << 2);
}
+static Object *pnv_chip_power9_intc_create(PnvChip *chip, Object *child,
+ Error **errp)
+{
+ return NULL;
+}
+
/* Allowed core identifiers on a POWER8 Processor Chip :
*
* <EX0 reserved>
@@ -721,6 +734,7 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
k->chip_cfam_id = 0x221ef04980000000ull; /* P8 Murano DD2.1 */
k->cores_mask = POWER8E_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
+ k->intc_create = pnv_chip_power8_intc_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8E";
}
@@ -734,6 +748,7 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
k->chip_cfam_id = 0x220ea04980000000ull; /* P8 Venice DD2.0 */
k->cores_mask = POWER8_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
+ k->intc_create = pnv_chip_power8_intc_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8";
}
@@ -747,6 +762,7 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
k->chip_cfam_id = 0x120d304980000000ull; /* P8 Naples DD1.0 */
k->cores_mask = POWER8_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
+ k->intc_create = pnv_chip_power8_intc_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8NVL";
}
@@ -760,6 +776,7 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
k->chip_cfam_id = 0x220d104900008000ull; /* P9 Nimbus DD2.0 */
k->cores_mask = POWER9_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p9;
+ k->intc_create = pnv_chip_power9_intc_create;
k->xscom_base = 0x00603fc00000000ull;
dc->desc = "PowerNV Chip POWER9";
}
@@ -892,8 +909,8 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
object_property_set_int(OBJECT(pnv_core),
pcc->core_pir(chip, core_hwid),
"pir", &error_fatal);
- object_property_add_const_link(OBJECT(pnv_core), "xics",
- qdev_get_machine(), &error_fatal);
+ object_property_add_const_link(OBJECT(pnv_core), "chip",
+ OBJECT(chip), &error_fatal);
object_property_set_bool(OBJECT(pnv_core), true, "realized",
&error_fatal);
object_unref(OBJECT(pnv_core));
diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
index f7cf33f547..a9f129fc2c 100644
--- a/hw/ppc/pnv_core.c
+++ b/hw/ppc/pnv_core.c
@@ -99,13 +99,14 @@ static const MemoryRegionOps pnv_core_xscom_ops = {
.endianness = DEVICE_BIG_ENDIAN,
};
-static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
+static void pnv_realize_vcpu(PowerPCCPU *cpu, PnvChip *chip, Error **errp)
{
CPUPPCState *env = &cpu->env;
int core_pir;
int thread_index = 0; /* TODO: TCG supports only one thread */
ppc_spr_t *pir = &env->spr_cb[SPR_PIR];
Error *local_err = NULL;
+ PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
if (local_err) {
@@ -113,7 +114,7 @@ static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
return;
}
- cpu->intc = icp_create(OBJECT(cpu), TYPE_PNV_ICP, xi, &local_err);
+ cpu->intc = pcc->intc_create(chip, OBJECT(cpu), &local_err);
if (local_err) {
error_propagate(errp, local_err);
return;
@@ -143,13 +144,12 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
void *obj;
int i, j;
char name[32];
- Object *xi;
+ Object *chip;
- xi = object_property_get_link(OBJECT(dev), "xics", &local_err);
- if (!xi) {
- error_setg(errp, "%s: required link 'xics' not found: %s",
- __func__, error_get_pretty(local_err));
- return;
+ chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
+ if (!chip) {
+ error_propagate(errp, local_err);
+ error_prepend(errp, "required link 'chip' not found: ");
}
pc->threads = g_new(PowerPCCPU *, cc->nr_threads);
@@ -166,7 +166,7 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
}
for (j = 0; j < cc->nr_threads; j++) {
- pnv_realize_vcpu(pc->threads[j], XICS_FABRIC(xi), &local_err);
+ pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), &local_err);
if (local_err) {
goto err;
}
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 90759240a7..e934e84f55 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -76,6 +76,7 @@ typedef struct PnvChipClass {
hwaddr xscom_base;
uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
+ Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
} PnvChipClass;
#define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 02/25] ppc/pnv: introduce a new isa_create() operation to the chip model
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 01/25] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 03/25] spapr_cpu_core: migrate per-CPU data David Gibson
` (24 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
This moves the details of the ISA bus creation under the LPC model but
more important, the new PnvChip operation will let us choose the chip
class to use when we introduce the different chip classes for Power9
and Power8. It hides away the processor chip controllers from the
machine.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/pnv.c | 34 +++++++++++++++++++---------------
hw/ppc/pnv_lpc.c | 30 +++++++++++++++++++++++++-----
include/hw/ppc/pnv.h | 1 +
include/hw/ppc/pnv_lpc.h | 3 +--
4 files changed, 46 insertions(+), 22 deletions(-)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index c7e127ae97..ac828d1331 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -529,24 +529,24 @@ static void pnv_reset(void)
cpu_physical_memory_write(PNV_FDT_ADDR, fdt, fdt_totalsize(fdt));
}
-static ISABus *pnv_isa_create(PnvChip *chip)
+static ISABus *pnv_chip_power8_isa_create(PnvChip *chip, Error **errp)
{
- PnvLpcController *lpc = &chip->lpc;
- ISABus *isa_bus;
- qemu_irq *irqs;
- PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
+ return pnv_lpc_isa_create(&chip->lpc, true, errp);
+}
- /* let isa_bus_new() create its own bridge on SysBus otherwise
- * devices speficied on the command line won't find the bus and
- * will fail to create.
- */
- isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io,
- &error_fatal);
+static ISABus *pnv_chip_power8nvl_isa_create(PnvChip *chip, Error **errp)
+{
+ return pnv_lpc_isa_create(&chip->lpc, false, errp);
+}
- irqs = pnv_lpc_isa_irq_create(lpc, pcc->chip_type, ISA_NUM_IRQS);
+static ISABus *pnv_chip_power9_isa_create(PnvChip *chip, Error **errp)
+{
+ return NULL;
+}
- isa_bus_irqs(isa_bus, irqs);
- return isa_bus;
+static ISABus *pnv_isa_create(PnvChip *chip, Error **errp)
+{
+ return PNV_CHIP_GET_CLASS(chip)->isa_create(chip, errp);
}
static void pnv_init(MachineState *machine)
@@ -646,7 +646,7 @@ static void pnv_init(MachineState *machine)
g_free(chip_typename);
/* Instantiate ISA bus on chip 0 */
- pnv->isa_bus = pnv_isa_create(pnv->chips[0]);
+ pnv->isa_bus = pnv_isa_create(pnv->chips[0], &error_fatal);
/* Create serial port */
serial_hds_isa_init(pnv->isa_bus, 0, MAX_ISA_SERIAL_PORTS);
@@ -735,6 +735,7 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
k->cores_mask = POWER8E_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
k->intc_create = pnv_chip_power8_intc_create;
+ k->isa_create = pnv_chip_power8_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8E";
}
@@ -749,6 +750,7 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
k->cores_mask = POWER8_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
k->intc_create = pnv_chip_power8_intc_create;
+ k->isa_create = pnv_chip_power8_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8";
}
@@ -763,6 +765,7 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
k->cores_mask = POWER8_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p8;
k->intc_create = pnv_chip_power8_intc_create;
+ k->isa_create = pnv_chip_power8nvl_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8NVL";
}
@@ -777,6 +780,7 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
k->cores_mask = POWER9_CORE_MASK;
k->core_pir = pnv_chip_core_pir_p9;
k->intc_create = pnv_chip_power9_intc_create;
+ k->isa_create = pnv_chip_power9_isa_create;
k->xscom_base = 0x00603fc00000000ull;
dc->desc = "PowerNV Chip POWER9";
}
diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c
index 402c4fefa8..d7721320a2 100644
--- a/hw/ppc/pnv_lpc.c
+++ b/hw/ppc/pnv_lpc.c
@@ -22,6 +22,7 @@
#include "target/ppc/cpu.h"
#include "qapi/error.h"
#include "qemu/log.h"
+#include "hw/isa/isa.h"
#include "hw/ppc/pnv.h"
#include "hw/ppc/pnv_lpc.h"
@@ -535,16 +536,35 @@ static void pnv_lpc_isa_irq_handler(void *opaque, int n, int level)
}
}
-qemu_irq *pnv_lpc_isa_irq_create(PnvLpcController *lpc, int chip_type,
- int nirqs)
+ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp)
{
+ Error *local_err = NULL;
+ ISABus *isa_bus;
+ qemu_irq *irqs;
+ qemu_irq_handler handler;
+
+ /* let isa_bus_new() create its own bridge on SysBus otherwise
+ * devices speficied on the command line won't find the bus and
+ * will fail to create.
+ */
+ isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return NULL;
+ }
+
/* Not all variants have a working serial irq decoder. If not,
* handling of LPC interrupts becomes a platform issue (some
* platforms have a CPLD to do it).
*/
- if (chip_type == PNV_CHIP_POWER8NVL) {
- return qemu_allocate_irqs(pnv_lpc_isa_irq_handler, lpc, nirqs);
+ if (use_cpld) {
+ handler = pnv_lpc_isa_irq_handler_cpld;
} else {
- return qemu_allocate_irqs(pnv_lpc_isa_irq_handler_cpld, lpc, nirqs);
+ handler = pnv_lpc_isa_irq_handler;
}
+
+ irqs = qemu_allocate_irqs(handler, lpc, ISA_NUM_IRQS);
+
+ isa_bus_irqs(isa_bus, irqs);
+ return isa_bus;
}
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index e934e84f55..563279f3e0 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -77,6 +77,7 @@ typedef struct PnvChipClass {
uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
+ ISABus *(*isa_create)(PnvChip *chip, Error **errp);
} PnvChipClass;
#define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
diff --git a/include/hw/ppc/pnv_lpc.h b/include/hw/ppc/pnv_lpc.h
index 53fdd5bb64..d657489b07 100644
--- a/include/hw/ppc/pnv_lpc.h
+++ b/include/hw/ppc/pnv_lpc.h
@@ -70,7 +70,6 @@ typedef struct PnvLpcController {
PnvPsi *psi;
} PnvLpcController;
-qemu_irq *pnv_lpc_isa_irq_create(PnvLpcController *lpc, int chip_type,
- int nirqs);
+ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp);
#endif /* _PPC_PNV_LPC_H */
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 03/25] spapr_cpu_core: migrate per-CPU data
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 01/25] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 02/25] ppc/pnv: introduce a new isa_create() " David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 04/25] spapr_cpu_core: migrate VPA related state David Gibson
` (23 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Greg Kurz <groug@kaod.org>
A per-CPU machine data pointer was recently added to PowerPCCPU. The
motivation is to to hide platform specific details from the core CPU
code. This per-CPU data can hold state which is relevant to the guest
though, eg, Virtual Processor Areas, and we should migrate this state.
This patch adds the plumbing so that we can migrate the per-CPU data
for PAPR guests. We only do this for newer machine types for the sake
of backward compatibility. No state is migrated for the moment: the
vmstate_spapr_cpu_state structure will be populated by subsequent
patches.
Signed-off-by: Greg Kurz <groug@kaod.org>
[dwg: Fix some trivial spelling and spacing errors]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 7 ++++++-
hw/ppc/spapr_cpu_core.c | 22 ++++++++++++++++++++--
include/hw/ppc/spapr_cpu_core.h | 1 +
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index db0fb385d4..3174468fc5 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4115,7 +4115,12 @@ DEFINE_SPAPR_MACHINE(3_0, "3.0", true);
HW_COMPAT_2_12 \
{ \
.driver = TYPE_POWERPC_CPU, \
- .property = "pre-3.0-migration", \
+ .property = "pre-3.0-migration", \
+ .value = "on", \
+ }, \
+ { \
+ .driver = TYPE_SPAPR_CPU_CORE, \
+ .property = "pre-3.0-migration", \
.value = "on", \
},
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index aef3be33a3..f129ac884e 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -129,6 +129,15 @@ static void spapr_cpu_core_unrealize(DeviceState *dev, Error **errp)
g_free(sc->threads);
}
+static const VMStateDescription vmstate_spapr_cpu_state = {
+ .name = "spapr_cpu",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_END_OF_LIST()
+ },
+};
+
static void spapr_realize_vcpu(PowerPCCPU *cpu, sPAPRMachineState *spapr,
Error **errp)
{
@@ -194,6 +203,10 @@ static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i, Error **errp)
}
cpu->machine_data = g_new0(sPAPRCPUState, 1);
+ if (!sc->pre_3_0_migration) {
+ vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state,
+ cpu->machine_data);
+ }
object_unref(obj);
return cpu;
@@ -204,10 +217,13 @@ err:
return NULL;
}
-static void spapr_delete_vcpu(PowerPCCPU *cpu)
+static void spapr_delete_vcpu(PowerPCCPU *cpu, sPAPRCPUCore *sc)
{
sPAPRCPUState *spapr_cpu = spapr_cpu_state(cpu);
+ if (!sc->pre_3_0_migration) {
+ vmstate_unregister(NULL, &vmstate_spapr_cpu_state, cpu->machine_data);
+ }
cpu->machine_data = NULL;
g_free(spapr_cpu);
object_unparent(OBJECT(cpu));
@@ -253,7 +269,7 @@ err_unrealize:
}
err:
while (--i >= 0) {
- spapr_delete_vcpu(sc->threads[i]);
+ spapr_delete_vcpu(sc->threads[i], sc);
}
g_free(sc->threads);
error_propagate(errp, local_err);
@@ -261,6 +277,8 @@ err:
static Property spapr_cpu_core_properties[] = {
DEFINE_PROP_INT32("node-id", sPAPRCPUCore, node_id, CPU_UNSET_NUMA_NODE_ID),
+ DEFINE_PROP_BOOL("pre-3.0-migration", sPAPRCPUCore, pre_3_0_migration,
+ false),
DEFINE_PROP_END_OF_LIST()
};
diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h
index 8ceea2973a..9e2821e4b3 100644
--- a/include/hw/ppc/spapr_cpu_core.h
+++ b/include/hw/ppc/spapr_cpu_core.h
@@ -31,6 +31,7 @@ typedef struct sPAPRCPUCore {
/*< public >*/
PowerPCCPU **threads;
int node_id;
+ bool pre_3_0_migration; /* older machine don't know about sPAPRCPUState */
} sPAPRCPUCore;
typedef struct sPAPRCPUCoreClass {
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 04/25] spapr_cpu_core: migrate VPA related state
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (2 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 03/25] spapr_cpu_core: migrate per-CPU data David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 05/25] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
` (22 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Greg Kurz <groug@kaod.org>
QEMU implements the "Shared Processor LPAR" (SPLPAR) option, which allows
the hypervisor to time-slice a physical processor into multiple virtual
processor. The intent is to allow more guests to run, and to optimize
processor utilization.
The guest OS can cede idle VCPUs, so that their processing capacity may
be used by other VCPUs, with the H_CEDE hcall. The guest OS can also
optimize spinlocks, by confering the time-slice of a spinning VCPU to the
spinlock holder if it's currently notrunning, with the H_CONFER hcall.
Both hcalls depend on a "Virtual Processor Area" (VPA) to be registered
by the guest OS, generally during early boot. Other per-VCPU areas can
be registered: the "SLB Shadow Buffer" which allows a more efficient
dispatching of VCPUs, and the "Dispatch Trace Log Buffer" (DTL) which
is used to compute time stolen by the hypervisor. Both DTL and SLB Shadow
areas depend on the VPA to be registered.
The VPA/SLB Shadow/DTL are state that QEMU should migrate, but this doesn't
happen, for no apparent reason other than it was just never coded. This
causes the features listed above to stop working after migration, and it
breaks the logic of the H_REGISTER_VPA hcall in the destination.
The VPA is set at the guest request, ie, we don't have to migrate
it before the guest has actually set it. This patch hence adds an
"spapr_cpu/vpa" subsection to the recently introduced per-CPU machine
data migration stream.
Since DTL and SLB Shadow are optional and both depend on VPA, they get
their own subsections "spapr_cpu/vpa/slb_shadow" and "spapr_cpu/vpa/dtl"
hanging from the "spapr_cpu/vpa" subsection.
Note that this won't break migration to older QEMUs. Is is already handled
by only registering the vmstate handler for per-CPU data with newer machine
types.
Signed-off-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr_cpu_core.c | 65 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index f129ac884e..67f1596c57 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -129,6 +129,67 @@ static void spapr_cpu_core_unrealize(DeviceState *dev, Error **errp)
g_free(sc->threads);
}
+static bool slb_shadow_needed(void *opaque)
+{
+ sPAPRCPUState *spapr_cpu = opaque;
+
+ return spapr_cpu->slb_shadow_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_slb_shadow = {
+ .name = "spapr_cpu/vpa/slb_shadow",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = slb_shadow_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(slb_shadow_addr, sPAPRCPUState),
+ VMSTATE_UINT64(slb_shadow_size, sPAPRCPUState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static bool dtl_needed(void *opaque)
+{
+ sPAPRCPUState *spapr_cpu = opaque;
+
+ return spapr_cpu->dtl_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_dtl = {
+ .name = "spapr_cpu/vpa/dtl",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = dtl_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(dtl_addr, sPAPRCPUState),
+ VMSTATE_UINT64(dtl_size, sPAPRCPUState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static bool vpa_needed(void *opaque)
+{
+ sPAPRCPUState *spapr_cpu = opaque;
+
+ return spapr_cpu->vpa_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_vpa = {
+ .name = "spapr_cpu/vpa",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = vpa_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(vpa_addr, sPAPRCPUState),
+ VMSTATE_END_OF_LIST()
+ },
+ .subsections = (const VMStateDescription * []) {
+ &vmstate_spapr_cpu_slb_shadow,
+ &vmstate_spapr_cpu_dtl,
+ NULL
+ }
+};
+
static const VMStateDescription vmstate_spapr_cpu_state = {
.name = "spapr_cpu",
.version_id = 1,
@@ -136,6 +197,10 @@ static const VMStateDescription vmstate_spapr_cpu_state = {
.fields = (VMStateField[]) {
VMSTATE_END_OF_LIST()
},
+ .subsections = (const VMStateDescription * []) {
+ &vmstate_spapr_cpu_vpa,
+ NULL
+ }
};
static void spapr_realize_vcpu(PowerPCCPU *cpu, sPAPRMachineState *spapr,
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 05/25] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (3 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 04/25] spapr_cpu_core: migrate VPA related state David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 06/25] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
` (21 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
It introduces a base PnvChip class from which the specific processor
chip classes, Pnv8Chip and Pnv9Chip, inherit. Each of them needs to
define an init and a realize routine which will create the controllers
of the target processor. For the moment, the base PnvChip class
handles the XSCOM bus and the cores.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/pnv.c | 281 +++++++++++++++++++++++++++----------------
include/hw/ppc/pnv.h | 24 +++-
2 files changed, 202 insertions(+), 103 deletions(-)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index ac828d1331..a29ea996b4 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -531,12 +531,14 @@ static void pnv_reset(void)
static ISABus *pnv_chip_power8_isa_create(PnvChip *chip, Error **errp)
{
- return pnv_lpc_isa_create(&chip->lpc, true, errp);
+ Pnv8Chip *chip8 = PNV8_CHIP(chip);
+ return pnv_lpc_isa_create(&chip8->lpc, true, errp);
}
static ISABus *pnv_chip_power8nvl_isa_create(PnvChip *chip, Error **errp)
{
- return pnv_lpc_isa_create(&chip->lpc, false, errp);
+ Pnv8Chip *chip8 = PNV8_CHIP(chip);
+ return pnv_lpc_isa_create(&chip8->lpc, false, errp);
}
static ISABus *pnv_chip_power9_isa_create(PnvChip *chip, Error **errp)
@@ -725,6 +727,103 @@ static Object *pnv_chip_power9_intc_create(PnvChip *chip, Object *child,
*/
#define POWER9_CORE_MASK (0xffffffffffffffull)
+static void pnv_chip_power8_instance_init(Object *obj)
+{
+ Pnv8Chip *chip8 = PNV8_CHIP(obj);
+
+ object_initialize(&chip8->psi, sizeof(chip8->psi), TYPE_PNV_PSI);
+ object_property_add_child(obj, "psi", OBJECT(&chip8->psi), NULL);
+ object_property_add_const_link(OBJECT(&chip8->psi), "xics",
+ OBJECT(qdev_get_machine()), &error_abort);
+
+ object_initialize(&chip8->lpc, sizeof(chip8->lpc), TYPE_PNV_LPC);
+ object_property_add_child(obj, "lpc", OBJECT(&chip8->lpc), NULL);
+ object_property_add_const_link(OBJECT(&chip8->lpc), "psi",
+ OBJECT(&chip8->psi), &error_abort);
+
+ object_initialize(&chip8->occ, sizeof(chip8->occ), TYPE_PNV_OCC);
+ object_property_add_child(obj, "occ", OBJECT(&chip8->occ), NULL);
+ object_property_add_const_link(OBJECT(&chip8->occ), "psi",
+ OBJECT(&chip8->psi), &error_abort);
+}
+
+static void pnv_chip_icp_realize(Pnv8Chip *chip8, Error **errp)
+ {
+ PnvChip *chip = PNV_CHIP(chip8);
+ PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
+ const char *typename = pnv_chip_core_typename(chip);
+ size_t typesize = object_type_get_instance_size(typename);
+ int i, j;
+ char *name;
+ XICSFabric *xi = XICS_FABRIC(qdev_get_machine());
+
+ name = g_strdup_printf("icp-%x", chip->chip_id);
+ memory_region_init(&chip8->icp_mmio, OBJECT(chip), name, PNV_ICP_SIZE);
+ sysbus_init_mmio(SYS_BUS_DEVICE(chip), &chip8->icp_mmio);
+ g_free(name);
+
+ sysbus_mmio_map(SYS_BUS_DEVICE(chip), 1, PNV_ICP_BASE(chip));
+
+ /* Map the ICP registers for each thread */
+ for (i = 0; i < chip->nr_cores; i++) {
+ PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
+ int core_hwid = CPU_CORE(pnv_core)->core_id;
+
+ for (j = 0; j < CPU_CORE(pnv_core)->nr_threads; j++) {
+ uint32_t pir = pcc->core_pir(chip, core_hwid) + j;
+ PnvICPState *icp = PNV_ICP(xics_icp_get(xi, pir));
+
+ memory_region_add_subregion(&chip8->icp_mmio, pir << 12,
+ &icp->mmio);
+ }
+ }
+}
+
+static void pnv_chip_power8_realize(DeviceState *dev, Error **errp)
+{
+ PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
+ PnvChip *chip = PNV_CHIP(dev);
+ Pnv8Chip *chip8 = PNV8_CHIP(dev);
+ Error *local_err = NULL;
+
+ pcc->parent_realize(dev, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ /* Processor Service Interface (PSI) Host Bridge */
+ object_property_set_int(OBJECT(&chip8->psi), PNV_PSIHB_BASE(chip),
+ "bar", &error_fatal);
+ object_property_set_bool(OBJECT(&chip8->psi), true, "realized", &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ pnv_xscom_add_subregion(chip, PNV_XSCOM_PSIHB_BASE, &chip8->psi.xscom_regs);
+
+ /* Create LPC controller */
+ object_property_set_bool(OBJECT(&chip8->lpc), true, "realized",
+ &error_fatal);
+ pnv_xscom_add_subregion(chip, PNV_XSCOM_LPC_BASE, &chip8->lpc.xscom_regs);
+
+ /* Interrupt Management Area. This is the memory region holding
+ * all the Interrupt Control Presenter (ICP) registers */
+ pnv_chip_icp_realize(chip8, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ /* Create the simplified OCC model */
+ object_property_set_bool(OBJECT(&chip8->occ), true, "realized", &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ pnv_xscom_add_subregion(chip, PNV_XSCOM_OCC_BASE, &chip8->occ.xscom_regs);
+}
+
static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -738,6 +837,9 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
k->isa_create = pnv_chip_power8_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8E";
+
+ device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+ &k->parent_realize);
}
static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
@@ -753,6 +855,9 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
k->isa_create = pnv_chip_power8_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8";
+
+ device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+ &k->parent_realize);
}
static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
@@ -768,6 +873,25 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
k->isa_create = pnv_chip_power8nvl_isa_create;
k->xscom_base = 0x003fc0000000000ull;
dc->desc = "PowerNV Chip POWER8NVL";
+
+ device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+ &k->parent_realize);
+}
+
+static void pnv_chip_power9_instance_init(Object *obj)
+{
+}
+
+static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
+{
+ PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
+ Error *local_err = NULL;
+
+ pcc->parent_realize(dev, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
}
static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
@@ -783,6 +907,9 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
k->isa_create = pnv_chip_power9_isa_create;
k->xscom_base = 0x00603fc00000000ull;
dc->desc = "PowerNV Chip POWER9";
+
+ device_class_set_parent_realize(dc, pnv_chip_power9_realize,
+ &k->parent_realize);
}
static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
@@ -815,59 +942,9 @@ static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
}
}
-static void pnv_chip_init(Object *obj)
+static void pnv_chip_instance_init(Object *obj)
{
- PnvChip *chip = PNV_CHIP(obj);
- PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
-
- chip->xscom_base = pcc->xscom_base;
-
- object_initialize(&chip->lpc, sizeof(chip->lpc), TYPE_PNV_LPC);
- object_property_add_child(obj, "lpc", OBJECT(&chip->lpc), NULL);
-
- object_initialize(&chip->psi, sizeof(chip->psi), TYPE_PNV_PSI);
- object_property_add_child(obj, "psi", OBJECT(&chip->psi), NULL);
- object_property_add_const_link(OBJECT(&chip->psi), "xics",
- OBJECT(qdev_get_machine()), &error_abort);
-
- object_initialize(&chip->occ, sizeof(chip->occ), TYPE_PNV_OCC);
- object_property_add_child(obj, "occ", OBJECT(&chip->occ), NULL);
- object_property_add_const_link(OBJECT(&chip->occ), "psi",
- OBJECT(&chip->psi), &error_abort);
-
- /* The LPC controller needs PSI to generate interrupts */
- object_property_add_const_link(OBJECT(&chip->lpc), "psi",
- OBJECT(&chip->psi), &error_abort);
-}
-
-static void pnv_chip_icp_realize(PnvChip *chip, Error **errp)
-{
- PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
- const char *typename = pnv_chip_core_typename(chip);
- size_t typesize = object_type_get_instance_size(typename);
- int i, j;
- char *name;
- XICSFabric *xi = XICS_FABRIC(qdev_get_machine());
-
- name = g_strdup_printf("icp-%x", chip->chip_id);
- memory_region_init(&chip->icp_mmio, OBJECT(chip), name, PNV_ICP_SIZE);
- sysbus_init_mmio(SYS_BUS_DEVICE(chip), &chip->icp_mmio);
- g_free(name);
-
- sysbus_mmio_map(SYS_BUS_DEVICE(chip), 1, PNV_ICP_BASE(chip));
-
- /* Map the ICP registers for each thread */
- for (i = 0; i < chip->nr_cores; i++) {
- PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
- int core_hwid = CPU_CORE(pnv_core)->core_id;
-
- for (j = 0; j < CPU_CORE(pnv_core)->nr_threads; j++) {
- uint32_t pir = pcc->core_pir(chip, core_hwid) + j;
- PnvICPState *icp = PNV_ICP(xics_icp_get(xi, pir));
-
- memory_region_add_subregion(&chip->icp_mmio, pir << 12, &icp->mmio);
- }
- }
+ PNV_CHIP(obj)->xscom_base = PNV_CHIP_GET_CLASS(obj)->xscom_base;
}
static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
@@ -951,37 +1028,6 @@ static void pnv_chip_realize(DeviceState *dev, Error **errp)
error_propagate(errp, error);
return;
}
-
- /* Create LPC controller */
- object_property_set_bool(OBJECT(&chip->lpc), true, "realized",
- &error_fatal);
- pnv_xscom_add_subregion(chip, PNV_XSCOM_LPC_BASE, &chip->lpc.xscom_regs);
-
- /* Interrupt Management Area. This is the memory region holding
- * all the Interrupt Control Presenter (ICP) registers */
- pnv_chip_icp_realize(chip, &error);
- if (error) {
- error_propagate(errp, error);
- return;
- }
-
- /* Processor Service Interface (PSI) Host Bridge */
- object_property_set_int(OBJECT(&chip->psi), PNV_PSIHB_BASE(chip),
- "bar", &error_fatal);
- object_property_set_bool(OBJECT(&chip->psi), true, "realized", &error);
- if (error) {
- error_propagate(errp, error);
- return;
- }
- pnv_xscom_add_subregion(chip, PNV_XSCOM_PSIHB_BASE, &chip->psi.xscom_regs);
-
- /* Create the simplified OCC model */
- object_property_set_bool(OBJECT(&chip->occ), true, "realized", &error);
- if (error) {
- error_propagate(errp, error);
- return;
- }
- pnv_xscom_add_subregion(chip, PNV_XSCOM_OCC_BASE, &chip->occ.xscom_regs);
}
static Property pnv_chip_properties[] = {
@@ -1009,8 +1055,10 @@ static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
int i;
for (i = 0; i < pnv->num_chips; i++) {
- if (ics_valid_irq(&pnv->chips[i]->psi.ics, irq)) {
- return &pnv->chips[i]->psi.ics;
+ Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+
+ if (ics_valid_irq(&chip8->psi.ics, irq)) {
+ return &chip8->psi.ics;
}
}
return NULL;
@@ -1022,7 +1070,8 @@ static void pnv_ics_resend(XICSFabric *xi)
int i;
for (i = 0; i < pnv->num_chips; i++) {
- ics_resend(&pnv->chips[i]->psi.ics);
+ Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+ ics_resend(&chip8->psi.ics);
}
}
@@ -1063,7 +1112,8 @@ static void pnv_pic_print_info(InterruptStatsProvider *obj,
}
for (i = 0; i < pnv->num_chips; i++) {
- ics_pic_print_info(&pnv->chips[i]->psi.ics, mon);
+ Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+ ics_pic_print_info(&chip8->psi.ics, mon);
}
}
@@ -1098,7 +1148,7 @@ static void pnv_set_num_chips(Object *obj, Visitor *v, const char *name,
pnv->num_chips = num_chips;
}
-static void pnv_machine_initfn(Object *obj)
+static void pnv_machine_instance_init(Object *obj)
{
PnvMachineState *pnv = PNV_MACHINE(obj);
pnv->num_chips = 1;
@@ -1138,11 +1188,18 @@ static void pnv_machine_class_init(ObjectClass *oc, void *data)
pnv_machine_class_props_init(oc);
}
-#define DEFINE_PNV_CHIP_TYPE(type, class_initfn) \
- { \
- .name = type, \
- .class_init = class_initfn, \
- .parent = TYPE_PNV_CHIP, \
+#define DEFINE_PNV8_CHIP_TYPE(type, class_initfn) \
+ { \
+ .name = type, \
+ .class_init = class_initfn, \
+ .parent = TYPE_PNV8_CHIP, \
+ }
+
+#define DEFINE_PNV9_CHIP_TYPE(type, class_initfn) \
+ { \
+ .name = type, \
+ .class_init = class_initfn, \
+ .parent = TYPE_PNV9_CHIP, \
}
static const TypeInfo types[] = {
@@ -1150,7 +1207,7 @@ static const TypeInfo types[] = {
.name = TYPE_PNV_MACHINE,
.parent = TYPE_MACHINE,
.instance_size = sizeof(PnvMachineState),
- .instance_init = pnv_machine_initfn,
+ .instance_init = pnv_machine_instance_init,
.class_init = pnv_machine_class_init,
.interfaces = (InterfaceInfo[]) {
{ TYPE_XICS_FABRIC },
@@ -1162,16 +1219,36 @@ static const TypeInfo types[] = {
.name = TYPE_PNV_CHIP,
.parent = TYPE_SYS_BUS_DEVICE,
.class_init = pnv_chip_class_init,
- .instance_init = pnv_chip_init,
+ .instance_init = pnv_chip_instance_init,
.instance_size = sizeof(PnvChip),
.class_size = sizeof(PnvChipClass),
.abstract = true,
},
- DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER9, pnv_chip_power9_class_init),
- DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8, pnv_chip_power8_class_init),
- DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8E, pnv_chip_power8e_class_init),
- DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8NVL,
- pnv_chip_power8nvl_class_init),
+
+ /*
+ * P9 chip and variants
+ */
+ {
+ .name = TYPE_PNV9_CHIP,
+ .parent = TYPE_PNV_CHIP,
+ .instance_init = pnv_chip_power9_instance_init,
+ .instance_size = sizeof(Pnv9Chip),
+ },
+ DEFINE_PNV9_CHIP_TYPE(TYPE_PNV_CHIP_POWER9, pnv_chip_power9_class_init),
+
+ /*
+ * P8 chip and variants
+ */
+ {
+ .name = TYPE_PNV8_CHIP,
+ .parent = TYPE_PNV_CHIP,
+ .instance_init = pnv_chip_power8_instance_init,
+ .instance_size = sizeof(Pnv8Chip),
+ },
+ DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8, pnv_chip_power8_class_init),
+ DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8E, pnv_chip_power8e_class_init),
+ DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8NVL,
+ pnv_chip_power8nvl_class_init),
};
DEFINE_TYPES(types)
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 563279f3e0..86d5f54e54 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -57,12 +57,32 @@ typedef struct PnvChip {
MemoryRegion xscom_mmio;
MemoryRegion xscom;
AddressSpace xscom_as;
+} PnvChip;
+
+#define TYPE_PNV8_CHIP "pnv8-chip"
+#define PNV8_CHIP(obj) OBJECT_CHECK(Pnv8Chip, (obj), TYPE_PNV8_CHIP)
+
+typedef struct Pnv8Chip {
+ /*< private >*/
+ PnvChip parent_obj;
+
+ /*< public >*/
MemoryRegion icp_mmio;
PnvLpcController lpc;
PnvPsi psi;
PnvOCC occ;
-} PnvChip;
+} Pnv8Chip;
+
+#define TYPE_PNV9_CHIP "pnv9-chip"
+#define PNV9_CHIP(obj) OBJECT_CHECK(Pnv9Chip, (obj), TYPE_PNV9_CHIP)
+
+typedef struct Pnv9Chip {
+ /*< private >*/
+ PnvChip parent_obj;
+
+ /*< public >*/
+} Pnv9Chip;
typedef struct PnvChipClass {
/*< private >*/
@@ -75,6 +95,8 @@ typedef struct PnvChipClass {
hwaddr xscom_base;
+ DeviceRealize parent_realize;
+
uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
ISABus *(*isa_create)(PnvChip *chip, Error **errp);
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 06/25] ppc/pnv: consolidate the creation of the ISA bus device tree
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (4 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 05/25] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 07/25] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
` (20 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
The device tree node of the ISA bus was being partially done in
different places. Move all the nodes creation under the same routine.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/pnv.c | 51 +++++++++++++++++++++++----------------------------
1 file changed, 23 insertions(+), 28 deletions(-)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index a29ea996b4..7401ffe5b0 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -265,18 +265,6 @@ static void pnv_dt_icp(PnvChip *chip, void *fdt, uint32_t pir,
g_free(reg);
}
-static int pnv_chip_lpc_offset(PnvChip *chip, void *fdt)
-{
- char *name;
- int offset;
-
- name = g_strdup_printf("/xscom@%" PRIx64 "/isa@%x",
- (uint64_t) PNV_XSCOM_BASE(chip), PNV_XSCOM_LPC_BASE);
- offset = fdt_path_offset(fdt, name);
- g_free(name);
- return offset;
-}
-
static void pnv_dt_chip(PnvChip *chip, void *fdt)
{
const char *typename = pnv_chip_core_typename(chip);
@@ -285,16 +273,6 @@ static void pnv_dt_chip(PnvChip *chip, void *fdt)
pnv_dt_xscom(chip, fdt, 0);
- /* The default LPC bus of a multichip system is on chip 0. It's
- * recognized by the firmware (skiboot) using a "primary"
- * property.
- */
- if (chip->chip_id == 0x0) {
- int lpc_offset = pnv_chip_lpc_offset(chip, fdt);
-
- _FDT((fdt_setprop(fdt, lpc_offset, "primary", NULL, 0)));
- }
-
for (i = 0; i < chip->nr_cores; i++) {
PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
@@ -418,16 +396,35 @@ static int pnv_dt_isa_device(DeviceState *dev, void *opaque)
return 0;
}
-static void pnv_dt_isa(ISABus *bus, void *fdt, int lpc_offset)
+static int pnv_chip_isa_offset(PnvChip *chip, void *fdt)
+{
+ char *name;
+ int offset;
+
+ name = g_strdup_printf("/xscom@%" PRIx64 "/isa@%x",
+ (uint64_t) PNV_XSCOM_BASE(chip), PNV_XSCOM_LPC_BASE);
+ offset = fdt_path_offset(fdt, name);
+ g_free(name);
+ return offset;
+}
+
+/* The default LPC bus of a multichip system is on chip 0. It's
+ * recognized by the firmware (skiboot) using a "primary" property.
+ */
+static void pnv_dt_isa(PnvMachineState *pnv, void *fdt)
{
+ int isa_offset = pnv_chip_isa_offset(pnv->chips[0], fdt);
ForeachPopulateArgs args = {
.fdt = fdt,
- .offset = lpc_offset,
+ .offset = isa_offset,
};
+ _FDT((fdt_setprop(fdt, isa_offset, "primary", NULL, 0)));
+
/* ISA devices are not necessarily parented to the ISA bus so we
* can not use object_child_foreach() */
- qbus_walk_children(BUS(bus), pnv_dt_isa_device, NULL, NULL, NULL, &args);
+ qbus_walk_children(BUS(pnv->isa_bus), pnv_dt_isa_device, NULL, NULL, NULL,
+ &args);
}
static void *pnv_dt_create(MachineState *machine)
@@ -438,7 +435,6 @@ static void *pnv_dt_create(MachineState *machine)
char *buf;
int off;
int i;
- int lpc_offset;
fdt = g_malloc0(FDT_MAX_SIZE);
_FDT((fdt_create_empty_tree(fdt, FDT_MAX_SIZE)));
@@ -480,8 +476,7 @@ static void *pnv_dt_create(MachineState *machine)
}
/* Populate ISA devices on chip 0 */
- lpc_offset = pnv_chip_lpc_offset(pnv->chips[0], fdt);
- pnv_dt_isa(pnv->isa_bus, fdt, lpc_offset);
+ pnv_dt_isa(pnv, fdt);
if (pnv->bmc) {
pnv_dt_bmc_sensors(pnv->bmc, fdt);
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 07/25] target/ppc: Allow cpu compatiblity checks based on type, not instance
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (5 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 06/25] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 08/25] spapr: Compute effective capability values earlier David Gibson
` (19 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
ppc_check_compat() is used in a number of places to check if a cpu object
supports a certain compatiblity mode, subject to various constraints.
It takes a PowerPCCPU *, however it really only depends on the cpu's class.
We have upcoming cases where it would be useful to make compatibility
checks before we fully instantiate the cpu objects.
ppc_type_check_compat() will now make an equivalent check, but based on a
CPU's QOM typename instead of an instantiated CPU object.
We make use of the new interface in several places in spapr, where we're
essentially making a global check, rather than one specific to a particular
cpu. This avoids some ugly uses of first_cpu to grab a "representative"
instance.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr.c | 10 ++++------
hw/ppc/spapr_caps.c | 19 +++++++++----------
target/ppc/compat.c | 27 +++++++++++++++++++++------
target/ppc/cpu.h | 4 ++++
4 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 3174468fc5..bc179f6f89 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1616,8 +1616,8 @@ static void spapr_machine_reset(void)
first_ppc_cpu = POWERPC_CPU(first_cpu);
if (kvm_enabled() && kvmppc_has_cap_mmu_radix() &&
- ppc_check_compat(first_ppc_cpu, CPU_POWERPC_LOGICAL_3_00, 0,
- spapr->max_compat_pvr)) {
+ ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00, 0,
+ spapr->max_compat_pvr)) {
/* If using KVM with radix mode available, VCPUs can be started
* without a HPT because KVM will start them in radix mode.
* Set the GR bit in PATB so that we know there is no HPT. */
@@ -2520,7 +2520,6 @@ static void spapr_machine_init(MachineState *machine)
long load_limit, fw_size;
char *filename;
Error *resize_hpt_err = NULL;
- PowerPCCPU *first_ppc_cpu;
msi_nonbroken = true;
@@ -2618,10 +2617,9 @@ static void spapr_machine_init(MachineState *machine)
/* init CPUs */
spapr_init_cpus(spapr);
- first_ppc_cpu = POWERPC_CPU(first_cpu);
if ((!kvm_enabled() || kvmppc_has_cap_mmu_radix()) &&
- ppc_check_compat(first_ppc_cpu, CPU_POWERPC_LOGICAL_3_00, 0,
- spapr->max_compat_pvr)) {
+ ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00, 0,
+ spapr->max_compat_pvr)) {
/* KVM and TCG always allow GTSE with radix... */
spapr_ovec_set(spapr->ov5, OV5_MMU_RADIX_GTSE);
}
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 00e43a9ba7..469f38f0ef 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -327,27 +327,26 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
};
static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr,
- CPUState *cs)
+ const char *cputype)
{
sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
- PowerPCCPU *cpu = POWERPC_CPU(cs);
sPAPRCapabilities caps;
caps = smc->default_caps;
- if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_07,
- 0, spapr->max_compat_pvr)) {
+ if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_07,
+ 0, spapr->max_compat_pvr)) {
caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_OFF;
caps.caps[SPAPR_CAP_CFPC] = SPAPR_CAP_BROKEN;
}
- if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_06_PLUS,
- 0, spapr->max_compat_pvr)) {
+ if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_06_PLUS,
+ 0, spapr->max_compat_pvr)) {
caps.caps[SPAPR_CAP_SBBC] = SPAPR_CAP_BROKEN;
}
- if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_06,
- 0, spapr->max_compat_pvr)) {
+ if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_06,
+ 0, spapr->max_compat_pvr)) {
caps.caps[SPAPR_CAP_VSX] = SPAPR_CAP_OFF;
caps.caps[SPAPR_CAP_DFP] = SPAPR_CAP_OFF;
caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN;
@@ -384,7 +383,7 @@ int spapr_caps_post_migration(sPAPRMachineState *spapr)
sPAPRCapabilities dstcaps = spapr->eff;
sPAPRCapabilities srccaps;
- srccaps = default_caps_with_cpu(spapr, first_cpu);
+ srccaps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
for (i = 0; i < SPAPR_CAP_NUM; i++) {
/* If not default value then assume came in with the migration */
if (spapr->mig.caps[i] != spapr->def.caps[i]) {
@@ -446,7 +445,7 @@ void spapr_caps_reset(sPAPRMachineState *spapr)
int i;
/* First compute the actual set of caps we're running with.. */
- default_caps = default_caps_with_cpu(spapr, first_cpu);
+ default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
for (i = 0; i < SPAPR_CAP_NUM; i++) {
/* Store the defaults */
diff --git a/target/ppc/compat.c b/target/ppc/compat.c
index 807c906f68..7de4bf3122 100644
--- a/target/ppc/compat.c
+++ b/target/ppc/compat.c
@@ -105,17 +105,13 @@ static const CompatInfo *compat_by_pvr(uint32_t pvr)
return NULL;
}
-bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
- uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+static bool pcc_compat(PowerPCCPUClass *pcc, uint32_t compat_pvr,
+ uint32_t min_compat_pvr, uint32_t max_compat_pvr)
{
- PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
const CompatInfo *compat = compat_by_pvr(compat_pvr);
const CompatInfo *min = compat_by_pvr(min_compat_pvr);
const CompatInfo *max = compat_by_pvr(max_compat_pvr);
-#if !defined(CONFIG_USER_ONLY)
- g_assert(cpu->vhyp);
-#endif
g_assert(!min_compat_pvr || min);
g_assert(!max_compat_pvr || max);
@@ -134,6 +130,25 @@ bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
return true;
}
+bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
+ uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+{
+ PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
+
+#if !defined(CONFIG_USER_ONLY)
+ g_assert(cpu->vhyp);
+#endif
+
+ return pcc_compat(pcc, compat_pvr, min_compat_pvr, max_compat_pvr);
+}
+
+bool ppc_type_check_compat(const char *cputype, uint32_t compat_pvr,
+ uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+{
+ PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(object_class_by_name(cputype));
+ return pcc_compat(pcc, compat_pvr, min_compat_pvr, max_compat_pvr);
+}
+
void ppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr, Error **errp)
{
const CompatInfo *compat = compat_by_pvr(compat_pvr);
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 874da6efbc..c7f3fb6b73 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -1369,7 +1369,11 @@ static inline int cpu_mmu_index (CPUPPCState *env, bool ifetch)
#if defined(TARGET_PPC64)
bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
uint32_t min_compat_pvr, uint32_t max_compat_pvr);
+bool ppc_type_check_compat(const char *cputype, uint32_t compat_pvr,
+ uint32_t min_compat_pvr, uint32_t max_compat_pvr);
+
void ppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr, Error **errp);
+
#if !defined(CONFIG_USER_ONLY)
void ppc_set_compat_all(uint32_t compat_pvr, Error **errp);
#endif
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 08/25] spapr: Compute effective capability values earlier
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (6 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 07/25] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 09/25] spapr: Add cpu_apply hook to capabilities David Gibson
` (18 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
Previously, the effective values of the various spapr capability flags
were only determined at machine reset time. That was a lazy way of making
sure it was after cpu initialization so it could use the cpu object to
inform the defaults.
But we've now improved the compat checking code so that we don't need to
instantiate the cpus to use it. That lets us move the resolution of the
capability defaults much earlier.
This is going to be necessary for some future capabilities.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr.c | 6 ++++--
hw/ppc/spapr_caps.c | 9 ++++++---
include/hw/ppc/spapr.h | 3 ++-
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index bc179f6f89..4a0b679166 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1612,7 +1612,7 @@ static void spapr_machine_reset(void)
void *fdt;
int rc;
- spapr_caps_reset(spapr);
+ spapr_caps_apply(spapr);
first_ppc_cpu = POWERPC_CPU(first_cpu);
if (kvm_enabled() && kvmppc_has_cap_mmu_radix() &&
@@ -2526,7 +2526,9 @@ static void spapr_machine_init(MachineState *machine)
QLIST_INIT(&spapr->phbs);
QTAILQ_INIT(&spapr->pending_dimm_unplugs);
- /* Check HPT resizing availability */
+ /* Determine capabilities to run with */
+ spapr_caps_init(spapr);
+
kvmppc_check_papr_resize_hpt(&resize_hpt_err);
if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DEFAULT) {
/*
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 469f38f0ef..dabed817d1 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -439,12 +439,12 @@ SPAPR_CAP_MIG_STATE(cfpc, SPAPR_CAP_CFPC);
SPAPR_CAP_MIG_STATE(sbbc, SPAPR_CAP_SBBC);
SPAPR_CAP_MIG_STATE(ibs, SPAPR_CAP_IBS);
-void spapr_caps_reset(sPAPRMachineState *spapr)
+void spapr_caps_init(sPAPRMachineState *spapr)
{
sPAPRCapabilities default_caps;
int i;
- /* First compute the actual set of caps we're running with.. */
+ /* Compute the actual set of caps we should run with */
default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
for (i = 0; i < SPAPR_CAP_NUM; i++) {
@@ -455,8 +455,11 @@ void spapr_caps_reset(sPAPRMachineState *spapr)
spapr->eff.caps[i] = default_caps.caps[i];
}
}
+}
- /* .. then apply those caps to the virtual hardware */
+void spapr_caps_apply(sPAPRMachineState *spapr)
+{
+ int i;
for (i = 0; i < SPAPR_CAP_NUM; i++) {
sPAPRCapabilityInfo *info = &capability_table[i];
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 3388750fc7..9dbd6010f5 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -798,7 +798,8 @@ static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
return spapr->eff.caps[cap];
}
-void spapr_caps_reset(sPAPRMachineState *spapr);
+void spapr_caps_init(sPAPRMachineState *spapr);
+void spapr_caps_apply(sPAPRMachineState *spapr);
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
int spapr_caps_post_migration(sPAPRMachineState *spapr);
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 09/25] spapr: Add cpu_apply hook to capabilities
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (7 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 08/25] spapr: Compute effective capability values earlier David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 10/25] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
` (17 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
spapr capabilities have an apply hook to actually activate (or deactivate)
the feature in the system at reset time. However, a number of capabilities
affect the setup of cpus, and need to be applied to each of them -
including hotplugged cpus for extra complication. To make this simpler,
add an optional cpu_apply hook that is called from spapr_cpu_reset().
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr_caps.c | 19 +++++++++++++++++++
hw/ppc/spapr_cpu_core.c | 2 ++
include/hw/ppc/spapr.h | 1 +
3 files changed, 22 insertions(+)
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index dabed817d1..68a4243efc 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -59,6 +59,8 @@ typedef struct sPAPRCapabilityInfo {
sPAPRCapPossible *possible;
/* Make sure the virtual hardware can support this capability */
void (*apply)(sPAPRMachineState *spapr, uint8_t val, Error **errp);
+ void (*cpu_apply)(sPAPRMachineState *spapr, PowerPCCPU *cpu,
+ uint8_t val, Error **errp);
} sPAPRCapabilityInfo;
static void spapr_cap_get_bool(Object *obj, Visitor *v, const char *name,
@@ -472,6 +474,23 @@ void spapr_caps_apply(sPAPRMachineState *spapr)
}
}
+void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu)
+{
+ int i;
+
+ for (i = 0; i < SPAPR_CAP_NUM; i++) {
+ sPAPRCapabilityInfo *info = &capability_table[i];
+
+ /*
+ * If the apply function can't set the desired level and thinks it's
+ * fatal, it should cause that.
+ */
+ if (info->cpu_apply) {
+ info->cpu_apply(spapr, cpu, spapr->eff.caps[i], &error_fatal);
+ }
+ }
+}
+
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp)
{
Error *local_err = NULL;
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 67f1596c57..bfb94f650c 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -76,6 +76,8 @@ static void spapr_cpu_reset(void *opaque)
spapr_cpu->slb_shadow_size = 0;
spapr_cpu->dtl_addr = 0;
spapr_cpu->dtl_size = 0;
+
+ spapr_caps_cpu_apply(SPAPR_MACHINE(qdev_get_machine()), cpu);
}
void spapr_cpu_set_entry_state(PowerPCCPU *cpu, target_ulong nip, target_ulong r3)
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 9dbd6010f5..9dd46a72f6 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -800,6 +800,7 @@ static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
void spapr_caps_init(sPAPRMachineState *spapr);
void spapr_caps_apply(sPAPRMachineState *spapr);
+void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu);
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
int spapr_caps_post_migration(sPAPRMachineState *spapr);
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 10/25] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (8 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 09/25] spapr: Add cpu_apply hook to capabilities David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 11/25] spapr: split the IRQ allocation sequence David Gibson
` (16 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
KVM HV has a restriction that for HPT mode guests, guest pages must be hpa
contiguous as well as gpa contiguous. We have to account for that in
various places. We determine whether we're subject to this restriction
from the SMMU information exposed by KVM.
Planned cleanups to the way we handle this will require knowing whether
this restriction is in play in wider parts of the code. So, expose a
helper function which returns it.
This does mean some redundant calls to kvm_get_smmu_info(), but they'll go
away again with future cleanups.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
target/ppc/kvm.c | 17 +++++++++++++++--
target/ppc/kvm_ppc.h | 6 ++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 5c0e313ca6..50b5d01432 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -406,9 +406,22 @@ target_ulong kvmppc_configure_v3_mmu(PowerPCCPU *cpu,
}
}
+bool kvmppc_hpt_needs_host_contiguous_pages(void)
+{
+ PowerPCCPU *cpu = POWERPC_CPU(first_cpu);
+ static struct kvm_ppc_smmu_info smmu_info;
+
+ if (!kvm_enabled()) {
+ return false;
+ }
+
+ kvm_get_smmu_info(cpu, &smmu_info);
+ return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
+}
+
static bool kvm_valid_page_size(uint32_t flags, long rampgsize, uint32_t shift)
{
- if (!(flags & KVM_PPC_PAGE_SIZES_REAL)) {
+ if (!kvmppc_hpt_needs_host_contiguous_pages()) {
return true;
}
@@ -445,7 +458,7 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
/* If we have HV KVM, we need to forbid CI large pages if our
* host page size is smaller than 64K.
*/
- if (smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL) {
+ if (kvmppc_hpt_needs_host_contiguous_pages()) {
if (getpagesize() >= 0x10000) {
cpu->hash64_opts->flags |= PPC_HASH64_CI_LARGEPAGE;
} else {
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index e2840e1d33..a7ddb8a5d6 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -70,6 +70,7 @@ int kvmppc_resize_hpt_prepare(PowerPCCPU *cpu, target_ulong flags, int shift);
int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
+bool kvmppc_hpt_needs_host_contiguous_pages(void);
bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
#else
@@ -222,6 +223,11 @@ static inline uint64_t kvmppc_rma_size(uint64_t current_size,
return ram_size;
}
+static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
+{
+ return false;
+}
+
static inline bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
{
return true;
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 11/25] spapr: split the IRQ allocation sequence
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (9 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 10/25] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 12/25] spapr: remove unused spapr_irq routines David Gibson
` (15 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
Today, when a device requests for IRQ number in a sPAPR machine, the
spapr_irq_alloc() routine first scans the ICSState status array to
find an empty slot and then performs the assignement of the selected
numbers. Split this sequence in two distinct routines : spapr_irq_find()
for lookups and spapr_irq_claim() for claiming the IRQ numbers.
This will ease the introduction of a static layout of IRQ numbers.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 50 ++++++++++++++++++++++++++++++++++++++++++
hw/ppc/spapr_events.c | 18 +++++++++++----
hw/ppc/spapr_pci.c | 23 ++++++++++++++++---
hw/ppc/spapr_vio.c | 10 ++++++++-
include/hw/ppc/spapr.h | 4 ++++
5 files changed, 97 insertions(+), 8 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 4a0b679166..b7705c3944 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3816,6 +3816,36 @@ static int ics_find_free_block(ICSState *ics, int num, int alignnum)
return -1;
}
+int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align, Error **errp)
+{
+ ICSState *ics = spapr->ics;
+ int first = -1;
+
+ assert(ics);
+
+ /*
+ * MSIMesage::data is used for storing VIRQ so
+ * it has to be aligned to num to support multiple
+ * MSI vectors. MSI-X is not affected by this.
+ * The hint is used for the first IRQ, the rest should
+ * be allocated continuously.
+ */
+ if (align) {
+ assert((num == 1) || (num == 2) || (num == 4) ||
+ (num == 8) || (num == 16) || (num == 32));
+ first = ics_find_free_block(ics, num, num);
+ } else {
+ first = ics_find_free_block(ics, num, 1);
+ }
+
+ if (first < 0) {
+ error_setg(errp, "can't find a free %d-IRQ block", num);
+ return -1;
+ }
+
+ return first + ics->offset;
+}
+
/*
* Allocate the IRQ number and set the IRQ type, LSI or MSI
*/
@@ -3894,6 +3924,26 @@ int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
return first;
}
+int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
+{
+ ICSState *ics = spapr->ics;
+
+ assert(ics);
+
+ if (!ics_valid_irq(ics, irq)) {
+ error_setg(errp, "IRQ %d is invalid", irq);
+ return -1;
+ }
+
+ if (!ICS_IRQ_FREE(ics, irq - ics->offset)) {
+ error_setg(errp, "IRQ %d is not free", irq);
+ return -1;
+ }
+
+ spapr_irq_set_lsi(spapr, irq, lsi);
+ return 0;
+}
+
void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num)
{
ICSState *ics = spapr->ics;
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index 86836f0626..e4f5946a21 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -707,13 +707,18 @@ void spapr_clear_pending_events(sPAPRMachineState *spapr)
void spapr_events_init(sPAPRMachineState *spapr)
{
+ int epow_irq;
+
+ epow_irq = spapr_irq_findone(spapr, &error_fatal);
+
+ spapr_irq_claim(spapr, epow_irq, false, &error_fatal);
+
QTAILQ_INIT(&spapr->pending_events);
spapr->event_sources = spapr_event_sources_new();
spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_EPOW,
- spapr_irq_alloc(spapr, 0, false,
- &error_fatal));
+ epow_irq);
/* NOTE: if machine supports modern/dedicated hotplug event source,
* we add it to the device-tree unconditionally. This means we may
@@ -724,9 +729,14 @@ void spapr_events_init(sPAPRMachineState *spapr)
* checking that it's enabled.
*/
if (spapr->use_hotplug_event_source) {
+ int hp_irq;
+
+ hp_irq = spapr_irq_findone(spapr, &error_fatal);
+
+ spapr_irq_claim(spapr, hp_irq, false, &error_fatal);
+
spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_HOT_PLUG,
- spapr_irq_alloc(spapr, 0, false,
- &error_fatal));
+ hp_irq);
}
spapr->epow_notifier.notify = spapr_powerdown_req;
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index f936ce63ef..497b896c7d 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -279,6 +279,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
spapr_pci_msi *msi;
int *config_addr_key;
Error *err = NULL;
+ int i;
/* Fins sPAPRPHBState */
phb = spapr_pci_find_phb(spapr, buid);
@@ -371,8 +372,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
}
/* Allocate MSIs */
- irq = spapr_irq_alloc_block(spapr, req_num, false,
- ret_intr_type == RTAS_TYPE_MSI, &err);
+ irq = spapr_irq_find(spapr, req_num, ret_intr_type == RTAS_TYPE_MSI, &err);
if (err) {
error_reportf_err(err, "Can't allocate MSIs for device %x: ",
config_addr);
@@ -380,6 +380,16 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
return;
}
+ for (i = 0; i < req_num; i++) {
+ spapr_irq_claim(spapr, irq + i, false, &err);
+ if (err) {
+ error_reportf_err(err, "Can't allocate MSIs for device %x: ",
+ config_addr);
+ rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
+ return;
+ }
+ }
+
/* Release previous MSIs */
if (msi) {
spapr_irq_free(spapr, msi->first_irq, msi->num);
@@ -1698,7 +1708,14 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
uint32_t irq;
Error *local_err = NULL;
- irq = spapr_irq_alloc_block(spapr, 1, true, false, &local_err);
+ irq = spapr_irq_findone(spapr, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ error_prepend(errp, "can't allocate LSIs: ");
+ return;
+ }
+
+ spapr_irq_claim(spapr, irq, true, &local_err);
if (local_err) {
error_propagate(errp, local_err);
error_prepend(errp, "can't allocate LSIs: ");
diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c
index 4555c648a8..daf85130b5 100644
--- a/hw/ppc/spapr_vio.c
+++ b/hw/ppc/spapr_vio.c
@@ -475,7 +475,15 @@ static void spapr_vio_busdev_realize(DeviceState *qdev, Error **errp)
dev->qdev.id = id;
}
- dev->irq = spapr_irq_alloc(spapr, dev->irq, false, &local_err);
+ if (!dev->irq) {
+ dev->irq = spapr_irq_findone(spapr, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+ }
+
+ spapr_irq_claim(spapr, dev->irq, false, &local_err);
if (local_err) {
error_propagate(errp, local_err);
return;
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 9dd46a72f6..6bfdf5a2fb 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -776,6 +776,10 @@ int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
Error **errp);
int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
bool align, Error **errp);
+int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align,
+ Error **errp);
+#define spapr_irq_findone(spapr, errp) spapr_irq_find(spapr, 1, false, errp)
+int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp);
void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num);
qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq);
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 12/25] spapr: remove unused spapr_irq routines
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (10 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 11/25] spapr: split the IRQ allocation sequence David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 13/25] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
` (14 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Cédric Le Goater <clg@kaod.org>
spapr_irq_alloc_block and spapr_irq_alloc() are now deprecated.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/spapr.c | 80 +-----------------------------------------
include/hw/ppc/spapr.h | 4 ---
2 files changed, 1 insertion(+), 83 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index b7705c3944..78186500e9 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3846,84 +3846,6 @@ int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align, Error **errp)
return first + ics->offset;
}
-/*
- * Allocate the IRQ number and set the IRQ type, LSI or MSI
- */
-static void spapr_irq_set_lsi(sPAPRMachineState *spapr, int irq, bool lsi)
-{
- ics_set_irq_type(spapr->ics, irq - spapr->ics->offset, lsi);
-}
-
-int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
- Error **errp)
-{
- ICSState *ics = spapr->ics;
- int irq;
-
- assert(ics);
-
- if (irq_hint) {
- if (!ICS_IRQ_FREE(ics, irq_hint - ics->offset)) {
- error_setg(errp, "can't allocate IRQ %d: already in use", irq_hint);
- return -1;
- }
- irq = irq_hint;
- } else {
- irq = ics_find_free_block(ics, 1, 1);
- if (irq < 0) {
- error_setg(errp, "can't allocate IRQ: no IRQ left");
- return -1;
- }
- irq += ics->offset;
- }
-
- spapr_irq_set_lsi(spapr, irq, lsi);
- trace_spapr_irq_alloc(irq);
-
- return irq;
-}
-
-/*
- * Allocate block of consecutive IRQs, and return the number of the first IRQ in
- * the block. If align==true, aligns the first IRQ number to num.
- */
-int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
- bool align, Error **errp)
-{
- ICSState *ics = spapr->ics;
- int i, first = -1;
-
- assert(ics);
-
- /*
- * MSIMesage::data is used for storing VIRQ so
- * it has to be aligned to num to support multiple
- * MSI vectors. MSI-X is not affected by this.
- * The hint is used for the first IRQ, the rest should
- * be allocated continuously.
- */
- if (align) {
- assert((num == 1) || (num == 2) || (num == 4) ||
- (num == 8) || (num == 16) || (num == 32));
- first = ics_find_free_block(ics, num, num);
- } else {
- first = ics_find_free_block(ics, num, 1);
- }
- if (first < 0) {
- error_setg(errp, "can't find a free %d-IRQ block", num);
- return -1;
- }
-
- first += ics->offset;
- for (i = first; i < first + num; ++i) {
- spapr_irq_set_lsi(spapr, i, lsi);
- }
-
- trace_spapr_irq_alloc_block(first, num, lsi, align);
-
- return first;
-}
-
int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
{
ICSState *ics = spapr->ics;
@@ -3940,7 +3862,7 @@ int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
return -1;
}
- spapr_irq_set_lsi(spapr, irq, lsi);
+ ics_set_irq_type(ics, irq - ics->offset, lsi);
return 0;
}
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 6bfdf5a2fb..8a9142244f 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -772,10 +772,6 @@ int spapr_get_vcpu_id(PowerPCCPU *cpu);
void spapr_set_vcpu_id(PowerPCCPU *cpu, int cpu_index, Error **errp);
PowerPCCPU *spapr_find_cpu(int vcpu_id);
-int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
- Error **errp);
-int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
- bool align, Error **errp);
int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align,
Error **errp);
#define spapr_irq_findone(spapr, errp) spapr_irq_find(spapr, 1, false, errp)
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 13/25] fpu_helper.c: fix helper_fpscr_clrbit() function
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (11 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 12/25] spapr: remove unused spapr_irq routines David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 14/25] sm501: Fix hardware cursor color conversion David Gibson
` (13 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
John Arbuckle, David Gibson
From: John Arbuckle <programmingkidx@gmail.com>
Fix the helper_fpscr_clrbit() function so it correctly sets the FEX
and VX bits.
Determining the value for the Floating Point Status and Control
Register's (FPSCR) FEX bit is suppose to be done like this:
FEX = (VX & VE) | (OX & OE) | (UX & UE) | (ZX & ZE) | (XX & XE))
It is described as "the logical OR of all the floating-point exception
bits masked by their respective enable bits". It was not implemented
correctly. The value of FEX would stay on even when all other bits
were set to off.
The VX bit is described as "the logical OR of all of the invalid
operation exceptions". This bit was also not implemented correctly. It
too would stay on when all the other bits were set to off.
My main source of information is an IBM document called:
PowerPC Microprocessor Family:
The Programming Environments for 32-Bit Microprocessors
Page 62 is where the FPSCR information is located.
This is an older copy than the one I use but it is still very useful:
https://www.pdfdrive.net/powerpc-microprocessor-family-the-programming-environments-for-32-e3087633.html
I use a G3 and G5 iMac to compare bit values with QEMU. This patch
fixed all the problems I was having with these bits.
Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
[dwg: Re-wrapped commit message]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
target/ppc/fpu_helper.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c
index d31a933cbb..7714bfe0f9 100644
--- a/target/ppc/fpu_helper.c
+++ b/target/ppc/fpu_helper.c
@@ -325,6 +325,34 @@ void helper_fpscr_clrbit(CPUPPCState *env, uint32_t bit)
case FPSCR_RN:
fpscr_set_rounding_mode(env);
break;
+ case FPSCR_VXSNAN:
+ case FPSCR_VXISI:
+ case FPSCR_VXIDI:
+ case FPSCR_VXZDZ:
+ case FPSCR_VXIMZ:
+ case FPSCR_VXVC:
+ case FPSCR_VXSOFT:
+ case FPSCR_VXSQRT:
+ case FPSCR_VXCVI:
+ if (!fpscr_ix) {
+ /* Set VX bit to zero */
+ env->fpscr &= ~(1 << FPSCR_VX);
+ }
+ break;
+ case FPSCR_OX:
+ case FPSCR_UX:
+ case FPSCR_ZX:
+ case FPSCR_XX:
+ case FPSCR_VE:
+ case FPSCR_OE:
+ case FPSCR_UE:
+ case FPSCR_ZE:
+ case FPSCR_XE:
+ if (!fpscr_eex) {
+ /* Set the FEX bit */
+ env->fpscr &= ~(1 << FPSCR_FEX);
+ }
+ break;
default:
break;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 14/25] sm501: Fix hardware cursor color conversion
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (12 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 13/25] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 15/25] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
` (12 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
Sebastian Bauer, David Gibson
From: Sebastian Bauer <mail@sebastianbauer.info>
According to the sm501 specs the hardware cursor colors are to be given in
the rgb565 format, but the code currently interprets them as bgr565.
Therefore, the colors of the hardware cursors are wrong in the QEMU
display, e.g., the standard mouse pointer of AmigaOS appears blue instead
of red. This change fixes this issue by replacing the existing naive
bgr565 => rgb888 conversion with a standard rgb565 => rgb888 one that also
scales the color component values properly.
Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/display/sm501.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index ca0840f6fa..8206ae81a1 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -652,9 +652,9 @@ static inline void get_hwc_palette(SM501State *state, int crt, uint8_t *palette)
} else {
rgb565 = color_reg & 0xFFFF;
}
- palette[i * 3 + 0] = (rgb565 << 3) & 0xf8; /* red */
- palette[i * 3 + 1] = (rgb565 >> 3) & 0xfc; /* green */
- palette[i * 3 + 2] = (rgb565 >> 8) & 0xf8; /* blue */
+ palette[i * 3 + 0] = ((rgb565 >> 11) * 527 + 23) >> 6; /* r */
+ palette[i * 3 + 1] = (((rgb565 >> 5) & 0x3f) * 259 + 33) >> 6; /* g */
+ palette[i * 3 + 2] = ((rgb565 & 0x1f) * 527 + 23) >> 6; /* b */
}
}
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 15/25] ppc4xx_i2c: Remove unimplemented sdata and intr registers
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (13 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 14/25] sm501: Fix hardware cursor color conversion David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 16/25] ppc4xx_i2c: Implement directcntl register David Gibson
` (11 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
BALATON Zoltan, David Gibson
From: BALATON Zoltan <balaton@eik.bme.hu>
We don't emulate slave mode so related registers are not needed.
[lh]sadr are only retained to avoid too many warnings and simplify
debugging but sdata is not even correct because device has a 4 byte
FIFO instead so just remove this unimplemented register for now.
The intr register is also not implemented correctly, it is for
diagnostics and normally not even visible on device without explicitly
enabling it. As no guests are known to need this remove it as well.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/i2c/ppc4xx_i2c.c | 16 +---------------
include/hw/i2c/ppc4xx_i2c.h | 4 +---
2 files changed, 2 insertions(+), 18 deletions(-)
diff --git a/hw/i2c/ppc4xx_i2c.c b/hw/i2c/ppc4xx_i2c.c
index d1936dbdca..4e0aaae1fc 100644
--- a/hw/i2c/ppc4xx_i2c.c
+++ b/hw/i2c/ppc4xx_i2c.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Jocelyn Mayer
* Copyright (c) 2012 François Revol
- * Copyright (c) 2016 BALATON Zoltan
+ * Copyright (c) 2016-2018 BALATON Zoltan
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -63,7 +63,6 @@ static void ppc4xx_i2c_reset(DeviceState *s)
i2c->mdcntl = 0;
i2c->sts = 0;
i2c->extsts = 0x8f;
- i2c->sdata = 0;
i2c->lsadr = 0;
i2c->hsadr = 0;
i2c->clkdiv = 0;
@@ -71,7 +70,6 @@ static void ppc4xx_i2c_reset(DeviceState *s)
i2c->xfrcnt = 0;
i2c->xtcntlss = 0;
i2c->directcntl = 0xf;
- i2c->intr = 0;
}
static inline bool ppc4xx_i2c_is_master(PPC4xxI2CState *i2c)
@@ -139,9 +137,6 @@ static uint64_t ppc4xx_i2c_readb(void *opaque, hwaddr addr, unsigned int size)
TYPE_PPC4xx_I2C, __func__);
}
break;
- case 2:
- ret = i2c->sdata;
- break;
case 4:
ret = i2c->lmadr;
break;
@@ -181,9 +176,6 @@ static uint64_t ppc4xx_i2c_readb(void *opaque, hwaddr addr, unsigned int size)
case 16:
ret = i2c->directcntl;
break;
- case 17:
- ret = i2c->intr;
- break;
default:
if (addr < PPC4xx_I2C_MEM_SIZE) {
qemu_log_mask(LOG_UNIMP, "%s: Unimplemented register 0x%"
@@ -229,9 +221,6 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
}
}
break;
- case 2:
- i2c->sdata = value;
- break;
case 4:
i2c->lmadr = value;
if (i2c_bus_busy(i2c->bus)) {
@@ -302,9 +291,6 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
case 16:
i2c->directcntl = value & 0x7;
break;
- case 17:
- i2c->intr = value;
- break;
default:
if (addr < PPC4xx_I2C_MEM_SIZE) {
qemu_log_mask(LOG_UNIMP, "%s: Unimplemented register 0x%"
diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h
index 3c603071bd..e4b6ded855 100644
--- a/include/hw/i2c/ppc4xx_i2c.h
+++ b/include/hw/i2c/ppc4xx_i2c.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Jocelyn Mayer
* Copyright (c) 2012 François Revol
- * Copyright (c) 2016 BALATON Zoltan
+ * Copyright (c) 2016-2018 BALATON Zoltan
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -49,7 +49,6 @@ typedef struct PPC4xxI2CState {
uint8_t mdcntl;
uint8_t sts;
uint8_t extsts;
- uint8_t sdata;
uint8_t lsadr;
uint8_t hsadr;
uint8_t clkdiv;
@@ -57,7 +56,6 @@ typedef struct PPC4xxI2CState {
uint8_t xfrcnt;
uint8_t xtcntlss;
uint8_t directcntl;
- uint8_t intr;
} PPC4xxI2CState;
#endif /* PPC4XX_I2C_H */
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 16/25] ppc4xx_i2c: Implement directcntl register
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (14 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 15/25] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 17/25] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
` (10 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
BALATON Zoltan, David Gibson
From: BALATON Zoltan <balaton@eik.bme.hu>
As well as being able to generate its own i2c transactions, the ppc4xx
i2c controller has a DIRECTCNTL register which allows explicit control
of the i2c lines.
Using this register an OS can directly bitbang i2c operations. In
order to let emulated i2c devices respond to this, we need to wire up
the DIRECTCNTL register to qemu's bitbanged i2c handling code.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
default-configs/ppc-softmmu.mak | 1 +
default-configs/ppcemb-softmmu.mak | 1 +
hw/i2c/ppc4xx_i2c.c | 14 +++++++++++++-
include/hw/i2c/ppc4xx_i2c.h | 4 ++++
4 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak
index abeeb0418a..851b4afc21 100644
--- a/default-configs/ppc-softmmu.mak
+++ b/default-configs/ppc-softmmu.mak
@@ -26,6 +26,7 @@ CONFIG_USB_EHCI_SYSBUS=y
CONFIG_SM501=y
CONFIG_IDE_SII3112=y
CONFIG_I2C=y
+CONFIG_BITBANG_I2C=y
# For Macs
CONFIG_MAC=y
diff --git a/default-configs/ppcemb-softmmu.mak b/default-configs/ppcemb-softmmu.mak
index 67d18b2e0e..37af1930b3 100644
--- a/default-configs/ppcemb-softmmu.mak
+++ b/default-configs/ppcemb-softmmu.mak
@@ -19,3 +19,4 @@ CONFIG_USB_EHCI_SYSBUS=y
CONFIG_SM501=y
CONFIG_IDE_SII3112=y
CONFIG_I2C=y
+CONFIG_BITBANG_I2C=y
diff --git a/hw/i2c/ppc4xx_i2c.c b/hw/i2c/ppc4xx_i2c.c
index 4e0aaae1fc..fca80d695a 100644
--- a/hw/i2c/ppc4xx_i2c.c
+++ b/hw/i2c/ppc4xx_i2c.c
@@ -30,6 +30,7 @@
#include "cpu.h"
#include "hw/hw.h"
#include "hw/i2c/ppc4xx_i2c.h"
+#include "bitbang_i2c.h"
#define PPC4xx_I2C_MEM_SIZE 18
@@ -46,6 +47,11 @@
#define IIC_XTCNTLSS_SRST (1 << 0)
+#define IIC_DIRECTCNTL_SDAC (1 << 3)
+#define IIC_DIRECTCNTL_SCLC (1 << 2)
+#define IIC_DIRECTCNTL_MSDA (1 << 1)
+#define IIC_DIRECTCNTL_MSCL (1 << 0)
+
static void ppc4xx_i2c_reset(DeviceState *s)
{
PPC4xxI2CState *i2c = PPC4xx_I2C(s);
@@ -289,7 +295,12 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
i2c->xtcntlss = value;
break;
case 16:
- i2c->directcntl = value & 0x7;
+ i2c->directcntl = value & (IIC_DIRECTCNTL_SDAC & IIC_DIRECTCNTL_SCLC);
+ i2c->directcntl |= (value & IIC_DIRECTCNTL_SCLC ? 1 : 0);
+ bitbang_i2c_set(i2c->bitbang, BITBANG_I2C_SCL,
+ i2c->directcntl & IIC_DIRECTCNTL_MSCL);
+ i2c->directcntl |= bitbang_i2c_set(i2c->bitbang, BITBANG_I2C_SDA,
+ (value & IIC_DIRECTCNTL_SDAC) != 0) << 1;
break;
default:
if (addr < PPC4xx_I2C_MEM_SIZE) {
@@ -322,6 +333,7 @@ static void ppc4xx_i2c_init(Object *o)
sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem);
sysbus_init_irq(SYS_BUS_DEVICE(s), &s->irq);
s->bus = i2c_init_bus(DEVICE(s), "i2c");
+ s->bitbang = bitbang_i2c_init(s->bus);
}
static void ppc4xx_i2c_class_init(ObjectClass *klass, void *data)
diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h
index e4b6ded855..ea6c8e1a58 100644
--- a/include/hw/i2c/ppc4xx_i2c.h
+++ b/include/hw/i2c/ppc4xx_i2c.h
@@ -31,6 +31,9 @@
#include "hw/sysbus.h"
#include "hw/i2c/i2c.h"
+/* from hw/i2c/bitbang_i2c.h */
+typedef struct bitbang_i2c_interface bitbang_i2c_interface;
+
#define TYPE_PPC4xx_I2C "ppc4xx-i2c"
#define PPC4xx_I2C(obj) OBJECT_CHECK(PPC4xxI2CState, (obj), TYPE_PPC4xx_I2C)
@@ -42,6 +45,7 @@ typedef struct PPC4xxI2CState {
I2CBus *bus;
qemu_irq irq;
MemoryRegion iomem;
+ bitbang_i2c_interface *bitbang;
uint8_t mdata;
uint8_t lmadr;
uint8_t hmadr;
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 17/25] target/ppc: Add missing opcode for icbt on PPC440
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (15 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 16/25] ppc4xx_i2c: Implement directcntl register David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 18/25] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
` (9 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
BALATON Zoltan, David Gibson
From: BALATON Zoltan <balaton@eik.bme.hu>
According to PPC440 User Manual PPC440 has multiple opcodes for icbt
instruction: one for compatibility with older cores and two 440
specific opcodes one of which is defined in BookE. QEMU only
implements two of these, add the missing one.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
target/ppc/translate.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 5fe1ba6555..3a215a1dc6 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -6707,6 +6707,8 @@ GEN_HANDLER_E(mbar, 0x1F, 0x16, 0x1a, 0x001FF801,
GEN_HANDLER(msync_4xx, 0x1F, 0x16, 0x12, 0x03FFF801, PPC_BOOKE),
GEN_HANDLER2_E(icbt_440, "icbt", 0x1F, 0x16, 0x00, 0x03E00001,
PPC_BOOKE, PPC2_BOOKE206),
+GEN_HANDLER2(icbt_440, "icbt", 0x1F, 0x06, 0x08, 0x03E00001,
+ PPC_440_SPEC),
GEN_HANDLER(lvsl, 0x1f, 0x06, 0x00, 0x00000001, PPC_ALTIVEC),
GEN_HANDLER(lvsr, 0x1f, 0x06, 0x01, 0x00000001, PPC_ALTIVEC),
GEN_HANDLER(mfvscr, 0x04, 0x2, 0x18, 0x001ff800, PPC_ALTIVEC),
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 18/25] pseries: Update SLOF firmware image to qemu-slof-20180621
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (16 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 17/25] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 19/25] spapr: Maximum (HPT) pagesize property David Gibson
` (8 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
From: Alexey Kardashevskiy <aik@ozlabs.ru>
The changes are:
1. fixed broken_sc1;
2. added switching between boot consoles;
3. added PXE boot.
The full list is:
> lib/libnet/pxelinux: Fix two off-by-one bugs in the pxelinux.cfg parser
> lib/libnet/pxelinux: Make the size handling for pxelinux_load_cfg more logical
> libc: Add a simple implementation of an assert() function
> libnet: Support UUID-based pxelinux.cfg file names
> slof: Add a helper function to get the contents of a property in C code
> libnet: Add support for DHCPv4 options 209 and 210
> libnet: Wire up pxelinux.cfg network booting
> libnet: Add functions for downloading and parsing pxelinux.cfg files
> libnet: Put code for determing TFTP error strings into a separate function
> libc: Add the snprintf() function
> libnet: Pass ip_version via struct filename_ip
> resolve ihandle and xt handle in the input command (like for the output)
> Fix output word
> obp-tftp: Make sure to not overwrite paflof in memory
> libnet: Get rid of unused huge_load and block_size parameters
> libc: Check for NULL pointers in free()
> libc: Implement strrchr()
> libnet: Get rid of unnecessary (char *) casts
> broken_sc1: check for H_PRIVILEGE
> OF: Use new property "stdout-path" for boot console
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
pc-bios/README | 2 +-
pc-bios/slof.bin | Bin 913880 -> 924840 bytes
roms/SLOF | 2 +-
3 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pc-bios/README b/pc-bios/README
index a843e1e8b1..99e15a737b 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-20171214.
+ built from git tag qemu-slof-20180621.
- 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 d46c83efb706e4664fec834234ba69d96ede3473..4e0e33f8297888ca8e143be784c30ce404f072cd 100644
GIT binary patch
delta 231859
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
GeDXiN>nk7t
delta 221666
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
U&)nGEW5@N|C;#^jU!U~<0rFLY<^TWy
diff --git a/roms/SLOF b/roms/SLOF
index 2317427ce7..7d37babcfa 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@
-Subproject commit 2317427ce76006723f7ae103a6998ab41dd79c68
+Subproject commit 7d37babcfa48a6eb08e726a8d13b745cb2eebe1c
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 19/25] spapr: Maximum (HPT) pagesize property
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (17 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 18/25] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 20/25] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
` (7 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
The way the POWER Hash Page Table (HPT) MMU is virtualized by KVM HV means
that every page that the guest puts in the pagetables must be truly
physically contiguous, not just GPA-contiguous. In effect this means that
an HPT guest can't use any pagesizes greater than the host page size used
to back its memory.
At present we handle this by changing what we advertise to the guest based
on the backing pagesizes. This is pretty bad, because it means the guest
sees a different environment depending on what should be host configuration
details.
As a start on fixing this, we add a new capability parameter to the
pseries machine type which gives the maximum allowed pagesizes for an
HPT guest. For now we just create and validate the parameter without
making it do anything.
For backwards compatibility, on older machine types we set it to the max
available page size for the host. For the 3.0 machine type, we fix it to
16, the intention being to only allow HPT pagesizes up to 64kiB by default
in future.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
hw/ppc/spapr.c | 12 +++++++++
hw/ppc/spapr_caps.c | 56 ++++++++++++++++++++++++++++++++++++++++++
include/hw/ppc/spapr.h | 4 ++-
3 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 78186500e9..70b150b098 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -63,6 +63,7 @@
#include "hw/virtio/vhost-scsi-common.h"
#include "exec/address-spaces.h"
+#include "exec/ram_addr.h"
#include "hw/usb.h"
#include "qemu/config-file.h"
#include "qemu/error-report.h"
@@ -4015,6 +4016,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
smc->default_caps.caps[SPAPR_CAP_CFPC] = SPAPR_CAP_BROKEN;
smc->default_caps.caps[SPAPR_CAP_SBBC] = SPAPR_CAP_BROKEN;
smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN;
+ smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* 64kiB */
spapr_caps_add_properties(smc, &error_abort);
}
@@ -4103,8 +4105,18 @@ static void spapr_machine_2_12_instance_options(MachineState *machine)
static void spapr_machine_2_12_class_options(MachineClass *mc)
{
+ sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+ uint8_t mps;
+
spapr_machine_3_0_class_options(mc);
SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_12);
+
+ if (kvmppc_hpt_needs_host_contiguous_pages()) {
+ mps = ctz64(qemu_getrampagesize());
+ } else {
+ mps = 34; /* allow everything up to 16GiB, i.e. everything */
+ }
+ smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = mps;
}
DEFINE_SPAPR_MACHINE(2_12, "2.12", false);
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 68a4243efc..6cdc0c94e7 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -27,6 +27,7 @@
#include "qapi/visitor.h"
#include "sysemu/hw_accel.h"
#include "target/ppc/cpu.h"
+#include "target/ppc/mmu-hash64.h"
#include "cpu-models.h"
#include "kvm_ppc.h"
@@ -144,6 +145,42 @@ out:
g_free(val);
}
+static void spapr_cap_get_pagesize(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ sPAPRCapabilityInfo *cap = opaque;
+ sPAPRMachineState *spapr = SPAPR_MACHINE(obj);
+ uint8_t val = spapr_get_cap(spapr, cap->index);
+ uint64_t pagesize = (1ULL << val);
+
+ visit_type_size(v, name, &pagesize, errp);
+}
+
+static void spapr_cap_set_pagesize(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ sPAPRCapabilityInfo *cap = opaque;
+ sPAPRMachineState *spapr = SPAPR_MACHINE(obj);
+ uint64_t pagesize;
+ uint8_t val;
+ Error *local_err = NULL;
+
+ visit_type_size(v, name, &pagesize, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ }
+
+ if (!is_power_of_2(pagesize)) {
+ error_setg(errp, "cap-%s must be a power of 2", cap->name);
+ return;
+ }
+
+ val = ctz64(pagesize);
+ spapr->cmd_line_caps[cap->index] = true;
+ spapr->eff.caps[cap->index] = val;
+}
+
static void cap_htm_apply(sPAPRMachineState *spapr, uint8_t val, Error **errp)
{
if (!val) {
@@ -267,6 +304,16 @@ static void cap_safe_indirect_branch_apply(sPAPRMachineState *spapr,
#define VALUE_DESC_TRISTATE " (broken, workaround, fixed)"
+static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
+ uint8_t val, Error **errp)
+{
+ if (val < 12) {
+ error_setg(errp, "Require at least 4kiB hpt-max-page-size");
+ } else if (val < 16) {
+ warn_report("Many guests require at least 64kiB hpt-max-page-size");
+ }
+}
+
sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
[SPAPR_CAP_HTM] = {
.name = "htm",
@@ -326,6 +373,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
.possible = &cap_ibs_possible,
.apply = cap_safe_indirect_branch_apply,
},
+ [SPAPR_CAP_HPT_MAXPAGESIZE] = {
+ .name = "hpt-max-page-size",
+ .description = "Maximum page size for Hash Page Table guests",
+ .index = SPAPR_CAP_HPT_MAXPAGESIZE,
+ .get = spapr_cap_get_pagesize,
+ .set = spapr_cap_set_pagesize,
+ .type = "int",
+ .apply = cap_hpt_maxpagesize_apply,
+ },
};
static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr,
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 8a9142244f..4bc9dbff96 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -66,8 +66,10 @@ typedef enum {
#define SPAPR_CAP_SBBC 0x04
/* Indirect Branch Serialisation */
#define SPAPR_CAP_IBS 0x05
+/* HPT Maximum Page Size (encoded as a shift) */
+#define SPAPR_CAP_HPT_MAXPAGESIZE 0x06
/* Num Caps */
-#define SPAPR_CAP_NUM (SPAPR_CAP_IBS + 1)
+#define SPAPR_CAP_NUM (SPAPR_CAP_HPT_MAXPAGESIZE + 1)
/*
* Capability Values
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 20/25] spapr: Use maximum page size capability to simplify memory backend checking
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (18 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 19/25] spapr: Maximum (HPT) pagesize property David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 21/25] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
` (6 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
The way we used to handle KVM allowable guest pagesizes for PAPR guests
required some convoluted checking of memory attached to the guest.
The allowable pagesizes advertised to the guest cpus depended on the memory
which was attached at boot, but then we needed to ensure that any memory
later hotplugged didn't change which pagesizes were allowed.
Now that we have an explicit machine option to control the allowable
maximum pagesize we can simplify this. We just check all memory backends
against that declared pagesize. We check base and cold-plugged memory at
reset time, and hotplugged memory at pre_plug() time.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
hw/ppc/spapr.c | 17 +++++++----------
hw/ppc/spapr_caps.c | 21 +++++++++++++++++++++
include/hw/ppc/spapr.h | 3 +++
target/ppc/kvm.c | 14 --------------
target/ppc/kvm_ppc.h | 6 ------
5 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 70b150b098..0d032a1ad0 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3192,11 +3192,13 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
Error **errp)
{
const sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(hotplug_dev);
+ sPAPRMachineState *spapr = SPAPR_MACHINE(hotplug_dev);
PCDIMMDevice *dimm = PC_DIMM(dev);
PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
MemoryRegion *mr;
uint64_t size;
- char *mem_dev;
+ Object *memdev;
+ hwaddr pagesize;
if (!smc->dr_lmb_enabled) {
error_setg(errp, "Memory hotplug not supported for this machine");
@@ -3215,15 +3217,10 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
return;
}
- mem_dev = object_property_get_str(OBJECT(dimm), PC_DIMM_MEMDEV_PROP, NULL);
- if (mem_dev && !kvmppc_is_mem_backend_page_size_ok(mem_dev)) {
- error_setg(errp, "Memory backend has bad page size. "
- "Use 'memory-backend-file' with correct mem-path.");
- goto out;
- }
-
-out:
- g_free(mem_dev);
+ memdev = object_property_get_link(OBJECT(dimm), PC_DIMM_MEMDEV_PROP,
+ &error_abort);
+ pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(memdev));
+ spapr_check_pagesize(spapr, pagesize, errp);
}
struct sPAPRDIMMState {
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 6cdc0c94e7..722b213d9a 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -26,6 +26,7 @@
#include "qapi/error.h"
#include "qapi/visitor.h"
#include "sysemu/hw_accel.h"
+#include "exec/ram_addr.h"
#include "target/ppc/cpu.h"
#include "target/ppc/mmu-hash64.h"
#include "cpu-models.h"
@@ -304,14 +305,34 @@ static void cap_safe_indirect_branch_apply(sPAPRMachineState *spapr,
#define VALUE_DESC_TRISTATE " (broken, workaround, fixed)"
+void spapr_check_pagesize(sPAPRMachineState *spapr, hwaddr pagesize,
+ Error **errp)
+{
+ hwaddr maxpagesize = (1ULL << spapr->eff.caps[SPAPR_CAP_HPT_MAXPAGESIZE]);
+
+ if (!kvmppc_hpt_needs_host_contiguous_pages()) {
+ return;
+ }
+
+ if (maxpagesize > pagesize) {
+ error_setg(errp,
+ "Can't support %"HWADDR_PRIu" kiB guest pages with %"
+ HWADDR_PRIu" kiB host pages with this KVM implementation",
+ maxpagesize >> 10, pagesize >> 10);
+ }
+}
+
static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
uint8_t val, Error **errp)
{
if (val < 12) {
error_setg(errp, "Require at least 4kiB hpt-max-page-size");
+ return;
} else if (val < 16) {
warn_report("Many guests require at least 64kiB hpt-max-page-size");
}
+
+ spapr_check_pagesize(spapr, qemu_getrampagesize(), errp);
}
sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 4bc9dbff96..7e028164ba 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -806,4 +806,7 @@ void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu);
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
int spapr_caps_post_migration(sPAPRMachineState *spapr);
+void spapr_check_pagesize(sPAPRMachineState *spapr, hwaddr pagesize,
+ Error **errp);
+
#endif /* HW_SPAPR_H */
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 50b5d01432..9cfbd388ad 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -500,26 +500,12 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
cpu->hash64_opts->flags &= ~PPC_HASH64_1TSEG;
}
}
-
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
- Object *mem_obj = object_resolve_path(obj_path, NULL);
- long pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(mem_obj));
-
- return pagesize >= max_cpu_page_size;
-}
-
#else /* defined (TARGET_PPC64) */
static inline void kvm_fixup_page_sizes(PowerPCCPU *cpu)
{
}
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
- return true;
-}
-
#endif /* !defined (TARGET_PPC64) */
unsigned long kvm_arch_vcpu_id(CPUState *cpu)
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index a7ddb8a5d6..443fca0a4e 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -71,7 +71,6 @@ int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
bool kvmppc_hpt_needs_host_contiguous_pages(void);
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
#else
@@ -228,11 +227,6 @@ static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
return false;
}
-static inline bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
- return true;
-}
-
static inline bool kvmppc_has_cap_spapr_vfio(void)
{
return false;
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 21/25] target/ppc: Add ppc_hash64_filter_pagesizes()
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (19 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 20/25] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 22/25] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
` (5 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
The paravirtualized PAPR platform sometimes needs to restrict the guest to
using only some of the page sizes actually supported by the host's MMU.
At the moment this is handled in KVM specific code, but for consistency we
want to apply the same limitations to all accelerators.
This makes a start on this by providing a helper function in the cpu code
to allow platform code to remove some of the cpu's page size definitions
via a caller supplied callback.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
target/ppc/mmu-hash64.c | 59 +++++++++++++++++++++++++++++++++++++++++
target/ppc/mmu-hash64.h | 3 +++
2 files changed, 62 insertions(+)
diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c
index aa200cba4c..276d9015e7 100644
--- a/target/ppc/mmu-hash64.c
+++ b/target/ppc/mmu-hash64.c
@@ -1166,3 +1166,62 @@ const PPCHash64Options ppc_hash64_opts_POWER7 = {
},
}
};
+
+void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
+ bool (*cb)(void *, uint32_t, uint32_t),
+ void *opaque)
+{
+ PPCHash64Options *opts = cpu->hash64_opts;
+ int i;
+ int n = 0;
+ bool ci_largepage = false;
+
+ assert(opts);
+
+ n = 0;
+ for (i = 0; i < ARRAY_SIZE(opts->sps); i++) {
+ PPCHash64SegmentPageSizes *sps = &opts->sps[i];
+ int j;
+ int m = 0;
+
+ assert(n <= i);
+
+ if (!sps->page_shift) {
+ break;
+ }
+
+ for (j = 0; j < ARRAY_SIZE(sps->enc); j++) {
+ PPCHash64PageSize *ps = &sps->enc[j];
+
+ assert(m <= j);
+ if (!ps->page_shift) {
+ break;
+ }
+
+ if (cb(opaque, sps->page_shift, ps->page_shift)) {
+ if (ps->page_shift >= 16) {
+ ci_largepage = true;
+ }
+ sps->enc[m++] = *ps;
+ }
+ }
+
+ /* Clear rest of the row */
+ for (j = m; j < ARRAY_SIZE(sps->enc); j++) {
+ memset(&sps->enc[j], 0, sizeof(sps->enc[j]));
+ }
+
+ if (m) {
+ n++;
+ }
+ }
+
+ /* Clear the rest of the table */
+ for (i = n; i < ARRAY_SIZE(opts->sps); i++) {
+ memset(&opts->sps[i], 0, sizeof(opts->sps[i]));
+ }
+
+ if (!ci_largepage) {
+ opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
+ }
+}
diff --git a/target/ppc/mmu-hash64.h b/target/ppc/mmu-hash64.h
index 53dcec5b93..f11efc9cbc 100644
--- a/target/ppc/mmu-hash64.h
+++ b/target/ppc/mmu-hash64.h
@@ -20,6 +20,9 @@ unsigned ppc_hash64_hpte_page_shift_noslb(PowerPCCPU *cpu,
void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val);
void ppc_hash64_init(PowerPCCPU *cpu);
void ppc_hash64_finalize(PowerPCCPU *cpu);
+void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
+ bool (*cb)(void *, uint32_t, uint32_t),
+ void *opaque);
#endif
/*
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 22/25] spapr: Limit available pagesizes to provide a consistent guest environment
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (20 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 21/25] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 23/25] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
` (4 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
KVM HV has some limitations (deriving from the hardware) that mean not all
host-cpu supported pagesizes may be usable in the guest. At present this
means that KVM guests and TCG guests may see different available page sizes
even if they notionally have the same vcpu model. This is confusing and
also prevents migration between TCG and KVM.
This patch makes the environment consistent by always allowing the same set
of pagesizes. Since we can't remove the KVM limitations, we do this by
always applying the same limitations it has, even to TCG guests.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
hw/ppc/spapr_caps.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 722b213d9a..62663ebdf5 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -335,6 +335,39 @@ static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
spapr_check_pagesize(spapr, qemu_getrampagesize(), errp);
}
+static bool spapr_pagesize_cb(void *opaque, uint32_t seg_pshift,
+ uint32_t pshift)
+{
+ unsigned maxshift = *((unsigned *)opaque);
+
+ assert(pshift >= seg_pshift);
+
+ /* Don't allow the guest to use pages bigger than the configured
+ * maximum size */
+ if (pshift > maxshift) {
+ return false;
+ }
+
+ /* For whatever reason, KVM doesn't allow multiple pagesizes
+ * within a segment, *except* for the case of 16M pages in a 4k or
+ * 64k segment. Always exclude other cases, so that TCG and KVM
+ * guests see a consistent environment */
+ if ((pshift != seg_pshift) && (pshift != 24)) {
+ return false;
+ }
+
+ return true;
+}
+
+static void cap_hpt_maxpagesize_cpu_apply(sPAPRMachineState *spapr,
+ PowerPCCPU *cpu,
+ uint8_t val, Error **errp)
+{
+ unsigned maxshift = val;
+
+ ppc_hash64_filter_pagesizes(cpu, spapr_pagesize_cb, &maxshift);
+}
+
sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
[SPAPR_CAP_HTM] = {
.name = "htm",
@@ -402,6 +435,7 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
.set = spapr_cap_set_pagesize,
.type = "int",
.apply = cap_hpt_maxpagesize_apply,
+ .cpu_apply = cap_hpt_maxpagesize_cpu_apply,
},
};
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 23/25] spapr: Don't rewrite mmu capabilities in KVM mode
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (21 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 22/25] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 24/25] mac_dbdma: only dump commands for debug enabled channels David Gibson
` (3 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
David Gibson
Currently during KVM initialization on POWER, kvm_fixup_page_sizes()
rewrites a bunch of information in the cpu state to reflect the
capabilities of the host MMU and KVM. This overwrites the information
that's already there reflecting how the TCG implementation of the MMU will
operate.
This means that we can get guest-visibly different behaviour between KVM
and TCG (and between different KVM implementations). That's bad. It also
prevents migration between KVM and TCG.
The pseries machine type now has filtering of the pagesizes it allows the
guest to use which means it can present a consistent model of the MMU
across all accelerators.
So, we can now replace kvm_fixup_page_sizes() with kvm_check_mmu() which
merely verifies that the expected cpu model can be faithfully handled by
KVM, rather than updating the cpu model to match KVM.
We call kvm_check_mmu() from the spapr cpu reset code. This is a hack:
conceptually it makes more sense where fixup_page_sizes() was - in the KVM
cpu init path. However, doing that would require moving the platform's
pagesize filtering much earlier, which would require a lot of work making
further adjustments. There wouldn't be a lot of concrete point to doing
that, since the only KVM implementation which has the awkward MMU
restrictions is KVM HV, which can only work with an spapr guest anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/spapr_cpu_core.c | 2 +
target/ppc/kvm.c | 133 ++++++++++++++++++++--------------------
target/ppc/kvm_ppc.h | 5 ++
3 files changed, 72 insertions(+), 68 deletions(-)
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index bfb94f650c..993759db47 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -78,6 +78,8 @@ static void spapr_cpu_reset(void *opaque)
spapr_cpu->dtl_size = 0;
spapr_caps_cpu_apply(SPAPR_MACHINE(qdev_get_machine()), cpu);
+
+ kvm_check_mmu(cpu, &error_fatal);
}
void spapr_cpu_set_entry_state(PowerPCCPU *cpu, target_ulong nip, target_ulong r3)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 9cfbd388ad..4df4ff6cbf 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -419,93 +419,93 @@ bool kvmppc_hpt_needs_host_contiguous_pages(void)
return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
}
-static bool kvm_valid_page_size(uint32_t flags, long rampgsize, uint32_t shift)
+void kvm_check_mmu(PowerPCCPU *cpu, Error **errp)
{
- if (!kvmppc_hpt_needs_host_contiguous_pages()) {
- return true;
- }
-
- return (1ul << shift) <= rampgsize;
-}
-
-static long max_cpu_page_size;
-
-static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
-{
- static struct kvm_ppc_smmu_info smmu_info;
- static bool has_smmu_info;
- CPUPPCState *env = &cpu->env;
+ struct kvm_ppc_smmu_info smmu_info;
int iq, ik, jq, jk;
- /* We only handle page sizes for 64-bit server guests for now */
- if (!(env->mmu_model & POWERPC_MMU_64)) {
+ /* For now, we only have anything to check on hash64 MMUs */
+ if (!cpu->hash64_opts || !kvm_enabled()) {
return;
}
- /* Collect MMU info from kernel if not already */
- if (!has_smmu_info) {
- kvm_get_smmu_info(cpu, &smmu_info);
- has_smmu_info = true;
- }
+ kvm_get_smmu_info(cpu, &smmu_info);
- if (!max_cpu_page_size) {
- max_cpu_page_size = qemu_getrampagesize();
+ if (ppc_hash64_has(cpu, PPC_HASH64_1TSEG)
+ && !(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
+ error_setg(errp,
+ "KVM does not support 1TiB segments which guest expects");
+ return;
}
- /* Convert to QEMU form */
- memset(cpu->hash64_opts->sps, 0, sizeof(*cpu->hash64_opts->sps));
-
- /* If we have HV KVM, we need to forbid CI large pages if our
- * host page size is smaller than 64K.
- */
- if (kvmppc_hpt_needs_host_contiguous_pages()) {
- if (getpagesize() >= 0x10000) {
- cpu->hash64_opts->flags |= PPC_HASH64_CI_LARGEPAGE;
- } else {
- cpu->hash64_opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
- }
+ if (smmu_info.slb_size < cpu->hash64_opts->slb_size) {
+ error_setg(errp, "KVM only supports %u SLB entries, but guest needs %u",
+ smmu_info.slb_size, cpu->hash64_opts->slb_size);
+ return;
}
/*
- * XXX This loop should be an entry wide AND of the capabilities that
- * the selected CPU has with the capabilities that KVM supports.
+ * Verify that every pagesize supported by the cpu model is
+ * supported by KVM with the same encodings
*/
- for (ik = iq = 0; ik < KVM_PPC_PAGE_SIZES_MAX_SZ; ik++) {
+ for (iq = 0; iq < ARRAY_SIZE(cpu->hash64_opts->sps); iq++) {
PPCHash64SegmentPageSizes *qsps = &cpu->hash64_opts->sps[iq];
- struct kvm_ppc_one_seg_page_size *ksps = &smmu_info.sps[ik];
+ struct kvm_ppc_one_seg_page_size *ksps;
- if (!kvm_valid_page_size(smmu_info.flags, max_cpu_page_size,
- ksps->page_shift)) {
- continue;
- }
- qsps->page_shift = ksps->page_shift;
- qsps->slb_enc = ksps->slb_enc;
- for (jk = jq = 0; jk < KVM_PPC_PAGE_SIZES_MAX_SZ; jk++) {
- if (!kvm_valid_page_size(smmu_info.flags, max_cpu_page_size,
- ksps->enc[jk].page_shift)) {
- continue;
- }
- qsps->enc[jq].page_shift = ksps->enc[jk].page_shift;
- qsps->enc[jq].pte_enc = ksps->enc[jk].pte_enc;
- if (++jq >= PPC_PAGE_SIZES_MAX_SZ) {
+ for (ik = 0; ik < ARRAY_SIZE(smmu_info.sps); ik++) {
+ if (qsps->page_shift == smmu_info.sps[ik].page_shift) {
break;
}
}
- if (++iq >= PPC_PAGE_SIZES_MAX_SZ) {
- break;
+ if (ik >= ARRAY_SIZE(smmu_info.sps)) {
+ error_setg(errp, "KVM doesn't support for base page shift %u",
+ qsps->page_shift);
+ return;
+ }
+
+ ksps = &smmu_info.sps[ik];
+ if (ksps->slb_enc != qsps->slb_enc) {
+ error_setg(errp,
+"KVM uses SLB encoding 0x%x for page shift %u, but guest expects 0x%x",
+ ksps->slb_enc, ksps->page_shift, qsps->slb_enc);
+ return;
+ }
+
+ for (jq = 0; jq < ARRAY_SIZE(qsps->enc); jq++) {
+ for (jk = 0; jk < ARRAY_SIZE(ksps->enc); jk++) {
+ if (qsps->enc[jq].page_shift == ksps->enc[jk].page_shift) {
+ break;
+ }
+ }
+
+ if (jk >= ARRAY_SIZE(ksps->enc)) {
+ error_setg(errp, "KVM doesn't support page shift %u/%u",
+ qsps->enc[jq].page_shift, qsps->page_shift);
+ return;
+ }
+ if (qsps->enc[jq].pte_enc != ksps->enc[jk].pte_enc) {
+ error_setg(errp,
+"KVM uses PTE encoding 0x%x for page shift %u/%u, but guest expects 0x%x",
+ ksps->enc[jk].pte_enc, qsps->enc[jq].page_shift,
+ qsps->page_shift, qsps->enc[jq].pte_enc);
+ return;
+ }
}
}
- cpu->hash64_opts->slb_size = smmu_info.slb_size;
- if (!(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
- cpu->hash64_opts->flags &= ~PPC_HASH64_1TSEG;
- }
-}
-#else /* defined (TARGET_PPC64) */
-static inline void kvm_fixup_page_sizes(PowerPCCPU *cpu)
-{
+ if (ppc_hash64_has(cpu, PPC_HASH64_CI_LARGEPAGE)) {
+ /* Mostly what guest pagesizes we can use are related to the
+ * host pages used to map guest RAM, which is handled in the
+ * platform code. Cache-Inhibited largepages (64k) however are
+ * used for I/O, so if they're mapped to the host at all it
+ * will be a normal mapping, not a special hugepage one used
+ * for RAM. */
+ if (getpagesize() < 0x10000) {
+ error_setg(errp,
+ "KVM can't supply 64kiB CI pages, which guest expects");
+ }
+ }
}
-
#endif /* !defined (TARGET_PPC64) */
unsigned long kvm_arch_vcpu_id(CPUState *cpu)
@@ -551,9 +551,6 @@ int kvm_arch_init_vcpu(CPUState *cs)
CPUPPCState *cenv = &cpu->env;
int ret;
- /* Gather server mmu info from KVM and update the CPU state */
- kvm_fixup_page_sizes(cpu);
-
/* Synchronize sregs with kvm */
ret = kvm_arch_sync_sregs(cpu);
if (ret) {
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index 443fca0a4e..657582bb32 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -71,6 +71,7 @@ int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
bool kvmppc_hpt_needs_host_contiguous_pages(void);
+void kvm_check_mmu(PowerPCCPU *cpu, Error **errp);
#else
@@ -227,6 +228,10 @@ static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
return false;
}
+static inline void kvm_check_mmu(PowerPCCPU *cpu, Error **errp)
+{
+}
+
static inline bool kvmppc_has_cap_spapr_vfio(void)
{
return false;
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 24/25] mac_dbdma: only dump commands for debug enabled channels
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (22 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 23/25] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 25/25] mac_newworld: always enable disable_direct_reg3_writes for ADB machines David Gibson
` (2 subsequent siblings)
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
Mark Cave-Ayland, David Gibson
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This enables us to apply the same filter in DEBUG_DBDMA_CHANMASK to the
DBDMA command execution debug output.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/misc/macio/mac_dbdma.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/hw/misc/macio/mac_dbdma.c b/hw/misc/macio/mac_dbdma.c
index 1b2a69b3ef..87ae246d37 100644
--- a/hw/misc/macio/mac_dbdma.c
+++ b/hw/misc/macio/mac_dbdma.c
@@ -71,18 +71,19 @@ static DBDMAState *dbdma_from_ch(DBDMA_channel *ch)
}
#if DEBUG_DBDMA
-static void dump_dbdma_cmd(dbdma_cmd *cmd)
+static void dump_dbdma_cmd(DBDMA_channel *ch, dbdma_cmd *cmd)
{
- printf("dbdma_cmd %p\n", cmd);
- printf(" req_count 0x%04x\n", le16_to_cpu(cmd->req_count));
- printf(" command 0x%04x\n", le16_to_cpu(cmd->command));
- printf(" phy_addr 0x%08x\n", le32_to_cpu(cmd->phy_addr));
- printf(" cmd_dep 0x%08x\n", le32_to_cpu(cmd->cmd_dep));
- printf(" res_count 0x%04x\n", le16_to_cpu(cmd->res_count));
- printf(" xfer_status 0x%04x\n", le16_to_cpu(cmd->xfer_status));
+ DBDMA_DPRINTFCH(ch, "dbdma_cmd %p\n", cmd);
+ DBDMA_DPRINTFCH(ch, " req_count 0x%04x\n", le16_to_cpu(cmd->req_count));
+ DBDMA_DPRINTFCH(ch, " command 0x%04x\n", le16_to_cpu(cmd->command));
+ DBDMA_DPRINTFCH(ch, " phy_addr 0x%08x\n", le32_to_cpu(cmd->phy_addr));
+ DBDMA_DPRINTFCH(ch, " cmd_dep 0x%08x\n", le32_to_cpu(cmd->cmd_dep));
+ DBDMA_DPRINTFCH(ch, " res_count 0x%04x\n", le16_to_cpu(cmd->res_count));
+ DBDMA_DPRINTFCH(ch, " xfer_status 0x%04x\n",
+ le16_to_cpu(cmd->xfer_status));
}
#else
-static void dump_dbdma_cmd(dbdma_cmd *cmd)
+static void dump_dbdma_cmd(DBDMA_channel *ch, dbdma_cmd *cmd)
{
}
#endif
@@ -448,7 +449,7 @@ static void channel_run(DBDMA_channel *ch)
uint32_t phy_addr;
DBDMA_DPRINTFCH(ch, "channel_run\n");
- dump_dbdma_cmd(current);
+ dump_dbdma_cmd(ch, current);
/* clear WAKE flag at command fetch */
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [Qemu-devel] [PULL 25/25] mac_newworld: always enable disable_direct_reg3_writes for ADB machines
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (23 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 24/25] mac_dbdma: only dump commands for debug enabled channels David Gibson
@ 2018-06-22 10:35 ` David Gibson
2018-06-22 13:45 ` [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 no-reply
2018-06-22 15:03 ` Peter Maydell
26 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-22 10:35 UTC (permalink / raw)
To: peter.maydell
Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
Mark Cave-Ayland, David Gibson
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Commit 84051eb400 "adb: add property to disable direct reg 3 writes" added a
workaround for MacOS 9 incorrectly setting the mouse address during boot of
PMU machines.
Further testing has shown that since fb6649f172 "adb: fix read reg 3 byte
ordering" this can still sometimes happen with the CUDA mac99 machine,
so let's enable this workaround for all New World machines using ADB for now.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
hw/ppc/mac_newworld.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index ff715ffffd..2b13fcdde5 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -407,11 +407,11 @@ static void ppc_core99_init(MachineState *machine)
adb_bus = qdev_get_child_bus(dev, "adb.0");
dev = qdev_create(adb_bus, TYPE_ADB_KEYBOARD);
- qdev_prop_set_bit(dev, "disable-direct-reg3-writes", has_pmu);
+ qdev_prop_set_bit(dev, "disable-direct-reg3-writes", true);
qdev_init_nofail(dev);
dev = qdev_create(adb_bus, TYPE_ADB_MOUSE);
- qdev_prop_set_bit(dev, "disable-direct-reg3-writes", has_pmu);
+ qdev_prop_set_bit(dev, "disable-direct-reg3-writes", true);
qdev_init_nofail(dev);
}
--
2.17.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (24 preceding siblings ...)
2018-06-22 10:35 ` [Qemu-devel] [PULL 25/25] mac_newworld: always enable disable_direct_reg3_writes for ADB machines David Gibson
@ 2018-06-22 13:45 ` no-reply
2018-06-22 15:03 ` Peter Maydell
26 siblings, 0 replies; 32+ messages in thread
From: no-reply @ 2018-06-22 13:45 UTC (permalink / raw)
To: david
Cc: famz, peter.maydell, lvivier, aik, qemu-devel, agraf, groug,
qemu-ppc, clg
Hi,
This series failed docker-mingw@fedora build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
Type: series
Message-id: 20180622103528.28598-1-david@gibson.dropbear.id.au
Subject: [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=8
time make docker-test-mingw@fedora
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
f371f772af mac_newworld: always enable disable_direct_reg3_writes for ADB machines
382c7f8b1a mac_dbdma: only dump commands for debug enabled channels
f42f94fc44 spapr: Don't rewrite mmu capabilities in KVM mode
647c6b7b1b spapr: Limit available pagesizes to provide a consistent guest environment
cde4d3686c target/ppc: Add ppc_hash64_filter_pagesizes()
c8be97a6b8 spapr: Use maximum page size capability to simplify memory backend checking
dc32980d80 spapr: Maximum (HPT) pagesize property
9af6045be3 pseries: Update SLOF firmware image to qemu-slof-20180621
48b53f833e target/ppc: Add missing opcode for icbt on PPC440
fe603e6137 ppc4xx_i2c: Implement directcntl register
fa0708b281 ppc4xx_i2c: Remove unimplemented sdata and intr registers
c82cd13219 sm501: Fix hardware cursor color conversion
ba9df9a120 fpu_helper.c: fix helper_fpscr_clrbit() function
661d19e254 spapr: remove unused spapr_irq routines
0e4bc13f40 spapr: split the IRQ allocation sequence
bac1f04828 target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper
be02f5eae0 spapr: Add cpu_apply hook to capabilities
cee082584e spapr: Compute effective capability values earlier
2cc304ba20 target/ppc: Allow cpu compatiblity checks based on type, not instance
ff8d040111 ppc/pnv: consolidate the creation of the ISA bus device tree
c08c38d895 ppc/pnv: introduce Pnv8Chip and Pnv9Chip models
105a97650a spapr_cpu_core: migrate VPA related state
d404c5a81a spapr_cpu_core: migrate per-CPU data
c32bf7629b ppc/pnv: introduce a new isa_create() operation to the chip model
d84acdec84 ppc/pnv: introduce a new intc_create() operation to the chip model
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-8ft1b4rs/src/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
BUILD fedora
make[1]: Entering directory '/var/tmp/patchew-tester-tmp-8ft1b4rs/src'
GEN /var/tmp/patchew-tester-tmp-8ft1b4rs/src/docker-src.2018-06-22-09.43.36.24811/qemu.tar
Cloning into '/var/tmp/patchew-tester-tmp-8ft1b4rs/src/docker-src.2018-06-22-09.43.36.24811/qemu.tar.vroot'...
done.
Checking out files: 47% (2968/6275)
Checking out files: 48% (3012/6275)
Checking out files: 49% (3075/6275)
Checking out files: 50% (3138/6275)
Checking out files: 51% (3201/6275)
Checking out files: 52% (3263/6275)
Checking out files: 53% (3326/6275)
Checking out files: 54% (3389/6275)
Checking out files: 55% (3452/6275)
Checking out files: 56% (3514/6275)
Checking out files: 57% (3577/6275)
Checking out files: 58% (3640/6275)
Checking out files: 59% (3703/6275)
Checking out files: 60% (3765/6275)
Checking out files: 61% (3828/6275)
Checking out files: 62% (3891/6275)
Checking out files: 63% (3954/6275)
Checking out files: 64% (4016/6275)
Checking out files: 65% (4079/6275)
Checking out files: 66% (4142/6275)
Checking out files: 67% (4205/6275)
Checking out files: 68% (4267/6275)
Checking out files: 69% (4330/6275)
Checking out files: 70% (4393/6275)
Checking out files: 71% (4456/6275)
Checking out files: 72% (4518/6275)
Checking out files: 73% (4581/6275)
Checking out files: 74% (4644/6275)
Checking out files: 75% (4707/6275)
Checking out files: 76% (4769/6275)
Checking out files: 77% (4832/6275)
Checking out files: 78% (4895/6275)
Checking out files: 79% (4958/6275)
Checking out files: 80% (5020/6275)
Checking out files: 81% (5083/6275)
Checking out files: 82% (5146/6275)
Checking out files: 83% (5209/6275)
Checking out files: 84% (5271/6275)
Checking out files: 85% (5334/6275)
Checking out files: 86% (5397/6275)
Checking out files: 87% (5460/6275)
Checking out files: 88% (5522/6275)
Checking out files: 89% (5585/6275)
Checking out files: 90% (5648/6275)
Checking out files: 91% (5711/6275)
Checking out files: 92% (5773/6275)
Checking out files: 93% (5836/6275)
Checking out files: 94% (5899/6275)
Checking out files: 95% (5962/6275)
Checking out files: 96% (6024/6275)
Checking out files: 97% (6087/6275)
Checking out files: 98% (6150/6275)
Checking out files: 99% (6213/6275)
Checking out files: 100% (6275/6275)
Checking out files: 100% (6275/6275), done.
Your branch is up-to-date with 'origin/test'.
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into '/var/tmp/patchew-tester-tmp-8ft1b4rs/src/docker-src.2018-06-22-09.43.36.24811/qemu.tar.vroot/dtc'...
Submodule path 'dtc': checked out 'e54388015af1fb4bf04d0bca99caba1074d9cc42'
Submodule 'ui/keycodemapdb' (git://git.qemu.org/keycodemapdb.git) registered for path 'ui/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-8ft1b4rs/src/docker-src.2018-06-22-09.43.36.24811/qemu.tar.vroot/ui/keycodemapdb'...
Submodule path 'ui/keycodemapdb': checked out '6b3d716e2b6472eb7189d3220552280ef3d832ce'
COPY RUNNER
RUN test-mingw in qemu:fedora
Packages installed:
SDL2-devel-2.0.8-5.fc28.x86_64
bc-1.07.1-5.fc28.x86_64
bison-3.0.4-9.fc28.x86_64
bluez-libs-devel-5.49-3.fc28.x86_64
brlapi-devel-0.6.7-12.fc28.x86_64
bzip2-1.0.6-26.fc28.x86_64
bzip2-devel-1.0.6-26.fc28.x86_64
ccache-3.4.2-2.fc28.x86_64
clang-6.0.0-5.fc28.x86_64
device-mapper-multipath-devel-0.7.4-2.git07e7bd5.fc28.x86_64
findutils-4.6.0-19.fc28.x86_64
flex-2.6.1-7.fc28.x86_64
gcc-8.1.1-1.fc28.x86_64
gcc-c++-8.1.1-1.fc28.x86_64
gettext-0.19.8.1-14.fc28.x86_64
git-2.17.1-2.fc28.x86_64
glib2-devel-2.56.1-3.fc28.x86_64
glusterfs-api-devel-4.0.2-1.fc28.x86_64
gnutls-devel-3.6.2-1.fc28.x86_64
gtk3-devel-3.22.30-1.fc28.x86_64
hostname-3.20-3.fc28.x86_64
libaio-devel-0.3.110-11.fc28.x86_64
libasan-8.1.1-1.fc28.x86_64
libattr-devel-2.4.47-23.fc28.x86_64
libcap-devel-2.25-9.fc28.x86_64
libcap-ng-devel-0.7.9-1.fc28.x86_64
libcurl-devel-7.59.0-3.fc28.x86_64
libfdt-devel-1.4.6-4.fc28.x86_64
libpng-devel-1.6.34-3.fc28.x86_64
librbd-devel-12.2.5-1.fc28.x86_64
libssh2-devel-1.8.0-7.fc28.x86_64
libubsan-8.1.1-1.fc28.x86_64
libusbx-devel-1.0.21-6.fc28.x86_64
libxml2-devel-2.9.7-4.fc28.x86_64
llvm-6.0.0-11.fc28.x86_64
lzo-devel-2.08-12.fc28.x86_64
make-4.2.1-6.fc28.x86_64
mingw32-SDL2-2.0.5-3.fc27.noarch
mingw32-bzip2-1.0.6-9.fc27.noarch
mingw32-curl-7.57.0-1.fc28.noarch
mingw32-glib2-2.54.1-1.fc28.noarch
mingw32-gmp-6.1.2-2.fc27.noarch
mingw32-gnutls-3.5.13-2.fc27.noarch
mingw32-gtk3-3.22.16-1.fc27.noarch
mingw32-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw32-libpng-1.6.29-2.fc27.noarch
mingw32-libssh2-1.8.0-3.fc27.noarch
mingw32-libtasn1-4.13-1.fc28.noarch
mingw32-nettle-3.3-3.fc27.noarch
mingw32-pixman-0.34.0-3.fc27.noarch
mingw32-pkg-config-0.28-9.fc27.x86_64
mingw64-SDL2-2.0.5-3.fc27.noarch
mingw64-bzip2-1.0.6-9.fc27.noarch
mingw64-curl-7.57.0-1.fc28.noarch
mingw64-glib2-2.54.1-1.fc28.noarch
mingw64-gmp-6.1.2-2.fc27.noarch
mingw64-gnutls-3.5.13-2.fc27.noarch
mingw64-gtk3-3.22.16-1.fc27.noarch
mingw64-libjpeg-turbo-1.5.1-3.fc27.noarch
mingw64-libpng-1.6.29-2.fc27.noarch
mingw64-libssh2-1.8.0-3.fc27.noarch
mingw64-libtasn1-4.13-1.fc28.noarch
mingw64-nettle-3.3-3.fc27.noarch
mingw64-pixman-0.34.0-3.fc27.noarch
mingw64-pkg-config-0.28-9.fc27.x86_64
ncurses-devel-6.1-5.20180224.fc28.x86_64
nettle-devel-3.4-2.fc28.x86_64
nss-devel-3.36.1-1.1.fc28.x86_64
numactl-devel-2.0.11-8.fc28.x86_64
package PyYAML is not installed
package libjpeg-devel is not installed
perl-5.26.2-411.fc28.x86_64
pixman-devel-0.34.0-8.fc28.x86_64
python3-3.6.5-1.fc28.x86_64
snappy-devel-1.1.7-5.fc28.x86_64
sparse-0.5.2-1.fc28.x86_64
spice-server-devel-0.14.0-4.fc28.x86_64
systemtap-sdt-devel-3.2-11.fc28.x86_64
tar-1.30-3.fc28.x86_64
usbredir-devel-0.7.1-7.fc28.x86_64
virglrenderer-devel-0.6.0-4.20170210git76b3da97b.fc28.x86_64
vte3-devel-0.36.5-6.fc28.x86_64
which-2.21-8.fc28.x86_64
xen-devel-4.10.1-3.fc28.x86_64
zlib-devel-1.2.11-8.fc28.x86_64
Environment variables:
TARGET_LIST=
PACKAGES=ccache gettext git tar PyYAML sparse flex bison python3 bzip2 hostname gcc gcc-c++ llvm clang make perl which bc findutils glib2-devel libaio-devel pixman-devel zlib-devel libfdt-devel libasan libubsan bluez-libs-devel brlapi-devel bzip2-devel device-mapper-multipath-devel glusterfs-api-devel gnutls-devel gtk3-devel libattr-devel libcap-devel libcap-ng-devel libcurl-devel libjpeg-devel libpng-devel librbd-devel libssh2-devel libusbx-devel libxml2-devel lzo-devel ncurses-devel nettle-devel nss-devel numactl-devel SDL2-devel snappy-devel spice-server-devel systemtap-sdt-devel usbredir-devel virglrenderer-devel vte3-devel xen-devel mingw32-pixman mingw32-glib2 mingw32-gmp mingw32-SDL2 mingw32-pkg-config mingw32-gtk3 mingw32-gnutls mingw32-nettle mingw32-libtasn1 mingw32-libjpeg-turbo mingw32-libpng mingw32-curl mingw32-libssh2 mingw32-bzip2 mingw64-pixman mingw64-glib2 mingw64-gmp mingw64-SDL2 mingw64-pkg-config mingw64-gtk3 mingw64-gnutls mingw64-nettle mingw64-libtasn1 mingw64-libjpeg-turbo mingw64-libpng mingw64-curl mingw64-libssh2 mingw64-bzip2
J=8
V=
HOSTNAME=1e005065ed42
DEBUG=
SHOW_ENV=1
PWD=/
HOME=/root
CCACHE_DIR=/var/tmp/ccache
DISTTAG=f28container
QEMU_CONFIGURE_OPTS=--python=/usr/bin/python3
FGC=f28
TEST_DIR=/tmp/qemu-test
SHLVL=1
FEATURES=mingw clang pyyaml asan dtc
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAKEFLAGS= -j8
EXTRA_CONFIGURE_OPTS=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/tmp/qemu-test/install --python=/usr/bin/python3 --cross-prefix=x86_64-w64-mingw32- --enable-trace-backends=simple --enable-gnutls --enable-nettle --enable-curl --enable-vnc --enable-bzip2 --enable-guest-agent --with-sdlabi=2.0 --with-gtkabi=3.0
Install prefix /tmp/qemu-test/install
BIOS directory /tmp/qemu-test/install
firmware path /tmp/qemu-test/install/share/qemu-firmware
binary directory /tmp/qemu-test/install
library directory /tmp/qemu-test/install/lib
module directory /tmp/qemu-test/install/lib
libexec directory /tmp/qemu-test/install/libexec
include directory /tmp/qemu-test/install/include
config directory /tmp/qemu-test/install
local state directory queried at runtime
Windows SDK no
Source path /tmp/qemu-test/src
GIT binary git
GIT submodules
C compiler x86_64-w64-mingw32-gcc
Host C compiler cc
C++ compiler x86_64-w64-mingw32-g++
Objective-C compiler clang
ARFLAGS rv
CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -Werror -DHAS_LIBSSH2_SFTP_FSYNC -mms-bitfields -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86_64-w64-mingw32/sys-root/mingw/lib/glib-2.0/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -m64 -mcx16 -mthreads -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN -DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wexpansion-to-defined -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/p11-kit-1 -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -I/usr/x86_64-w64-mingw32/sys-root/mingw/include/libpng16
LDFLAGS -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase -Wl,--warn-common -m64 -g
QEMU_LDFLAGS -L$(BUILD_DIR)/dtc/libfdt
make make
install install
python /usr/bin/python3 -B
smbd /usr/sbin/smbd
module support no
host CPU x86_64
host big endian no
target list x86_64-softmmu aarch64-softmmu
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
SDL support yes (2.0.5)
GTK support yes (3.22.16)
GTK GL support no
VTE support no
TLS priority NORMAL
GNUTLS support yes
GNUTLS rnd yes
libgcrypt no
libgcrypt kdf no
nettle yes (3.3)
nettle kdf yes
libtasn1 yes
curses support no
virgl support no
curl support yes
mingw32 support yes
Audio drivers dsound
Block whitelist (rw)
Block whitelist (ro)
VirtFS support no
Multipath support no
VNC support yes
VNC SASL support no
VNC JPEG support yes
VNC PNG support yes
xen support no
brlapi support no
bluez support no
Documentation no
PIE no
vde support no
netmap support no
Linux AIO support no
ATTR/XATTR support no
Install blobs yes
KVM support no
HAX support yes
HVF support no
WHPX support no
TCG support yes
TCG debug enabled no
TCG interpreter no
malloc trim support no
RDMA support no
fdt support git
membarrier no
preadv support no
fdatasync no
madvise no
posix_madvise no
posix_memalign no
libcap-ng support no
vhost-net support no
vhost-crypto support no
vhost-scsi support no
vhost-vsock support no
vhost-user support no
Trace backends simple
Trace output file trace-<pid>
spice support no
rbd support no
xfsctl support no
smartcard support no
libusb no
usb net redir no
OpenGL support no
OpenGL dmabufs no
libiscsi support no
libnfs support no
build guest agent yes
QGA VSS support no
QGA w32 disk info yes
QGA MSI support no
seccomp support no
coroutine backend win32
coroutine pool yes
debug stack usage no
crypto afalg no
GlusterFS support no
gcov gcov
gcov enabled no
TPM support yes
libssh2 support yes
TPM passthrough no
TPM emulator no
QOM debugging yes
Live block migration yes
lzo support no
snappy support no
bzip2 support yes
NUMA host support no
libxml2 no
tcmalloc support no
jemalloc support no
avx2 optimization yes
replication support yes
VxHS block device no
capstone no
docker no
NOTE: cross-compilers enabled: 'x86_64-w64-mingw32-gcc'
GEN x86_64-softmmu/config-devices.mak.tmp
GEN aarch64-softmmu/config-devices.mak.tmp
GEN config-host.h
GEN qemu-options.def
GEN qapi-gen
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers.h
GEN trace/generated-helpers.c
GEN module_block.h
GEN x86_64-softmmu/config-devices.mak
GEN ui/input-keymap-atset1-to-qcode.c
GEN aarch64-softmmu/config-devices.mak
GEN ui/input-keymap-linux-to-qcode.c
GEN ui/input-keymap-qcode-to-atset3.c
GEN ui/input-keymap-qcode-to-atset1.c
GEN ui/input-keymap-qcode-to-atset2.c
GEN ui/input-keymap-qcode-to-linux.c
GEN ui/input-keymap-qcode-to-qnum.c
GEN ui/input-keymap-qcode-to-sun.c
GEN ui/input-keymap-qnum-to-qcode.c
GEN ui/input-keymap-usb-to-qcode.c
GEN ui/input-keymap-win32-to-qcode.c
GEN ui/input-keymap-x11-to-qcode.c
GEN ui/input-keymap-xorgevdev-to-qcode.c
GEN ui/input-keymap-xorgkbd-to-qcode.c
GEN ui/input-keymap-xorgxquartz-to-qcode.c
GEN ui/input-keymap-xorgxwin-to-qcode.c
GEN ui/input-keymap-osx-to-qcode.c
GEN tests/test-qapi-gen
GEN trace-root.h
GEN accel/kvm/trace.h
GEN accel/tcg/trace.h
GEN audio/trace.h
GEN block/trace.h
GEN chardev/trace.h
GEN crypto/trace.h
GEN hw/9pfs/trace.h
GEN hw/acpi/trace.h
GEN hw/alpha/trace.h
GEN hw/arm/trace.h
GEN hw/audio/trace.h
GEN hw/block/trace.h
GEN hw/block/dataplane/trace.h
GEN hw/char/trace.h
GEN hw/display/trace.h
GEN hw/dma/trace.h
GEN hw/hppa/trace.h
GEN hw/i2c/trace.h
GEN hw/i386/trace.h
GEN hw/i386/xen/trace.h
GEN hw/ide/trace.h
GEN hw/input/trace.h
GEN hw/intc/trace.h
GEN hw/isa/trace.h
GEN hw/mem/trace.h
GEN hw/misc/trace.h
GEN hw/misc/macio/trace.h
GEN hw/net/trace.h
GEN hw/nvram/trace.h
GEN hw/pci/trace.h
GEN hw/pci-host/trace.h
GEN hw/ppc/trace.h
GEN hw/rdma/trace.h
GEN hw/rdma/vmw/trace.h
GEN hw/s390x/trace.h
GEN hw/scsi/trace.h
GEN hw/sd/trace.h
GEN hw/sparc/trace.h
GEN hw/sparc64/trace.h
GEN hw/timer/trace.h
GEN hw/tpm/trace.h
GEN hw/usb/trace.h
GEN hw/vfio/trace.h
GEN hw/virtio/trace.h
GEN hw/xen/trace.h
GEN io/trace.h
GEN linux-user/trace.h
GEN migration/trace.h
GEN nbd/trace.h
GEN net/trace.h
GEN qapi/trace.h
GEN qom/trace.h
GEN scsi/trace.h
GEN target/arm/trace.h
GEN target/i386/trace.h
GEN target/mips/trace.h
GEN target/ppc/trace.h
GEN target/s390x/trace.h
GEN target/sparc/trace.h
GEN ui/trace.h
GEN util/trace.h
GEN trace-root.c
GEN accel/kvm/trace.c
GEN accel/tcg/trace.c
GEN audio/trace.c
GEN block/trace.c
GEN chardev/trace.c
GEN crypto/trace.c
GEN hw/9pfs/trace.c
GEN hw/acpi/trace.c
GEN hw/alpha/trace.c
GEN hw/arm/trace.c
GEN hw/audio/trace.c
GEN hw/block/trace.c
GEN hw/block/dataplane/trace.c
GEN hw/char/trace.c
GEN hw/display/trace.c
GEN hw/dma/trace.c
GEN hw/hppa/trace.c
GEN hw/i2c/trace.c
GEN hw/i386/trace.c
GEN hw/i386/xen/trace.c
GEN hw/ide/trace.c
GEN hw/input/trace.c
GEN hw/intc/trace.c
GEN hw/isa/trace.c
GEN hw/mem/trace.c
GEN hw/misc/trace.c
GEN hw/misc/macio/trace.c
GEN hw/net/trace.c
GEN hw/nvram/trace.c
GEN hw/pci/trace.c
GEN hw/pci-host/trace.c
GEN hw/ppc/trace.c
GEN hw/rdma/trace.c
GEN hw/rdma/vmw/trace.c
GEN hw/s390x/trace.c
GEN hw/scsi/trace.c
GEN hw/sd/trace.c
GEN hw/sparc/trace.c
GEN hw/sparc64/trace.c
GEN hw/timer/trace.c
GEN hw/tpm/trace.c
GEN hw/usb/trace.c
GEN hw/vfio/trace.c
GEN hw/virtio/trace.c
GEN hw/xen/trace.c
GEN io/trace.c
GEN linux-user/trace.c
GEN migration/trace.c
GEN nbd/trace.c
GEN net/trace.c
GEN qapi/trace.c
GEN qom/trace.c
GEN scsi/trace.c
GEN target/arm/trace.c
GEN target/i386/trace.c
GEN target/mips/trace.c
GEN target/ppc/trace.c
GEN target/s390x/trace.c
GEN target/sparc/trace.c
GEN ui/trace.c
GEN util/trace.c
GEN config-all-devices.mak
DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c
DEP /tmp/qemu-test/src/dtc/tests/trees.S
DEP /tmp/qemu-test/src/dtc/tests/testutils.c
DEP /tmp/qemu-test/src/dtc/tests/value-labels.c
DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c
DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c
DEP /tmp/qemu-test/src/dtc/tests/check_path.c
DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c
DEP /tmp/qemu-test/src/dtc/tests/overlay.c
DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c
DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c
DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c
DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c
DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c
DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c
DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c
DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c
DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c
DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c
DEP /tmp/qemu-test/src/dtc/tests/incbin.c
DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c
DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c
DEP /tmp/qemu-test/src/dtc/tests/path-references.c
DEP /tmp/qemu-test/src/dtc/tests/references.c
DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c
DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c
DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c
DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c
DEP /tmp/qemu-test/src/dtc/tests/del_node.c
DEP /tmp/qemu-test/src/dtc/tests/del_property.c
DEP /tmp/qemu-test/src/dtc/tests/setprop.c
DEP /tmp/qemu-test/src/dtc/tests/set_name.c
DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c
DEP /tmp/qemu-test/src/dtc/tests/open_pack.c
DEP /tmp/qemu-test/src/dtc/tests/nopulate.c
DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c
DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c
DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c
DEP /tmp/qemu-test/src/dtc/tests/nop_node.c
DEP /tmp/qemu-test/src/dtc/tests/nop_property.c
DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c
DEP /tmp/qemu-test/src/dtc/tests/stringlist.c
DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c
DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c
DEP /tmp/qemu-test/src/dtc/tests/notfound.c
DEP /tmp/qemu-test/src/dtc/tests/get_alias.c
DEP /tmp/qemu-test/src/dtc/tests/char_literal.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c
DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c
DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c
DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c
DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c
DEP /tmp/qemu-test/src/dtc/tests/get_path.c
DEP /tmp/qemu-test/src/dtc/tests/getprop.c
DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c
DEP /tmp/qemu-test/src/dtc/tests/get_name.c
DEP /tmp/qemu-test/src/dtc/tests/path_offset.c
DEP /tmp/qemu-test/src/dtc/tests/find_property.c
DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c
DEP /tmp/qemu-test/src/dtc/tests/root_node.c
DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c
DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c
DEP /tmp/qemu-test/src/dtc/util.c
DEP /tmp/qemu-test/src/dtc/fdtoverlay.c
DEP /tmp/qemu-test/src/dtc/fdtput.c
DEP /tmp/qemu-test/src/dtc/fdtget.c
LEX convert-dtsv0-lexer.lex.c
DEP /tmp/qemu-test/src/dtc/fdtdump.c
DEP /tmp/qemu-test/src/dtc/srcpos.c
BISON dtc-parser.tab.c
LEX dtc-lexer.lex.c
DEP /tmp/qemu-test/src/dtc/treesource.c
DEP /tmp/qemu-test/src/dtc/livetree.c
DEP /tmp/qemu-test/src/dtc/fstree.c
DEP /tmp/qemu-test/src/dtc/flattree.c
DEP /tmp/qemu-test/src/dtc/dtc.c
DEP /tmp/qemu-test/src/dtc/checks.c
DEP /tmp/qemu-test/src/dtc/data.c
DEP convert-dtsv0-lexer.lex.c
DEP dtc-parser.tab.c
DEP dtc-lexer.lex.c
CHK version_gen.h
UPD version_gen.h
DEP /tmp/qemu-test/src/dtc/util.c
CC libfdt/fdt.o
CC libfdt/fdt_ro.o
CC libfdt/fdt_rw.o
CC libfdt/fdt_wip.o
CC libfdt/fdt_empty_tree.o
CC libfdt/fdt_sw.o
CC libfdt/fdt_addresses.o
CC libfdt/fdt_strerror.o
CC libfdt/fdt_overlay.o
AR libfdt/libfdt.a
x86_64-w64-mingw32-ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
RC version.o
GEN qga/qapi-generated/qapi-gen
CC qapi/qapi-builtin-types.o
CC qapi/qapi-types.o
CC qapi/qapi-types-block-core.o
CC qapi/qapi-types-block.o
CC qapi/qapi-types-crypto.o
CC qapi/qapi-types-char.o
CC qapi/qapi-types-common.o
CC qapi/qapi-types-introspect.o
CC qapi/qapi-types-job.o
CC qapi/qapi-types-migration.o
CC qapi/qapi-types-misc.o
CC qapi/qapi-types-net.o
CC qapi/qapi-types-rocker.o
CC qapi/qapi-types-run-state.o
CC qapi/qapi-types-sockets.o
CC qapi/qapi-types-tpm.o
CC qapi/qapi-types-trace.o
CC qapi/qapi-types-transaction.o
CC qapi/qapi-types-ui.o
CC qapi/qapi-builtin-visit.o
CC qapi/qapi-visit.o
CC qapi/qapi-visit-block-core.o
CC qapi/qapi-visit-block.o
CC qapi/qapi-visit-common.o
CC qapi/qapi-visit-char.o
CC qapi/qapi-visit-crypto.o
CC qapi/qapi-visit-introspect.o
CC qapi/qapi-visit-job.o
CC qapi/qapi-visit-migration.o
CC qapi/qapi-visit-misc.o
CC qapi/qapi-visit-net.o
CC qapi/qapi-visit-rocker.o
CC qapi/qapi-visit-run-state.o
CC qapi/qapi-visit-sockets.o
CC qapi/qapi-visit-tpm.o
CC qapi/qapi-visit-trace.o
CC qapi/qapi-visit-transaction.o
CC qapi/qapi-visit-ui.o
CC qapi/qapi-events.o
CC qapi/qapi-events-block-core.o
CC qapi/qapi-events-block.o
CC qapi/qapi-events-char.o
CC qapi/qapi-events-common.o
CC qapi/qapi-events-crypto.o
CC qapi/qapi-events-introspect.o
CC qapi/qapi-events-job.o
CC qapi/qapi-events-migration.o
CC qapi/qapi-events-misc.o
CC qapi/qapi-events-net.o
CC qapi/qapi-events-rocker.o
CC qapi/qapi-events-run-state.o
CC qapi/qapi-events-sockets.o
CC qapi/qapi-events-tpm.o
CC qapi/qapi-events-trace.o
CC qapi/qapi-events-transaction.o
CC qapi/qapi-introspect.o
CC qapi/qapi-events-ui.o
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnull.o
CC qobject/qnum.o
CC qobject/qstring.o
CC qobject/qdict.o
CC qobject/qlist.o
CC qobject/qbool.o
CC qobject/qlit.o
CC qobject/qjson.o
CC qobject/qobject.o
CC qobject/json-lexer.o
CC qobject/json-streamer.o
CC qobject/json-parser.o
CC qobject/block-qdict.o
CC trace/simple.o
CC trace/control.o
CC trace/qmp.o
CC util/osdep.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/lockcnt.o
CC util/aiocb.o
CC util/aio-wait.o
CC util/async.o
CC util/thread-pool.o
CC util/qemu-timer.o
CC util/main-loop.o
CC util/iohandler.o
CC util/aio-win32.o
CC util/event_notifier-win32.o
CC util/oslib-win32.o
CC util/qemu-thread-win32.o
CC util/envlist.o
CC util/path.o
CC util/module.o
CC util/host-utils.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/fifo8.o
CC util/acl.o
CC util/cacheinfo.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/notify.o
CC util/qemu-option.o
CC util/qemu-progress.o
CC util/keyval.o
CC util/hexdump.o
CC util/crc32c.o
CC util/uuid.o
CC util/getauxval.o
CC util/throttle.o
CC util/readline.o
CC util/rcu.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-io.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-win32.o
CC util/timed-average.o
CC util/buffer.o
CC util/base64.o
CC util/log.o
CC util/pagesize.o
CC util/qdist.o
CC util/qht.o
CC util/range.o
CC util/stats64.o
CC util/systemd.o
CC util/iova-tree.o
CC trace-root.o
CC accel/kvm/trace.o
CC accel/tcg/trace.o
CC audio/trace.o
CC block/trace.o
CC chardev/trace.o
CC crypto/trace.o
CC hw/9pfs/trace.o
CC hw/acpi/trace.o
CC hw/alpha/trace.o
CC hw/arm/trace.o
CC hw/audio/trace.o
CC hw/block/dataplane/trace.o
CC hw/block/trace.o
CC hw/char/trace.o
CC hw/display/trace.o
CC hw/dma/trace.o
CC hw/hppa/trace.o
CC hw/i2c/trace.o
CC hw/i386/trace.o
CC hw/i386/xen/trace.o
CC hw/ide/trace.o
CC hw/input/trace.o
CC hw/intc/trace.o
CC hw/isa/trace.o
CC hw/mem/trace.o
CC hw/misc/trace.o
CC hw/misc/macio/trace.o
CC hw/net/trace.o
CC hw/nvram/trace.o
CC hw/pci/trace.o
CC hw/pci-host/trace.o
CC hw/ppc/trace.o
CC hw/rdma/trace.o
CC hw/rdma/vmw/trace.o
CC hw/s390x/trace.o
CC hw/scsi/trace.o
CC hw/sd/trace.o
CC hw/sparc/trace.o
CC hw/sparc64/trace.o
CC hw/timer/trace.o
CC hw/tpm/trace.o
CC hw/usb/trace.o
CC hw/vfio/trace.o
CC hw/virtio/trace.o
CC hw/xen/trace.o
CC io/trace.o
CC linux-user/trace.o
CC migration/trace.o
CC nbd/trace.o
CC net/trace.o
CC qapi/trace.o
CC qom/trace.o
CC scsi/trace.o
CC target/i386/trace.o
CC target/arm/trace.o
CC target/mips/trace.o
CC target/ppc/trace.o
CC target/s390x/trace.o
CC ui/trace.o
CC target/sparc/trace.o
CC util/trace.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blk-commit-all.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/clock-warp.o
CC stubs/cpu-get-clock.o
CC stubs/cpu-get-icount.o
CC stubs/error-printf.o
CC stubs/dump.o
CC stubs/fdset.o
CC stubs/gdbstub.o
CC stubs/get-vm-name.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/is-daemonized.o
CC stubs/machine-init-done.o
CC stubs/migr-blocker.o
CC stubs/change-state-handler.o
CC stubs/monitor.o
CC stubs/notify-event.o
CC stubs/qtest.o
CC stubs/replay.o
CC stubs/runstate-check.o
CC stubs/set-fd-handler.o
CC stubs/sysbus.o
CC stubs/slirp.o
CC stubs/tpm.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vm-stop.o
CC stubs/vmstate.o
CC stubs/fd-register.o
CC stubs/qmp_memory_device.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/vmgenid.o
CC stubs/xen-common.o
CC stubs/xen-hvm.o
CC stubs/pci-host-piix.o
CC stubs/ram-block.o
GEN qemu-img-cmds.h
CC block.o
CC blockjob.o
CC job.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/dmg.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/qcow2-cluster.o
CC block/qcow2-snapshot.o
CC block/qcow2-cache.o
CC block/qcow2-bitmap.o
CC block/qed.o
CC block/qed-l2-cache.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-win32.o
CC block/win32-aio.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/create.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/accounting.o
CC block/sheepdog.o
CC block/dirty-bitmap.o
CC block/write-threshold.o
CC block/backup.o
CC block/replication.o
CC block/throttle.o
CC block/copy-on-read.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC scsi/utils.o
CC block/curl.o
CC block/ssh.o
CC block/dmg-bz2.o
CC crypto/init.o
CC crypto/hash.o
CC crypto/hash-nettle.o
CC crypto/hmac.o
CC crypto/hmac-nettle.o
CC crypto/aes.o
CC crypto/desrfb.o
CC crypto/cipher.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/random-gnutls.o
CC crypto/pbkdf.o
CC crypto/pbkdf-nettle.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/ivgen-plain64.o
CC crypto/afsplit.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/dns-resolver.o
CC io/net-listener.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
CC qemu-io.o
CC blockdev.o
CC blockdev-nbd.o
CC bootdevice.o
CC iothread.o
CC job-qmp.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-win32.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC device_tree.o
CC qapi/qapi-commands.o
CC qapi/qapi-commands-block-core.o
CC qapi/qapi-commands-block.o
CC qapi/qapi-commands-char.o
CC qapi/qapi-commands-common.o
CC qapi/qapi-commands-crypto.o
CC qapi/qapi-commands-introspect.o
CC qapi/qapi-commands-job.o
CC qapi/qapi-commands-migration.o
CC qapi/qapi-commands-misc.o
CC qapi/qapi-commands-net.o
CC qapi/qapi-commands-rocker.o
CC qapi/qapi-commands-run-state.o
CC qapi/qapi-commands-sockets.o
CC qapi/qapi-commands-tpm.o
CC qapi/qapi-commands-trace.o
CC qapi/qapi-commands-transaction.o
CC qapi/qapi-commands-ui.o
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/dsoundaudio.o
CC audio/audio_win_int.o
CC audio/wavcapture.o
CC backends/rng.o
CC backends/rng-egd.o
CC backends/tpm.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC backends/cryptodev-vhost.o
CC block/stream.o
CC chardev/msmouse.o
CC chardev/wctablet.o
CC chardev/testdev.o
CC disas/arm.o
CXX disas/arm-a64.o
CC disas/i386.o
CXX disas/libvixl/vixl/utils.o
/tmp/qemu-test/src/nbd/server.c: In function 'nbd_trip':
/tmp/qemu-test/src/nbd/server.c:1980:19: error: 'end' may be used uninitialized in this function [-Werror=maybe-uninitialized]
*length = end - offset;
~~~~^~~~~~~~
/tmp/qemu-test/src/nbd/server.c:1940:30: note: 'end' was declared here
uint64_t begin = offset, end;
^~~
cc1: all warnings being treated as errors
make: *** [/tmp/qemu-test/src/rules.mak:69: nbd/server.o] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
File "./tests/docker/docker.py", line 526, in <module>
sys.exit(main())
File "./tests/docker/docker.py", line 523, in main
return args.cmdobj.run(args, argv)
File "./tests/docker/docker.py", line 279, in run
return Docker().run(argv, args.keep, quiet=args.quiet)
File "./tests/docker/docker.py", line 247, in run
quiet=quiet)
File "./tests/docker/docker.py", line 154, in _do_check
return subprocess.check_call(self._command + cmd, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 186, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['docker', 'run', '--label', 'com.qemu.instance.uuid=4a7633a2762211e8aa8552540069c830', '-u', '0', '--security-opt', 'seccomp=unconfined', '--rm', '--net=none', '-e', 'TARGET_LIST=', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=8', '-e', 'DEBUG=', '-e', 'SHOW_ENV=1', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/root/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-8ft1b4rs/src/docker-src.2018-06-22-09.43.36.24811:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-mingw']' returned non-zero exit status 2
make[1]: *** [tests/docker/Makefile.include:164: docker-run] Error 1
make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-8ft1b4rs/src'
make: *** [tests/docker/Makefile.include:198: docker-run-test-mingw@fedora] Error 2
real 2m1.005s
user 0m4.841s
sys 0m3.977s
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
` (25 preceding siblings ...)
2018-06-22 13:45 ` [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 no-reply
@ 2018-06-22 15:03 ` Peter Maydell
2018-06-22 15:16 ` [Qemu-devel] [Qemu-ppc] " Mark Cave-Ayland
26 siblings, 1 reply; 32+ messages in thread
From: Peter Maydell @ 2018-06-22 15:03 UTC (permalink / raw)
To: David Gibson
Cc: Alexander Graf, Alexey Kardashevskiy, Greg Kurz,
Cédric Le Goater, Laurent Vivier, QEMU Developers, qemu-ppc
On 22 June 2018 at 11:35, David Gibson <david@gibson.dropbear.id.au> wrote:
> The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
>
> Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
>
> are available in the Git repository at:
>
> git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
>
> for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
>
> spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
>
> ----------------------------------------------------------------
> ppc patch queue 2018-06-22
>
> Another assorted patch of patches for ppc and spapr.
> * Rework of guest pagesize handling for ppc, which avoids guest
> visibly different behaviour between accelerators
> * A number of Pnv cleanups, working towards more complete POWER9
> support
> * Migration of VPA data, a significant bugfix
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-22 15:03 ` Peter Maydell
@ 2018-06-22 15:16 ` Mark Cave-Ayland
2018-06-23 0:41 ` David Gibson
0 siblings, 1 reply; 32+ messages in thread
From: Mark Cave-Ayland @ 2018-06-22 15:16 UTC (permalink / raw)
To: Peter Maydell, David Gibson
Cc: Laurent Vivier, QEMU Developers, Greg Kurz, qemu-ppc,
Cédric Le Goater
On 22/06/18 16:03, Peter Maydell wrote:
> On 22 June 2018 at 11:35, David Gibson <david@gibson.dropbear.id.au> wrote:
>> The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
>>
>> Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
>>
>> are available in the Git repository at:
>>
>> git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
>>
>> for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
>>
>> spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
>>
>> ----------------------------------------------------------------
>> ppc patch queue 2018-06-22
>>
>> Another assorted patch of patches for ppc and spapr.
>> * Rework of guest pagesize handling for ppc, which avoids guest
>> visibly different behaviour between accelerators
>> * A number of Pnv cleanups, working towards more complete POWER9
>> support
>> * Migration of VPA data, a significant bugfix
>
> Applied, thanks.
>
> -- PMM
Looks like this is missing the 2 Mac commits I submitted that David
added to the PR this morning?
https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06540.html
https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06536.html
David, did you forget to re-push the updated tag?
ATB,
Mark.
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-22 15:16 ` [Qemu-devel] [Qemu-ppc] " Mark Cave-Ayland
@ 2018-06-23 0:41 ` David Gibson
2018-06-23 6:43 ` Mark Cave-Ayland
0 siblings, 1 reply; 32+ messages in thread
From: David Gibson @ 2018-06-23 0:41 UTC (permalink / raw)
To: Mark Cave-Ayland
Cc: Peter Maydell, Laurent Vivier, QEMU Developers, Greg Kurz,
qemu-ppc, Cédric Le Goater
[-- Attachment #1: Type: text/plain, Size: 1882 bytes --]
On Fri, Jun 22, 2018 at 04:16:10PM +0100, Mark Cave-Ayland wrote:
11;rgb:ffff/ffff/ffff> On 22/06/18 16:03, Peter Maydell wrote:
>
> > On 22 June 2018 at 11:35, David Gibson <david@gibson.dropbear.id.au> wrote:
> > > The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
> > >
> > > Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
> > >
> > > are available in the Git repository at:
> > >
> > > git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
> > >
> > > for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
> > >
> > > spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
> > >
> > > ----------------------------------------------------------------
> > > ppc patch queue 2018-06-22
> > >
> > > Another assorted patch of patches for ppc and spapr.
> > > * Rework of guest pagesize handling for ppc, which avoids guest
> > > visibly different behaviour between accelerators
> > > * A number of Pnv cleanups, working towards more complete POWER9
> > > support
> > > * Migration of VPA data, a significant bugfix
> >
> > Applied, thanks.
> >
> > -- PMM
>
> Looks like this is missing the 2 Mac commits I submitted that David added to
> the PR this morning?
>
> https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06540.html
> https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06536.html
>
> David, did you forget to re-push the updated tag?
They just missed the window, sorry. I merged them after I'd already
tagged and tested the pull request.
--
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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-23 0:41 ` David Gibson
@ 2018-06-23 6:43 ` Mark Cave-Ayland
2018-06-23 8:58 ` David Gibson
0 siblings, 1 reply; 32+ messages in thread
From: Mark Cave-Ayland @ 2018-06-23 6:43 UTC (permalink / raw)
To: David Gibson
Cc: Laurent Vivier, Peter Maydell, QEMU Developers, Greg Kurz,
qemu-ppc, Cédric Le Goater
On 23/06/18 01:41, David Gibson wrote:
> On Fri, Jun 22, 2018 at 04:16:10PM +0100, Mark Cave-Ayland wrote:
> 11;rgb:ffff/ffff/ffff> On 22/06/18 16:03, Peter Maydell wrote:
>>
>>> On 22 June 2018 at 11:35, David Gibson <david@gibson.dropbear.id.au> wrote:
>>>> The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
>>>>
>>>> Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
>>>>
>>>> are available in the Git repository at:
>>>>
>>>> git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
>>>>
>>>> for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
>>>>
>>>> spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
>>>>
>>>> ----------------------------------------------------------------
>>>> ppc patch queue 2018-06-22
>>>>
>>>> Another assorted patch of patches for ppc and spapr.
>>>> * Rework of guest pagesize handling for ppc, which avoids guest
>>>> visibly different behaviour between accelerators
>>>> * A number of Pnv cleanups, working towards more complete POWER9
>>>> support
>>>> * Migration of VPA data, a significant bugfix
>>>
>>> Applied, thanks.
>>>
>>> -- PMM
>>
>> Looks like this is missing the 2 Mac commits I submitted that David added to
>> the PR this morning?
>>
>> https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06540.html
>> https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06536.html
>>
>> David, did you forget to re-push the updated tag?
>
> They just missed the window, sorry. I merged them after I'd already
> tagged and tested the pull request.
Okay, as long as you didn't forget them :)
My confusion came from the fact that the emails you sent for the PR
yesterday contained my patches as patches 24 and 25, although they
aren't included in the cover letter or the github tag.
ATB,
Mark.
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [Qemu-devel] [Qemu-ppc] [PULL 00/25] ppc-for-3.0 queue 2018-06-22
2018-06-23 6:43 ` Mark Cave-Ayland
@ 2018-06-23 8:58 ` David Gibson
0 siblings, 0 replies; 32+ messages in thread
From: David Gibson @ 2018-06-23 8:58 UTC (permalink / raw)
To: Mark Cave-Ayland
Cc: Laurent Vivier, Peter Maydell, QEMU Developers, Greg Kurz,
qemu-ppc, Cédric Le Goater
[-- Attachment #1: Type: text/plain, Size: 2748 bytes --]
On Sat, Jun 23, 2018 at 07:43:04AM +0100, Mark Cave-Ayland wrote:
> On 23/06/18 01:41, David Gibson wrote:
>
> > On Fri, Jun 22, 2018 at 04:16:10PM +0100, Mark Cave-Ayland wrote:
> > 11;rgb:ffff/ffff/ffff> On 22/06/18 16:03, Peter Maydell wrote:
> > >
> > > > On 22 June 2018 at 11:35, David Gibson <david@gibson.dropbear.id.au> wrote:
> > > > > The following changes since commit 46012db666990ff2eed1d3dc199ab8006439a93b:
> > > > >
> > > > > Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20180619' into staging (2018-06-20 09:51:30 +0100)
> > > > >
> > > > > are available in the Git repository at:
> > > > >
> > > > > git://github.com/dgibson/qemu.git tags/ppc-for-3.0-20180622
> > > > >
> > > > > for you to fetch changes up to e5ca28ecab5c69b7578e22391a66c97c3979ffd8:
> > > > >
> > > > > spapr: Don't rewrite mmu capabilities in KVM mode (2018-06-22 14:19:07 +1000)
> > > > >
> > > > > ----------------------------------------------------------------
> > > > > ppc patch queue 2018-06-22
> > > > >
> > > > > Another assorted patch of patches for ppc and spapr.
> > > > > * Rework of guest pagesize handling for ppc, which avoids guest
> > > > > visibly different behaviour between accelerators
> > > > > * A number of Pnv cleanups, working towards more complete POWER9
> > > > > support
> > > > > * Migration of VPA data, a significant bugfix
> > > >
> > > > Applied, thanks.
> > > >
> > > > -- PMM
> > >
> > > Looks like this is missing the 2 Mac commits I submitted that David added to
> > > the PR this morning?
> > >
> > > https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06540.html
> > > https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg06536.html
> > >
> > > David, did you forget to re-push the updated tag?
> >
> > They just missed the window, sorry. I merged them after I'd already
> > tagged and tested the pull request.
>
> Okay, as long as you didn't forget them :)
>
> My confusion came from the fact that the emails you sent for the PR
> yesterday contained my patches as patches 24 and 25, although they aren't
> included in the cover letter or the github tag.
Ah, right. So I realized that bogus set of mails was the result of
pointing git send-email at a git range instead of the batch of mails
already prepared for the pull request. Which meant for one they
weren't properly formatted for a PR, and also it included the couple
of patches of yours I'd applied after tagging the PR.
--
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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2018-06-23 9:39 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-22 10:35 [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 01/25] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 02/25] ppc/pnv: introduce a new isa_create() " David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 03/25] spapr_cpu_core: migrate per-CPU data David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 04/25] spapr_cpu_core: migrate VPA related state David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 05/25] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 06/25] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 07/25] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 08/25] spapr: Compute effective capability values earlier David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 09/25] spapr: Add cpu_apply hook to capabilities David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 10/25] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 11/25] spapr: split the IRQ allocation sequence David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 12/25] spapr: remove unused spapr_irq routines David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 13/25] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 14/25] sm501: Fix hardware cursor color conversion David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 15/25] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 16/25] ppc4xx_i2c: Implement directcntl register David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 17/25] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 18/25] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 19/25] spapr: Maximum (HPT) pagesize property David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 20/25] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 21/25] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 22/25] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 23/25] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 24/25] mac_dbdma: only dump commands for debug enabled channels David Gibson
2018-06-22 10:35 ` [Qemu-devel] [PULL 25/25] mac_newworld: always enable disable_direct_reg3_writes for ADB machines David Gibson
2018-06-22 13:45 ` [Qemu-devel] [PULL 00/25] ppc-for-3.0 queue 2018-06-22 no-reply
2018-06-22 15:03 ` Peter Maydell
2018-06-22 15:16 ` [Qemu-devel] [Qemu-ppc] " Mark Cave-Ayland
2018-06-23 0:41 ` David Gibson
2018-06-23 6:43 ` Mark Cave-Ayland
2018-06-23 8:58 ` David Gibson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).