qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	qemu-devel@nongnu.org, Alexander Graf <agraf@suse.de>,
	qemu-ppc@nongnu.org, Paul Mackerras <paulus@samba.org>
Subject: [Qemu-devel] [PATCH v2 18/19] target-ppc: Enhance the CPU node labels for the guest device tree for pseries.
Date: Mon, 8 Jul 2013 21:15:15 +0530	[thread overview]
Message-ID: <20130708211515.4059b2ee@zephyr> (raw)
In-Reply-To: <20130708010917.GD2696@voom.redhat.com>

Hi David,
Thanks for the review feedback. I have incorporated your changes in v2 of
the patch, which follows herewith.

Regards,
Prerna

Subject: [PATCH v2] Target-ppc : Enhance the CPU node labels for the guest
 device tree for pseries.

In absence of a -CPU parameter in the qemu command line, the nodes of
KVM-enabled guest device tree look like this :

/proc/device-tree/cpus/HOST@0/...
/proc/device-tree/cpus/HOST@4/...

This patch replaces this obscure 'HOST' label with a more descriptive label.
This is gathered by first identifying the PVR of the host, and then determining
the host CPU alias which corresponds to the model indicated by this PVR.

Sample Final outcome for an KVM-enabled pseries guest running on POWER7:
/proc/device-tree/cpus/PowerPC,POWER7@0/...
/proc/device-tree/cpus/PowerPC,POWER7@4/...

This also helps userspace tools like ppc64_cpu, which expect the device tree
to be in this format.

Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c              | 18 +++++++++++++++---
 target-ppc/cpu-qom.h        |  1 +
 target-ppc/translate_init.c | 28 ++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index fe34291..ddf263a 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -79,6 +79,7 @@
 
 #define HTAB_SIZE(spapr)        (1ULL << ((spapr)->htab_shift))
 
+#define PPC_DEVTREE_STR         "PowerPC,"
 sPAPREnvironment *spapr;
 
 int spapr_allocate_irq(int hint, bool lsi)
