WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 3/7] [xen-ocaml-tools.hg] allow linking against exter

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 3/7] [xen-ocaml-tools.hg] allow linking against external libxc
From: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>
Date: Fri, 17 Apr 2009 16:44:18 +0100
Delivery-date: Fri, 17 Apr 2009 08:47:00 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.19 (X11/20090105)
Do not reimplement libxc routines if HAVE_LIBXC is defined.

If we're compiling for a platform that has a libxc then use it
rather than reimplementing the code in xenstored.

This saves us from having to port these low level routines from
linux to mini-OS in order to run xenstored in a stub domain.

Signed-off-by: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>

diff -r 7a4f8a26f48d libs/eventchn/eventchn_stubs.c
--- a/libs/eventchn/eventchn_stubs.c    Wed Mar 25 15:11:31 2009 +0000
+++ b/libs/eventchn/eventchn_stubs.c    Thu Apr 16 14:19:43 2009 +0100
@@ -27,11 +27,15 @@
 
 #include <xen/sysctl.h>
 
-#if XEN_SYSCTL_INTERFACE_VERSION < 4
-#include <xen/linux/evtchn.h>
+#ifdef HAVE_LIBXC
+# include <xenctrl.h>
 #else
-#include <xen/xen.h>
-#include <xen/sys/evtchn.h>
+# if XEN_SYSCTL_INTERFACE_VERSION < 4
+#  include <xen/linux/evtchn.h>
+# else
+#  include <xen/xen.h>
+#  include <xen/sys/evtchn.h>
+# endif
 #endif
 
 #include <xenctrl.h>
@@ -53,6 +57,7 @@
        return ioctl(handle, cmd, arg);
 }
 
+#ifndef HAVE_LIBXC
 static int do_read_port(int handle, evtchn_port_t *port)
 {
        return (read(handle, port, sizeof(evtchn_port_t)) != 
sizeof(evtchn_port_t));
@@ -62,9 +67,13 @@
 {
        return (write(handle, &port, sizeof(evtchn_port_t)) != 
sizeof(evtchn_port_t));
 }
+#endif
 
 int eventchn_do_open(void)
 {
+#ifdef HAVE_LIBXC
+       return xc_evtchn_open();
+#else
        int fd;
 
        fd = open(EVENTCHN_PATH, O_RDWR);
@@ -74,6 +83,7 @@
                fd = open(EVENTCHN_PATH, O_RDWR);
        }
        return fd;
+#endif
 }
 
 CAMLprim value stub_eventchn_init(value unit)
@@ -88,14 +98,16 @@
 CAMLprim value stub_eventchn_notify(value fd, value port)
 {
        CAMLparam2(fd, port);
+       int rc;
+#ifdef HAVE_LIBXC
+       rc = xc_evtchn_notify(Int_val(fd), Int_val(port));
+#else
        struct ioctl_evtchn_notify notify;
-       int rc;
-
        notify.port = Int_val(port);
        rc = do_ioctl(Int_val(fd), IOCTL_EVTCHN_NOTIFY, &notify);
+#endif
        if (rc == -1)
                caml_failwith("ioctl notify failed");
-
        CAMLreturn(Val_unit);
 }
 
