[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 24 of 27 v2] libxl: convert VFB handling to device API



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1318499566 -3600
# Node ID 9abeaa8b4d3c1f21c4e1695211fa0ad2639eb586
# Parent  e161facb4c6a32411c5e3a73d5fdcf015f8a8591
libxl: convert VFB handling to device API

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r e161facb4c6a -r 9abeaa8b4d3c tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Thu Oct 13 10:52:46 2011 +0100
+++ b/tools/libxl/libxl.c       Thu Oct 13 10:52:46 2011 +0100
@@ -1896,10 +1896,9 @@ out:
 }
 
 
/******************************************************************************/
-void libxl_device_vfb_init(libxl_device_vfb *vfb, int dev_num)
+int libxl_device_vfb_init(libxl_ctx *ctx, libxl_device_vfb *vfb)
 {
     memset(vfb, 0x00, sizeof(libxl_device_vfb));
-    vfb->devid = dev_num;
     vfb->display = NULL;
     vfb->xauthority = NULL;
     vfb->vnc = 1;
@@ -1910,6 +1909,20 @@ void libxl_device_vfb_init(libxl_device_
     vfb->keymap = NULL;
     vfb->sdl = 0;
     vfb->opengl = 0;
+    return 0;
+}
+
+static int libxl__device_from_vfb(libxl__gc *gc, uint32_t domid,
+                                  libxl_device_vfb *vfb,
+                                  libxl__device *device)
+{
+    device->backend_devid = vfb->devid;
+    device->backend_domid = vfb->backend_domid;
+    device->backend_kind = LIBXL__DEVICE_KIND_VFB;
+    device->devid = vfb->devid;
+    device->domid = domid;
+    device->kind = LIBXL__DEVICE_KIND_VFB;
+    return 0;
 }
 
 int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb)
@@ -1931,12 +1944,8 @@ int libxl_device_vfb_add(libxl_ctx *ctx,
         goto out_free;
     }
 
-    device.backend_devid = vfb->devid;
-    device.backend_domid = vfb->backend_domid;
-    device.backend_kind = LIBXL__DEVICE_KIND_VFB;
-    device.devid = vfb->devid;
-    device.domid = domid;
-    device.kind = LIBXL__DEVICE_KIND_VFB;
+    rc = libxl__device_from_vfb(&gc, domid, vfb, &device);
+    if (rc != 0) goto out_free;
 
     flexarray_append_pair(back, "frontend-id", libxl__sprintf(&gc, "%d", 
domid));
     flexarray_append_pair(back, "online", "1");
@@ -1971,6 +1980,38 @@ out:
     return rc;
 }
 
+int libxl_device_vfb_remove(libxl_ctx *ctx, uint32_t domid,
+                            libxl_device_vfb *vfb)
+{
+    libxl__gc gc = LIBXL_INIT_GC(ctx);
+    libxl__device device;
+    int rc;
+
+    rc = libxl__device_from_vfb(&gc, domid, vfb, &device);
+    if (rc != 0) goto out;
+
+    rc = libxl__device_remove(&gc, &device, 1);
+out:
+    libxl__free_all(&gc);
+    return rc;
+}
+
+int libxl_device_vfb_destroy(libxl_ctx *ctx, uint32_t domid,
+                                  libxl_device_vfb *vfb)
+{
+    libxl__gc gc = LIBXL_INIT_GC(ctx);
+    libxl__device device;
+    int rc;
+
+    rc = libxl__device_from_vfb(&gc, domid, vfb, &device);
+    if (rc != 0) goto out;
+
+    rc = libxl__device_destroy(&gc, &device);
+out:
+    libxl__free_all(&gc);
+    return rc;
+}
+
 
/******************************************************************************/
 
 int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint32_t max_memkb)
diff -r e161facb4c6a -r 9abeaa8b4d3c tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Thu Oct 13 10:52:46 2011 +0100
+++ b/tools/libxl/libxl.h       Thu Oct 13 10:52:46 2011 +0100
@@ -479,10 +479,11 @@ int libxl_device_vkb_add(libxl_ctx *ctx,
 int libxl_device_vkb_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb 
*vkb);
 int libxl_device_vkb_destroy(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb 
*vkb);
 
-void libxl_device_vfb_init(libxl_device_vfb *vfb, int dev_num);
+/* Framebuffer */
+int libxl_device_vfb_init(libxl_ctx *ctx, libxl_device_vfb *vfb);
 int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb 
