diff mbox

[v2] spapr: Add ibm, chip-id property in device tree

Message ID 1400152994-20365-1-git-send-email-aik@ozlabs.ru
State New
Headers show

Commit Message

Alexey Kardashevskiy May 15, 2014, 11:23 a.m. UTC
This adds a "ibm,chip-id" property for CPU nodes which should be the same
for all cores in the same CPU socket. The recent guest kernels use this
information to associate threads with sockets.

Refer to the kernel commit 256f2d4b463d3030ebc8d2b54f427543814a2bdc
for more details.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---

Changes:
v2:
* always put ibm,chip to the device tree
* removed from migration as it is the user's responsibility
to run QEMU on both sides with the same CPU configuration


---
 hw/ppc/spapr.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Alexander Graf May 16, 2014, 2:23 p.m. UTC | #1
On 15.05.14 13:23, Alexey Kardashevskiy wrote:
> This adds a "ibm,chip-id" property for CPU nodes which should be the same
> for all cores in the same CPU socket. The recent guest kernels use this
> information to associate threads with sockets.
>
> Refer to the kernel commit 256f2d4b463d3030ebc8d2b54f427543814a2bdc
> for more details.
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>

Thanks, applied to ppc-next.


Alex
diff mbox

Patch

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index b898a39..166c1c6 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -313,6 +313,9 @@  static void *spapr_create_fdt_skel(hwaddr initrd_base,
     uint32_t interrupt_server_ranges_prop[] = {0, cpu_to_be32(smp_cpus)};
     int i, smt = kvmppc_smt_threads();
     unsigned char vec5[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x80};
+    QemuOpts *opts = qemu_opts_find(qemu_find_opts("smp-opts"), NULL);
+    unsigned sockets = opts ? qemu_opt_get_number(opts, "sockets", 0) : 0;
+    uint32_t cpus_per_socket = sockets ? (smp_cpus / sockets) : 1;
 
     fdt = g_malloc0(FDT_MAX_SIZE);
     _FDT((fdt_create(fdt, FDT_MAX_SIZE)));
@@ -470,6 +473,9 @@  static void *spapr_create_fdt_skel(hwaddr initrd_base,
                                page_sizes_prop, page_sizes_prop_size)));
         }
 
+        _FDT((fdt_property_cell(fdt, "ibm,chip-id",
+                                cs->cpu_index / cpus_per_socket)));
+
         _FDT((fdt_end_node(fdt)));
     }