@@ -104,12 +116,15 @@
 {
        CAMLparam3(fd, domid, remote_port);
        CAMLlocal1(port);
+       int rc;
+#ifdef HAVE_LIBXC
+       rc = xc_evtchn_bind_interdomain(Int_val(fd), Int_val(domid), 
Int_val(remote_port));
+#else
        struct ioctl_evtchn_bind_interdomain bind;
-       int rc;
-
        bind.remote_domain = Int_val(domid);
        bind.remote_port = Int_val(remote_port);
        rc = do_ioctl(Int_val(fd), IOCTL_EVTCHN_BIND_INTERDOMAIN, &bind);
+#endif
        if (rc == -1)
                caml_failwith("ioctl bind_interdomain failed");
        port = Val_int(rc);
@@ -121,11 +136,14 @@
 {
        CAMLparam1(fd);
        CAMLlocal1(port);
+       int rc;
+#ifdef HAVE_LIBXC
+       rc = xc_evtchn_bind_virq(Int_val(fd), VIRQ_DOM_EXC);
+#else
        struct ioctl_evtchn_bind_virq bind;
-       int rc;
-
        bind.virq = VIRQ_DOM_EXC;
        rc = do_ioctl(Int_val(fd), IOCTL_EVTCHN_BIND_VIRQ, &bind);
+#endif
        if (rc == -1)
                caml_failwith("ioctl bind_virq failed");
        port = Val_int(rc);
@@ -136,11 +154,14 @@
 CAMLprim value stub_eventchn_unbind(value fd, value port)
 {
        CAMLparam2(fd, port);
+       int rc;
+#ifdef HAVE_LIBXC
+       rc = xc_evtchn_unbind(Int_val(fd), Int_val(port));
+#else
        struct ioctl_evtchn_unbind unbind;
-       int rc;
-
        unbind.port = Int_val(port);
        rc = do_ioctl(Int_val(fd), IOCTL_EVTCHN_UNBIND, &unbind);
+#endif
        if (rc == -1)
                caml_failwith("ioctl unbind failed");
 
@@ -153,8 +174,13 @@
        CAMLlocal1(result);
        evtchn_port_t port;
 
+#ifdef HAVE_LIBXC
+       if ((port = xc_evtchn_pending(Int_val(fd))) == -1)
+               caml_failwith("xc_evtchn_pending failed");
+#else
        if (do_read_port(Int_val(fd), &port))
                caml_failwith("read port failed");
+#endif
        result = Val_int(port);
 
        CAMLreturn(result);
@@ -166,7 +192,12 @@
        evtchn_port_t port;
 
        port = Int_val(_port);
+#ifdef HAVE_LIBXC
+       if (xc_evtchn_unmask(Int_val(fd), port) == -1)
+               caml_failwith("xc_evtchn_unmask failed");
+#else
        if (do_write_port(Int_val(fd), port))
                caml_failwith("write port failed");
+#endif
        CAMLreturn(Val_unit);
 }
diff -r 7a4f8a26f48d libs/xc/xc.h
--- a/libs/xc/xc.h      Wed Mar 25 15:11:31 2009 +0000
+++ b/libs/xc/xc.h      Thu Apr 16 14:19:43 2009 +0100
@@ -22,11 +22,6 @@
 #include <xen/domctl.h>
 #include <xen/sched.h>
 #include <xen/sysctl.h>
-#if XEN_SYSCTL_INTERFACE_VERSION < 4
-#include <xen/linux/privcmd.h>
-#else
-#include <xen/sys/privcmd.h>
-#endif
 #include <xen/version.h>
 #include <xen/foreign/x86_32.h>
 #include <xen/foreign/x86_64.h>
@@ -39,15 +34,21 @@
 
 int xc_using_injection(void);
 
+#ifdef HAVE_LIBXC
+#include <xenctrl.h>
+#else
+# if XEN_SYSCTL_INTERFACE_VERSION < 4
+#  include <xen/linux/privcmd.h>
+# else
+#  include <xen/sys/privcmd.h>
+# endif
 int xc_interface_open(void);
 int xc_interface_close(int handle);
 
 int xc_domain_getinfolist(int handle, unsigned int first_domain,
                           unsigned int max_domains, xc_domaininfo_t *info);
-int xc_domain_getinfo(int handle, unsigned int first_domain,
-                      xc_domaininfo_t *info);
-
 void *xc_map_foreign_range(int handle, unsigned int domid,
                            int size, int prot, unsigned long mfn);
 int xc_map_foreign_ranges(int handle, unsigned int domid,
                           privcmd_mmap_entry_t *entries, int nr);
+#endif /* HAVE_LIBXC */
diff -r 7a4f8a26f48d libs/xc/xc_lib.c
--- a/libs/xc/xc_lib.c  Wed Mar 25 15:11:31 2009 +0000
+++ b/libs/xc/xc_lib.c  Thu Apr 16 14:19:43 2009 +0100
@@ -28,10 +28,6 @@
 #include <stdarg.h>
 
 #include "xc.h"
-
-#define PAGE_SHIFT             12
-#define PAGE_SIZE               (1UL << PAGE_SHIFT)
-#define PAGE_MASK               (~(PAGE_SIZE-1))
 
 #define MIN(a, b)              (((a) < (b)) ? (a) : (b))
 
@@ -68,6 +64,7 @@
        return __error_str;
 }
 
+#ifndef HAVE_LIBXC
 static void xc_error_set(const char *fmt, ...)
 {
        va_list ap;
@@ -93,6 +90,7 @@
                 " failed: %s", xc_error_get());
        memcpy(__error_str, __errordup, ERROR_STRLEN);
 }
+#endif /* HAVE_LIBXC */
 
 void xc_error_clear(void)
 {
@@ -116,6 +114,7 @@
        return 0;
 }
 
+#ifndef HAVE_LIBXC
 /*---- Trivia ----*/
 int xc_interface_open(void)
 {
@@ -221,25 +220,9 @@
        return ret;
 }
 
-int xc_domain_getinfo(int handle, unsigned int domid, xc_domaininfo_t *info)
-{
-       int ret;
-       ret = xc_domain_getinfolist(handle, domid, 1, info);
-       if (ret != 1) {
-               xc_error_set("getinfo failed: domain %d: %s", domid, 
xc_error_get());
-               return -1;
-       }
-
-       /* If the requested domain didn't exist but there exists one with a 
-          higher domain ID, this will be returned. We consider this an error 
since
-          we only wanted info about a specific domain. */
-       if (info->domain != domid) {
-               xc_error_set("getinfo failed: domain %d nolonger exists", 
domid);
-               return -1;
-       }
-
-       return 0;
-}
+#define PAGE_SHIFT             12
+#define PAGE_SIZE               (1UL << PAGE_SHIFT)
+#define PAGE_MASK               (~(PAGE_SIZE-1))
 
 void *xc_map_foreign_range(int handle, unsigned int domid,
                            int size, int prot, unsigned long mfn)
@@ -291,3 +274,4 @@
        }
        return ret;
 }
+#endif /* HAVE_LIBXC */
diff -r 7a4f8a26f48d libs/xc/xc_stubs.c
--- a/libs/xc/xc_stubs.c        Wed Mar 25 15:11:31 2009 +0000
+++ b/libs/xc/xc_stubs.c        Thu Apr 16 14:19:43 2009 +0100
@@ -119,8 +119,8 @@
        xc_domaininfo_t info;
        int ret;
 
-       ret = xc_domain_getinfo(_H(xc_handle), _D(domid), &info);
-       if (ret != 0)
+       ret = xc_domain_getinfolist(_H(xc_handle), _D(domid), 1, &info);
+       if (ret != 1 || info.domain != _D(domid))
                failwith_xc();
 
        result = alloc_domaininfo(&info);

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 3/7] [xen-ocaml-tools.hg] allow linking against external libxc, Alex Zeffertt <=