It may prove useful know which Linux distribution version the host machine
is running when an issue in the guest arises but a user cannot access
the host.
Signed-off-by: Cyril Bur <address@hidden>
---
hw/ppc/spapr.c | 8 +++++++
target-ppc/kvm.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
target-ppc/kvm_ppc.h | 6 +++++
3 files changed, 76 insertions(+)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 6b48a26..391d47a 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -375,6 +375,14 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base,
_FDT((fdt_property_string(fdt, "vm,uuid", buf)));
g_free(buf);
+ /*
+ * Add info to the guest FDT to tell it what linux the host is
+ */
+ if (kvmppc_get_linux_host(&buf)) {
+ _FDT((fdt_property_string(fdt, "linux,host", buf)));
+ g_free(buf);
+ }
+
_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 8c9e79c..95e0970 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -1415,6 +1415,68 @@ bool kvmppc_get_host_model(char **value)
return g_file_get_contents("/proc/device-tree/model", value, NULL, NULL);
}
+bool kvmppc_get_linux_host(char **value)
+{
+ FILE *f;
+ int i;
+ char line[512];
+ const char *names[] = {"NAME", "VERSION", "BUILD_ID"};
+ bool names_found[ARRAY_SIZE(names)] = { 0 };
+ GString *output = NULL;
+ f = fopen("/etc/os-release", "r");