
On Thu, May 28, 2015 at 11:11:06AM +0400, Roman Bogorodskiy wrote:
Jim Fehlig wrote:
On 05/27/2015 09:06 AM, Martin Kletzander wrote:
On Sun, May 24, 2015 at 06:45:02PM +0300, Roman Bogorodskiy wrote:
The libxl tries to check if it's running in dom0 by parsing /proc/xen/capabilities and if that fails it doesn't load.
There's no procfs interface in Xen on FreeBSD, so this check always fails.
In addition to checking procfs, check if /dev/xen/xenstored, that's enough to check if we're running in dom0 in FreeBSD case. --- src/libxl/libxl_driver.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 12be816..fddafa1 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -74,6 +74,7 @@ VIR_LOG_INIT("libxl.libxl_driver"); #define LIBXL_CONFIG_FORMAT_SEXPR "xen-sxpr"
#define HYPERVISOR_CAPABILITIES "/proc/xen/capabilities" +#define HYPERVISOR_XENSTORED "/dev/xen/xenstored"
/* Number of Xen scheduler parameters */ #define XEN_SCHED_CREDIT_NPARAM 2 @@ -427,8 +428,6 @@ static bool libxlDriverShouldLoad(bool privileged) { bool ret = false; - int status; - char *output = NULL;
/* Don't load if non-root */ if (!privileged) { @@ -436,24 +435,27 @@ libxlDriverShouldLoad(bool privileged) return ret; }
- if (!virFileExists(HYPERVISOR_CAPABILITIES)) { - VIR_INFO("Disabling driver as " HYPERVISOR_CAPABILITIES - " does not exist"); - return ret; - } - /* - * Don't load if not running on a Xen control domain (dom0). It is not - * sufficient to check for the file to exist as any guest can mount - * xenfs to /proc/xen. - */ - status = virFileReadAll(HYPERVISOR_CAPABILITIES, 10, &output); - if (status >= 0) - status = strncmp(output, "control_d", 9); - VIR_FREE(output); - if (status) { - VIR_INFO("No Xen capabilities detected, probably not running " - "in a Xen Dom0. Disabling libxenlight driver"); - + if (virFileExists(HYPERVISOR_CAPABILITIES)) { + int status; + char *output = NULL; + /* + * Don't load if not running on a Xen control domain (dom0). It is not + * sufficient to check for the file to exist as any guest can mount + * xenfs to /proc/xen. + */ + status = virFileReadAll(HYPERVISOR_CAPABILITIES, 10, &output); + if (status >= 0) + status = strncmp(output, "control_d", 9); + VIR_FREE(output); + if (status) { + VIR_INFO("No Xen capabilities detected, probably not running " + "in a Xen Dom0. Disabling libxenlight driver"); + + return ret; + } + } else if (!virFileExists(HYPERVISOR_XENSTORED)) { + VIR_INFO("Disabling driver as neither " HYPERVISOR_CAPABILITIES + " nor " HYPERVISOR_CAPABILITIES " exist");
s/HYPERVISOR_CAPABILITIES/HYPERVISOR_XENSTORED/
ACK with that changed.
For the record, I tested this on Linux. Looks good with Martin's comment addressed.
Regards, Jim
Thanks for giving it a test!
Is this safe to push during the freeze?
I also tried it before ACKing on XEN-enabled linux (made sure there is no /dev/xen/xenstored so it doesn't collide), so I'd say it's fine with me.