[libvirt] [PATCH v2] libxl: load on FreeBSD
Martin Kletzander
mkletzan at redhat.com
Thu May 28 08:29:00 UTC 2015
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150528/712cc241/attachment-0001.sig>
More information about the libvir-list
mailing list