@@ -295,9 +296,12 @@ static void *spapr_create_fdt_skel(const char *cpu_model,
     _FDT((fdt_property_cell(fdt, "#address-cells", 0x1)));
     _FDT((fdt_property_cell(fdt, "#size-cells", 0x0)));
 
-    modelname = g_strdup(cpu_model);
+    /* device tree nodes must look like this :
+     * PowerPC,CPU_ALIAS@0
+     */
+    modelname = g_strdup_printf(PPC_DEVTREE_STR "%s", cpu_model);
 
-    for (i = 0; i < strlen(modelname); i++) {
+    for (i = strlen(PPC_DEVTREE_STR); i < strlen(modelname); i++) {
         modelname[i] = toupper(modelname[i]);
     }
 
@@ -735,7 +739,7 @@ static void ppc_spapr_init(QEMUMachineInitArgs *args)
     MemoryRegion *sysmem = get_system_memory();
     MemoryRegion *ram = g_new(MemoryRegion, 1);
     hwaddr rma_alloc_size;
-    uint32_t initrd_base = 0;
+    uint32_t initrd_base = 0, pvr = 0;
     long kernel_size = 0, initrd_size = 0;
     long load_limit, rtas_limit, fw_size;
     char *filename;
@@ -959,6 +963,14 @@ static void ppc_spapr_init(QEMUMachineInitArgs *args)
 
     spapr->entry_point = 0x100;
 
+#ifdef CONFIG_KVM
+    /* Ensure that cpu_model is correctly reflected for a KVM guest */
+    if (kvm_enabled() && !strcmp(cpu_model, "host")) {
+        asm ("mfpvr %0"
+            : "=r"(pvr));
+        cpu_model = ppc_cpu_alias_by_pvr(pvr);
+    }
+#endif
     /* Prepare the device tree */
     spapr->fdt_skel = spapr_create_fdt_skel(cpu_model,
                                             initrd_base, initrd_size,
diff --git a/target-ppc/cpu-qom.h b/target-ppc/cpu-qom.h
index 84ba105..90dd1dd 100644
--- a/target-ppc/cpu-qom.h
+++ b/target-ppc/cpu-qom.h
@@ -99,6 +99,7 @@ static inline PowerPCCPU *ppc_env_get_cpu(CPUPPCState *env)
 #define ENV_OFFSET offsetof(PowerPCCPU, env)
 
 PowerPCCPUClass *ppc_cpu_class_by_pvr(uint32_t pvr);
+const char *ppc_cpu_alias_by_pvr(uint32_t pvr);
 
 void ppc_cpu_do_interrupt(CPUState *cpu);
 void ppc_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 50e0ee5..21a7f6f 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -7913,6 +7913,34 @@ PowerPCCPUClass *ppc_cpu_class_by_pvr(uint32_t pvr)
     return pcc;
 }
 
+const char *ppc_cpu_alias_by_pvr(uint32_t pvr)
+{
+    int i;
+    const char *cpu_alias;
+    char *offset, *model;
+
+    cpu_alias  = object_class_get_name(OBJECT_CLASS
+                            (ppc_cpu_class_by_pvr(pvr)));
+
+    /* Replace the full class name in cpu_alias with the CPU alias
+     * Eg, POWER7_V2.3-POWERPC64-CPU can simply be called
+     * POWER7
+     */
+
+    offset = strstr(cpu_alias, "-" TYPE_POWERPC_CPU);
+    if (offset) {
+        model = g_strndup(cpu_alias, offset - cpu_alias);
+        for (i = 0; ppc_cpu_aliases[i].model != NULL; i++) {
+            if (strcmp(ppc_cpu_aliases[i].model, model) == 0) {
+                g_free(model);
+                return ppc_cpu_aliases[i].alias;
+            }
+        }
+        g_free(model);
+    }
+    return NULL;
+}
+
 static gint ppc_cpu_compare_class_name(gconstpointer a, gconstpointer b)
 {
     ObjectClass *oc = (ObjectClass *)a;
-- 
1.7.11.7



-- 
Prerna Saxena

Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India

  parent reply	other threads:[~2013-07-08 15:50 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-06 13:53 [Qemu-devel] [PATCH 00/19 v4] spapr: migration, pci, msi, power8 Alexey Kardashevskiy
2013-07-06 13:53 ` [Qemu-devel] [PATCH 01/19] pseries: move interrupt controllers to hw/intc/ Alexey Kardashevskiy
2013-07-06 13:53 ` [Qemu-devel] [PATCH 02/19] pseries: rework XICS Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 03/19] savevm: Implement VMS_DIVIDE flag Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 04/19] target-ppc: Convert ppc cpu savevm to VMStateDescription Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 05/19] pseries: savevm support for XICS interrupt controller Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 06/19] pseries: savevm support for VIO devices Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 07/19] pseries: savevm support for PAPR VIO logical lan Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 08/19] pseries: savevm support for PAPR VIO logical tty Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 09/19] pseries: savevm support for PAPR TCE tables Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 10/19] pseries: rework PAPR virtual SCSI Alexey Kardashevskiy
2013-07-08 11:57   ` [Qemu-devel] [PATCH v2] " Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 11/19] pseries: savevm support for " Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 12/19] pseries: savevm support for pseries machine Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 13/19] pseries: savevm support for PCI host bridge Alexey Kardashevskiy
2013-07-07 23:33   ` David Gibson
2013-07-06 13:54 ` [Qemu-devel] [PATCH 14/19] target-ppc: Add helper for KVM_PPC_RTAS_DEFINE_TOKEN Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 15/19] pseries: Support for in-kernel XICS interrupt controller Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 16/19] pseries: savevm support with KVM Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 17/19] target-ppc: Add POWER8 v1.0 CPU model Alexey Kardashevskiy
2013-07-06 13:54 ` [Qemu-devel] [PATCH 18/19] target-ppc: Enhance the CPU node labels for the guest device tree for pseries Alexey Kardashevskiy
2013-07-08  1:09   ` David Gibson
2013-07-08  9:02     ` Andreas Färber
2013-07-08 15:49       ` Prerna Saxena
2013-07-08 16:45         ` Andreas Färber
2013-07-10  6:38           ` Prerna Saxena
2013-07-10  9:11             ` Andreas Färber
2013-07-08 15:45     ` Prerna Saxena [this message]
2013-07-06 13:54 ` [Qemu-devel] [PATCH 19/19] spapr-pci: rework MSI/MSIX Alexey Kardashevskiy
2013-07-29 20:24 ` [Qemu-devel] [PATCH 00/19 v4] spapr: migration, pci, msi, power8 Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130708211515.4059b2ee@zephyr \
    --to=prerna@linux.vnet.ibm.com \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=aliguori@us.ibm.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=paulus@samba.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).