*vfb);
-int libxl_device_vfb_clean_shutdown(libxl_ctx *ctx, uint32_t domid);
-int libxl_device_vfb_hard_shutdown(libxl_ctx *ctx, uint32_t domid);
+int libxl_device_vfb_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb 
*vfb);
+int libxl_device_vfb_destroy(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb 
*vfb);
 
 int libxl_device_pci_add(libxl_ctx *ctx, uint32_t domid, libxl_device_pci 
*pcidev);
 int libxl_device_pci_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_pci 
*pcidev, int force);
diff -r e161facb4c6a -r 9abeaa8b4d3c tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Thu Oct 13 10:52:46 2011 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Thu Oct 13 10:52:46 2011 +0100
@@ -853,7 +853,8 @@ skip:
 
             d_config->vfbs = (libxl_device_vfb *) realloc(d_config->vfbs, 
sizeof(libxl_device_vfb) * (d_config->num_vfbs + 1));
             vfb = d_config->vfbs + d_config->num_vfbs;
-            libxl_device_vfb_init(vfb, d_config->num_vfbs);
+            libxl_device_vfb_init(ctx, vfb);
+            vfb->devid = d_config->num_vfbs;
 
             d_config->vkbs = (libxl_device_vkb *) realloc(d_config->vkbs, 
sizeof(libxl_device_vkb) * (d_config->num_vkbs + 1));
             vkb = d_config->vkbs + d_config->num_vkbs;
diff -r e161facb4c6a -r 9abeaa8b4d3c tools/ocaml/libs/xl/genwrap.py
--- a/tools/ocaml/libs/xl/genwrap.py    Thu Oct 13 10:52:46 2011 +0100
+++ b/tools/ocaml/libs/xl/genwrap.py    Thu Oct 13 10:52:46 2011 +0100
@@ -22,10 +22,7 @@ DEVICE_FUNCTIONS = [ ("add",            
                    ]
 
 functions = { # ( name , [type1,type2,....] )
-    "device_vfb":     [ ("add",            ["t", "domid", "unit"]),
-                        ("clean_shutdown", ["domid", "unit"]),
-                        ("hard_shutdown",  ["domid", "unit"]),
-                      ],
+    "device_vfb":     DEVICE_FUNCTIONS,
     "device_vkb":     DEVICE_FUNCTIONS,
     "device_disk":    DEVICE_FUNCTIONS,
     "device_nic":     DEVICE_FUNCTIONS,
diff -r e161facb4c6a -r 9abeaa8b4d3c tools/ocaml/libs/xl/xenlight_stubs.c
--- a/tools/ocaml/libs/xl/xenlight_stubs.c      Thu Oct 13 10:52:46 2011 +0100
+++ b/tools/ocaml/libs/xl/xenlight_stubs.c      Thu Oct 13 10:52:46 2011 +0100
@@ -360,14 +360,17 @@ value stub_xl_device_vfb_add(value info,
        CAMLreturn(Val_unit);
 }
 
-value stub_xl_device_vfb_clean_shutdown(value domid)
+value stub_xl_device_vfb_remove(value info, value domid)
 {
        CAMLparam1(domid);
+       libxl_device_vfb c_info;
        int ret;
        INIT_STRUCT();
 
+       device_vfb_val(&gc, &lg, &c_info, info);
+
        INIT_CTX();
-       ret = libxl_device_vfb_clean_shutdown(ctx, Int_val(domid));
+       ret = libxl_device_vfb_remove(ctx, Int_val(domid), &c_info);
        if (ret != 0)
                failwith_xl("vfb_clean_shutdown", &lg);
        FREE_CTX();
@@ -375,14 +378,17 @@ value stub_xl_device_vfb_clean_shutdown(
        CAMLreturn(Val_unit);
 }
 
-value stub_xl_device_vfb_hard_shutdown(value domid)
+value stub_xl_device_vfb_destroy(value info, value domid)
 {
        CAMLparam1(domid);
+       libxl_device_vfb c_info;
        int ret;
        INIT_STRUCT();
 
+       device_vfb_val(&gc, &lg, &c_info, info);
+
        INIT_CTX();
-       ret = libxl_device_vfb_hard_shutdown(ctx, Int_val(domid));
+       ret = libxl_device_vfb_destroy(ctx, Int_val(domid), &c_info);
        if (ret != 0)
                failwith_xl("vfb_hard_shutdown", &lg);
        FREE_CTX();

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.