From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47200) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WNz9R-0000nS-6u for qemu-devel@nongnu.org; Thu, 13 Mar 2014 02:30:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WNz9D-0001Fm-3g for qemu-devel@nongnu.org; Thu, 13 Mar 2014 02:29:57 -0400 Received: from e23smtp08.au.ibm.com ([202.81.31.141]:58477) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WNz9C-0001FX-9Y for qemu-devel@nongnu.org; Thu, 13 Mar 2014 02:29:43 -0400 Received: from /spool/local by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 13 Mar 2014 16:29:35 +1000 From: Alexey Kardashevskiy Date: Thu, 13 Mar 2014 17:29:26 +1100 Message-Id: <1394692166-19408-1-git-send-email-aik@ozlabs.ru> Subject: [Qemu-devel] [PATCH] spapr: add ibm, chip-id property in device tree List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexey Kardashevskiy , qemu-ppc@nongnu.org, Alexander Graf , =?UTF-8?q?Andreas=20F=C3=A4rber?= 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 --- 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))); + } + _FDT((fdt_end_node(fdt))); } -- 1.8.4.rc4