All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aik@au1.ibm.com, qemu-ppc@nongnu.org, agraf@suse.de,
	nikunj@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH 1/3] spapr: add uuid/host details to device tree
Date: Tue, 10 Jun 2014 13:26:43 +0530	[thread overview]
Message-ID: <1402387005-28901-1-git-send-email-nikunj@linux.vnet.ibm.com> (raw)

Useful for identifying the guest/host uniquely within the
guest. Adding following properties to the guest root node.

vm,uuid - uuid of the guest
host-model - Host model number
host-serial - Host machine serial number
hypervisor type - Tells its "kvm"

Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
---
 hw/ppc/spapr.c       | 19 +++++++++++++++++++
 target-ppc/kvm.c     | 42 ++++++++++++++++++++++++++++++++++++++++++
 target-ppc/kvm_ppc.h | 12 ++++++++++++
 3 files changed, 73 insertions(+)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 57e9578..ff37319 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -313,6 +313,7 @@ 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};
+    char char_buf[512];
 
     fdt = g_malloc0(FDT_MAX_SIZE);
     _FDT((fdt_create(fdt, FDT_MAX_SIZE)));
@@ -331,6 +332,24 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
     _FDT((fdt_property_string(fdt, "model", "IBM pSeries (emulated by qemu)")));
     _FDT((fdt_property_string(fdt, "compatible", "qemu,pseries")));
 
+    if(kvm_enabled()) {
+        _FDT((fdt_property_string(fdt, "hypervisor", "kvm")));
+    }
+
+    /*
+     * Add info to guest to indentify which host is it being run on
+     * and what is the uuid of the guest
+     */
+    memset(char_buf, 0, sizeof(char_buf));
+    if (!kvmppc_get_host_model(char_buf, sizeof(char_buf))) {
+        _FDT((fdt_property_string(fdt, "host-model", char_buf)));
+        memset(char_buf, 0, sizeof(char_buf));
+    }
+    if(!kvmppc_get_host_serial(char_buf, sizeof(char_buf))) {
+        _FDT((fdt_property_string(fdt, "host-serial", char_buf)));
+    }
+    _FDT((fdt_property(fdt, "vm,uuid", qemu_uuid, 16)));
+
     _FDT((fdt_property_cell(fdt, "#address-cells", 0x2)));
     _FDT((fdt_property_cell(fdt, "#size-cells", 0x2)));
 
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 8ff1777..8cb090d 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -1353,6 +1353,48 @@ uint32_t kvmppc_get_tbfreq(void)
     return retval;
 }
 
+int32_t kvmppc_get_host_serial(char *value, int len)
+{
+    FILE *f;
+    int ret = -1;
+    char line[512];
+
+    memset(line, 0, sizeof(line));
+    f = fopen("/proc/device-tree/system-id", "r");
+    if (!f) {
+        return ret;
+    }
+
+    if(fgets(line, sizeof(line), f)) {
+        snprintf(value, len, "IBM,%s", line);
+        ret = 0;
+    }
+    fclose(f);
+
+    return ret;
+}
+
+int32_t kvmppc_get_host_model(char *value, int len)
+{
+    FILE *f;
+    int ret = -1;
+    char line[512];
+
+    memset(line, 0, sizeof(line));
+    f = fopen("/proc/device-tree/model", "r");
+    if (!f) {
+        return ret;
+    }
+
+    if(fgets(line, sizeof(line), f)) {
+        snprintf(value, len, "IBM,%s", line);
+        ret = 0;
+    }
+    fclose(f);
+
+    return ret;
+}
+
 /* Try to find a device tree node for a CPU with clock-frequency property */
 static int kvmppc_find_cpu_dt(char *buf, int buf_len)
 {
diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
index ff077ec..6ed7edd 100644
--- a/target-ppc/kvm_ppc.h
+++ b/target-ppc/kvm_ppc.h
@@ -19,6 +19,8 @@ uint32_t kvmppc_get_tbfreq(void);
 uint64_t kvmppc_get_clockfreq(void);
 uint32_t kvmppc_get_vmx(void);
 uint32_t kvmppc_get_dfp(void);
+int32_t kvmppc_get_host_model(char *buf, int buf_len);
+int32_t kvmppc_get_host_serial(char *buf, int buf_len);
 int kvmppc_get_hasidle(CPUPPCState *env);
 int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len);
 int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level);
@@ -56,6 +58,16 @@ static inline uint32_t kvmppc_get_tbfreq(void)
     return 0;
 }
 
+static inline int32_t kvmppc_get_host_model(char *buf, int buf_len)
+{
+    return 0;
+}
+
+static inline int32_t kvmppc_get_host_serial(char *buf, int buf_len)
+{
+    return 0;
+}
+
 static inline uint64_t kvmppc_get_clockfreq(void)
 {
     return 0;
-- 
1.8.3.1

             reply	other threads:[~2014-06-10  7:57 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-10  7:56 Nikunj A Dadhania [this message]
2014-06-11  8:21 ` [Qemu-devel] [Qemu-ppc] [PATCH 1/3] spapr: add uuid/host details to device tree Alexey Kardashevskiy
2014-06-12  8:00   ` Nikunj A Dadhania

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=1402387005-28901-1-git-send-email-nikunj@linux.vnet.ibm.com \
    --to=nikunj@linux.vnet.ibm.com \
    --cc=agraf@suse.de \
    --cc=aik@au1.ibm.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.