Hi,

The patch below fakes pv drivers installation.
Version numbers are taken from FreeBSD sysutils/xe-guest-utilities.
With this xen allows reboot or shutdown OpenBSD guest.

Index: sys/dev/pv/xen.c
===================================================================
RCS file: /cvs/src/sys/dev/pv/xen.c,v
retrieving revision 1.71
diff -u -p -u -r1.71 xen.c
--- sys/dev/pv/xen.c    10 Jan 2017 17:16:39 -0000      1.71
+++ sys/dev/pv/xen.c    18 Jan 2017 18:05:27 -0000
@@ -35,6 +35,7 @@
 #include <sys/signalvar.h>
 #include <sys/malloc.h>
 #include <sys/kernel.h>
+#include <sys/systm.h>
 #include <sys/stdint.h>
 #include <sys/device.h>
 #include <sys/task.h>
@@ -75,6 +76,7 @@ void  xen_disable_emulated_devices(struct
 int    xen_match(struct device *, void *, void *);
 void   xen_attach(struct device *, struct device *, void *);
 void   xen_deferred(struct device *);
+void   xen_inform_host(struct xen_softc *);
 void   xen_control(void *);
 void   xen_hotplug(void *);
 void   xen_resume(struct device *);
@@ -194,6 +196,29 @@ xen_deferred(struct device *self)
            xen_control, sc))
                printf("%s: failed to setup shutdown control watch\n",
                    sc->sc_dev.dv_xname);
+       xen_inform_host(sc);
+}
+void
+xen_inform_host(struct xen_softc *sc)
+{
+       char *os_name;
+       
+       /* Fake PV drivers version */
+       xs_setnum(sc, "attr/PVAddons", "MajorVersion", 6);
+       xs_setnum(sc, "attr/PVAddons", "MinorVersion", 2);
+       xs_setnum(sc, "attr/PVAddons", "MicroVersion", 0);
+       xs_setnum(sc, "attr/PVAddons", "BuildVersion", 76888);
+       xs_setnum(sc, "attr/PVAddons", "Installed", 1);
+
+       /* Set OS version */
+       snprintf(os_name, sizeof((char *)ostype) + sizeof((char *)osrelease),
+                       "%s %s", ostype, osrelease);
+       xs_setprop(sc, "data", "os_name", (char *)os_name, strlen(os_name));
+       xs_setprop(sc, "data", "os_uname", (char *)osrelease, 
strlen(osrelease));
+       xs_setprop(sc, "data", "os_distro", (char *)ostype, strlen(ostype));
+
+       /* Update xenstore */
+       xs_setnum(sc, "data", "updated", 1);
 }
 
 void

Reply via email to