On 04/12/2014 02:29 AM, Alexander Graf wrote: > > On 13.03.14 07:29, 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 <[email protected]> >> --- >> hw/ppc/spapr.c | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c >> index bf46c38..6366230 100644 >> --- a/hw/ppc/spapr.c >> +++ b/hw/ppc/spapr.c >> @@ -308,6 +308,8 @@ 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; >> fdt = g_malloc0(FDT_MAX_SIZE); >> _FDT((fdt_create(fdt, FDT_MAX_SIZE))); >> @@ -465,6 +467,13 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base, >> page_sizes_prop, page_sizes_prop_size))); >> } >> + if (sockets) { >> + int cpus_per_socket = smp_cpus / sockets; >> + uint32_t chip_id = cs->cpu_index / cpus_per_socket; >> + >> + _FDT((fdt_property_cell(fdt, "ibm,chip-id", chip_id))); >> + } > > Have you verified this works correctly with threads?
Sorry, do not follow you. -smp X,sockets=Y,threads=Z - what combination of XYZ is suspicious? > Also, I don't see why > we should omit the chip-id when we don't define sockets. Why should we pollute device tree... -- Alexey
