]> xenbits.xensource.com Git - libvirt.git/commitdiff
* src/xen_internal.c src/xen_internal.h src/xs_internal.c: fix
authorDaniel Veillard <veillard@redhat.com>
Fri, 16 Jun 2006 15:28:26 +0000 (15:28 +0000)
committerDaniel Veillard <veillard@redhat.com>
Fri, 16 Jun 2006 15:28:26 +0000 (15:28 +0000)
  a TODO in xs_internal.c pointed out by Philippe Berthault
Daniel

ChangeLog
src/xen_internal.c
src/xen_internal.h
src/xs_internal.c

index 11294b77f2e67efc74e0727b76b31909079b0e1a..409c7f03cef51dc4a141ebe70a19eb5d58a0329d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jun 16 15:08:42 EDT 2006 Daniel Veillard <veillard@redhat.com>
+
+       * src/xen_internal.c src/xen_internal.h src/xs_internal.c: fix
+         a TODO in xs_internal.c pointed out by Philippe Berthault
+
 Fri Jun 16 12:44:02 EDT 2006 Daniel Veillard <veillard@redhat.com>
 
        * src/libvirt.c src/xen_internal.c src/xend_internal.c: more driver 
index 0f8dada3e2b88821acfab49f385587cd54ab68c1..1240040b22777415f2e64ce3a9f904e16813672d 100644 (file)
@@ -639,3 +639,52 @@ xenHypervisorSetMaxMemory(virDomainPtr domain, unsigned long memory)
         return (-1);
     return (0);
 }
+
+/**
+ * xenHypervisorCheckID:
+ * @domain: pointer to the domain block
+ * @info: the place where informations should be stored
+ *
+ * Do an hypervisor call to verify the domain ID is valid
+ *
+ * Returns 0 in case of success, -1 in case of error.
+ */
+int
+xenHypervisorCheckID(virConnectPtr conn, int id)
+{
+    dom0_op_t op;
+    dom0_getdomaininfo_t dominfo;
+    int ret;
+
+    if ((conn->handle < 0) || (id < 0))
+        return (-1);
+
+    memset(&dominfo, 0, sizeof(dom0_getdomaininfo_t));
+
+    if (mlock(&dominfo, sizeof(dom0_getdomaininfo_t)) < 0) {
+        virXenError(VIR_ERR_XEN_CALL, " locking",
+                    sizeof(dom0_getdomaininfo_t));
+        return (-1);
+    }
+
+    op.cmd = DOM0_GETDOMAININFOLIST;
+    op.u.getdomaininfolist.first_domain = (domid_t) id;
+    op.u.getdomaininfolist.max_domains = 1;
+    op.u.getdomaininfolist.buffer = &dominfo;
+    op.u.getdomaininfolist.num_domains = 1;
+    dominfo.domain = id;
+
+    ret = xenHypervisorDoOp(conn->handle, &op);
+
+    if (munlock(&dominfo, sizeof(dom0_getdomaininfo_t)) < 0) {
+        virXenError(VIR_ERR_XEN_CALL, " release",
+                    sizeof(dom0_getdomaininfo_t));
+        ret = -1;
+    }
+
+    if (ret < 0)
+        return (-1);
+
+    return (0);
+}
+
index 9870f29542b45ba575ede33a2af9ac8029772fcf..dcb62f6c5db8846592342956c839a05292cecb98 100644 (file)
@@ -36,7 +36,8 @@ int   xenHypervisorGetDomainInfo      (virDomainPtr domain,
                                         virDomainInfoPtr info);
 int    xenHypervisorSetMaxMemory       (virDomainPtr domain,
                                         unsigned long memory);
-
+int    xenHypervisorCheckID            (virConnectPtr conn,
+                                        int id);
 #ifdef __cplusplus
 }
 #endif
index 30d97eac35275ed17f67628ae9caaff38f007ee5..4dae2eb77f89ccfe7be982591960ebe9cacbfefd 100644 (file)
@@ -27,6 +27,7 @@
 #include "internal.h"
 #include "driver.h"
 #include "xs_internal.h"
+#include "xen_internal.h" /* for xenHypervisorCheckID */
 
 #define XEN_HYPERVISOR_SOCKET "/proc/xen/privcmd"
 
@@ -256,16 +257,11 @@ static int
 virConnectCheckStoreID(virConnectPtr conn, int id)
 {
     if (conn->handle >= 0) {
-       TODO
-       /*
-        dom0_getdomaininfo_t dominfo;
         int tmp;
 
-        dominfo.domain = id;
-        tmp = xenHypervisorGetDomainInfo(conn->handle, id, &dominfo);
+        tmp = xenHypervisorCheckID(conn, id);
         if (tmp < 0)
             return (-1);
-        */
     }
     return (0);
 }