[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v3 6/9] spapr: Rework spapr_fixup_cpu_dt()
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-ppc] [PATCH v3 6/9] spapr: Rework spapr_fixup_cpu_dt() |
Date: |
Fri, 23 May 2014 12:26:55 +1000 |
In PPC code we usually use the "cs" name for a CPUState* variables
and "cpu" for PowerPCCPU. So let's change spapr_fixup_cpu_dt() to
use same rules as spapr_create_fdt_skel() does.
This adds missing nodes creation if they do not already exist in
the current device tree, this is going to be used from
the client-architecture-support handler.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
hw/ppc/spapr.c | 33 ++++++++++++++++++++++-----------
1 file changed, 22 insertions(+), 11 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 400d0c7..7082237 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -239,32 +239,43 @@ static int spapr_fixup_cpu_smt_dt(void *fdt, int offset,
PowerPCCPU *cpu,
static int spapr_fixup_cpu_dt(void *fdt, sPAPREnvironment *spapr)
{
- int ret = 0, offset;
- CPUState *cpu;
+ int ret = 0, offset, cpus_offset;
+ CPUState *cs;
char cpu_model[32];
int smt = kvmppc_smt_threads();
uint32_t pft_size_prop[] = {0, cpu_to_be32(spapr->htab_shift)};
- CPU_FOREACH(cpu) {
- DeviceClass *dc = DEVICE_GET_CLASS(cpu);
- int index = ppc_get_vcpu_dt_id(POWERPC_CPU(cpu));
+ CPU_FOREACH(cs) {
+ PowerPCCPU *cpu = POWERPC_CPU(cs);
+ DeviceClass *dc = DEVICE_GET_CLASS(cs);
+ int index = ppc_get_vcpu_dt_id(cpu);
uint32_t associativity[] = {cpu_to_be32(0x5),
cpu_to_be32(0x0),
cpu_to_be32(0x0),
cpu_to_be32(0x0),
- cpu_to_be32(cpu->numa_node),
+ cpu_to_be32(cs->numa_node),
cpu_to_be32(index)};
if ((index % smt) != 0) {
continue;
}
- snprintf(cpu_model, 32, "/cpus/address@hidden", dc->fw_name,
- index);
+ snprintf(cpu_model, 32, "address@hidden", dc->fw_name, index);
- offset = fdt_path_offset(fdt, cpu_model);
+ cpus_offset = fdt_path_offset(fdt, "/cpus");
+ if (cpus_offset < 0) {
+ cpus_offset = fdt_add_subnode(fdt, fdt_path_offset(fdt, "/"),
+ "cpus");
+ if (cpus_offset < 0) {
+ return cpus_offset;
+ }
+ }
+ offset = fdt_subnode_offset(fdt, cpus_offset, cpu_model);
if (offset < 0) {
- return offset;
+ offset = fdt_add_subnode(fdt, cpus_offset, cpu_model);
+ if (offset < 0) {
+ return offset;
+ }
}
if (nb_numa_nodes > 1) {
@@ -281,7 +292,7 @@ static int spapr_fixup_cpu_dt(void *fdt, sPAPREnvironment
*spapr)
return ret;
}
- ret = spapr_fixup_cpu_smt_dt(fdt, offset, POWERPC_CPU(cpu),
+ ret = spapr_fixup_cpu_smt_dt(fdt, offset, cpu,
smp_threads);
if (ret < 0) {
return ret;
--
1.9.rc0
- [Qemu-ppc] [PATCH v3 0/9] spapr: Enable ibm, client-architecture-support, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 4/9] target-ppc: Define Processor Compatibility Masks, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 5/9] spapr: Add ibm, client-architecture-support call, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 6/9] spapr: Rework spapr_fixup_cpu_dt(),
Alexey Kardashevskiy <=
- [Qemu-ppc] [PATCH v3 2/9] spapr: Move SMT-related properties out of skeleton fdt, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 8/9] spapr: Implement processor compatibility in ibm, client-architecture-support, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 1/9] target-ppc: Add "compat" CPU option, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 7/9] spapr: Limit threads per core according to current compatibility mode, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 3/9] target-ppc: Implement "compat" CPU option, Alexey Kardashevskiy, 2014/05/22
- [Qemu-ppc] [PATCH v3 9/9] KVM: PPC: Enable compatibility mode, Alexey Kardashevskiy, 2014/05/22
- Re: [Qemu-ppc] [PATCH v3 0/9] spapr: Enable ibm, client-architecture-support, Alexander Graf, 2014/05/23