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 01 of 25] libxc: some xc_gnttab_* functions are not L

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 01 of 25] libxc: some xc_gnttab_* functions are not Linux specific
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Fri, 03 Dec 2010 09:57:05 +0000
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Fri, 03 Dec 2010 02:00:52 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1291370224@xxxxxxxxxxxxxxxxxxxxx>
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
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1291369006 0
# Node ID 7c6e87f167d47b2c0b850806d0e9fa298018ebd4
# Parent  9a40ab7a4347e4c49785d079a598a1bc22477739
libxc: some xc_gnttab_* functions are not Linux specific

They simply make hypercalls and perform other operations via the
abstract interface. Create xc_gnttab.c and move those functions there.

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

diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/Makefile
--- a/tools/libxc/Makefile      Fri Dec 03 09:36:46 2010 +0000
+++ b/tools/libxc/Makefile      Fri Dec 03 09:36:46 2010 +0000
@@ -11,6 +11,7 @@ CTRL_SRCS-y       += xc_cpupool.c
 CTRL_SRCS-y       += xc_cpupool.c
 CTRL_SRCS-y       += xc_domain.c
 CTRL_SRCS-y       += xc_evtchn.c
+CTRL_SRCS-y       += xc_gnttab.c
 CTRL_SRCS-y       += xc_misc.c
 CTRL_SRCS-y       += xc_acm.c
 CTRL_SRCS-y       += xc_flask.c
diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/xc_gnttab.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxc/xc_gnttab.c   Fri Dec 03 09:36:46 2010 +0000
@@ -0,0 +1,147 @@
+/******************************************************************************
+ *
+ * Copyright (c) 2007-2008, D G Murray <Derek.Murray@xxxxxxxxxxxx>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  
USA
+ */
+
+#include "xc_private.h"
+
+int xc_gnttab_op(xc_interface *xch, int cmd, void * op, int op_size, int count)
+{
+    int ret = 0;
+    DECLARE_HYPERCALL;
+    DECLARE_HYPERCALL_BOUNCE(op, count * op_size, 
XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
+
+    if ( xc_hypercall_bounce_pre(xch, op) )
+    {
+        PERROR("Could not bounce buffer for grant table op hypercall");
+        goto out1;
+    }
+
+    hypercall.op = __HYPERVISOR_grant_table_op;
+    hypercall.arg[0] = cmd;
+    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(op);
+    hypercall.arg[2] = count;
+
+    ret = do_xen_hypercall(xch, &hypercall);
+
+    xc_hypercall_bounce_post(xch, op);
+
+ out1:
+    return ret;
+}
+
+int xc_gnttab_get_version(xc_interface *xch, int domid)
+{
+    struct gnttab_get_version query;
+    int rc;
+
+    query.dom = domid;
+    rc = xc_gnttab_op(xch, GNTTABOP_get_version, &query, sizeof(query),
+                      1);
+    if ( rc < 0 )
+        return rc;
+    else
+        return query.version;
+}
+
+static void *_gnttab_map_table(xc_interface *xch, int domid, int *gnt_num)
+{
+    int rc, i;
+    struct gnttab_query_size query;
+    struct gnttab_setup_table setup;
+    DECLARE_HYPERCALL_BUFFER(unsigned long, frame_list);
+    xen_pfn_t *pfn_list = NULL;
+    grant_entry_v1_t *gnt = NULL;
+
+    if ( !gnt_num )
+        return NULL;
+
+    query.dom = domid;
+    rc = xc_gnttab_op(xch, GNTTABOP_query_size, &query, sizeof(query), 1);
+
+    if ( rc || (query.status != GNTST_okay) )
+    {
+        ERROR("Could not query dom's grant size\n", domid);
+        return NULL;
+    }
+
+    *gnt_num = query.nr_frames * (PAGE_SIZE / sizeof(grant_entry_v1_t) );
+
+    frame_list = xc_hypercall_buffer_alloc(xch, frame_list, query.nr_frames * 
sizeof(unsigned long));
+    if ( !frame_list )
+    {
+        ERROR("Could not allocate frame_list in xc_gnttab_map_table\n");
+        return NULL;
+    }
+
+    pfn_list = malloc(query.nr_frames * sizeof(xen_pfn_t));
+    if ( !pfn_list )
+    {
+        ERROR("Could not allocate pfn_list in xc_gnttab_map_table\n");
+        goto err;
+    }
+
+    setup.dom = domid;
+    setup.nr_frames = query.nr_frames;
+    set_xen_guest_handle(setup.frame_list, frame_list);
+
+    /* XXX Any race with other setup_table hypercall? */
+    rc = xc_gnttab_op(xch, GNTTABOP_setup_table, &setup, sizeof(setup),
+                      1);
+
+    if ( rc || (setup.status != GNTST_okay) )
+    {
+        ERROR("Could not get grant table frame list\n");
+        goto err;
+    }
+
+    for ( i = 0; i < setup.nr_frames; i++ )
+        pfn_list[i] = frame_list[i];
+
+    gnt = xc_map_foreign_pages(xch, domid, PROT_READ, pfn_list,
+                               setup.nr_frames);
+    if ( !gnt )
+    {
+        ERROR("Could not map grant table\n");
+        goto err;
+    }
+
+err:
+    if ( frame_list )
+        xc_hypercall_buffer_free(xch, frame_list);
+    if ( pfn_list )
+        free(pfn_list);
+
+    return gnt;
+}
+
+grant_entry_v1_t *xc_gnttab_map_table_v1(xc_interface *xch, int domid,
+                                         int *gnt_num)
+{
+    if (xc_gnttab_get_version(xch, domid) == 2)
+        return NULL;
+    return _gnttab_map_table(xch, domid, gnt_num);
+}
+
+grant_entry_v2_t *xc_gnttab_map_table_v2(xc_interface *xch, int domid,
+                                         int *gnt_num)
+{
+    if (xc_gnttab_get_version(xch, domid) != 2)
+        return NULL;
+    return _gnttab_map_table(xch, domid, gnt_num);
+}
+
diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Fri Dec 03 09:36:46 2010 +0000
+++ b/tools/libxc/xc_linux.c    Fri Dec 03 09:36:46 2010 +0000
@@ -608,132 +608,6 @@ int xc_gnttab_set_max_grants(xc_interfac
     return 0;
 }
 
-int xc_gnttab_op(xc_interface *xch, int cmd, void * op, int op_size, int count)
-{
-    int ret = 0;
-    DECLARE_HYPERCALL;
-    DECLARE_HYPERCALL_BOUNCE(op, count * op_size, 
XC_HYPERCALL_BUFFER_BOUNCE_BOTH);
-
-    if ( xc_hypercall_bounce_pre(xch, op) )
-    {
-        PERROR("Could not bounce buffer for grant table op hypercall");
-        goto out1;
-    }
-
-    hypercall.op = __HYPERVISOR_grant_table_op;
-    hypercall.arg[0] = cmd;
-    hypercall.arg[1] = HYPERCALL_BUFFER_AS_ARG(op);
-    hypercall.arg[2] = count;
-
-    ret = do_xen_hypercall(xch, &hypercall);
-
-    xc_hypercall_bounce_post(xch, op);
-
- out1:
-    return ret;
-}
-
-int xc_gnttab_get_version(xc_interface *xch, int domid)
-{
-    struct gnttab_get_version query;
-    int rc;
-
-    query.dom = domid;
-    rc = xc_gnttab_op(xch, GNTTABOP_get_version, &query, sizeof(query),
-                      1);
-    if ( rc < 0 )
-        return rc;
-    else
-        return query.version;
-}
-
-static void *_gnttab_map_table(xc_interface *xch, int domid, int *gnt_num)
-{
-    int rc, i;
-    struct gnttab_query_size query;
-    struct gnttab_setup_table setup;
-    DECLARE_HYPERCALL_BUFFER(unsigned long, frame_list);
-    xen_pfn_t *pfn_list = NULL;
-    grant_entry_v1_t *gnt = NULL;
-
-    if ( !gnt_num )
-        return NULL;
-
-    query.dom = domid;
-    rc = xc_gnttab_op(xch, GNTTABOP_query_size, &query, sizeof(query), 1);
-
-    if ( rc || (query.status != GNTST_okay) )
-    {
-        ERROR("Could not query dom's grant size\n", domid);
-        return NULL;
-    }
-
-    *gnt_num = query.nr_frames * (PAGE_SIZE / sizeof(grant_entry_v1_t) );
-
-    frame_list = xc_hypercall_buffer_alloc(xch, frame_list, query.nr_frames * 
sizeof(unsigned long));
-    if ( !frame_list )
-    {
-        ERROR("Could not allocate frame_list in xc_gnttab_map_table\n");
-        return NULL;
-    }
-
-    pfn_list = malloc(query.nr_frames * sizeof(xen_pfn_t));
-    if ( !pfn_list )
-    {
-        ERROR("Could not allocate pfn_list in xc_gnttab_map_table\n");
-        goto err;
-    }
-
-    setup.dom = domid;
-    setup.nr_frames = query.nr_frames;
-    set_xen_guest_handle(setup.frame_list, frame_list);
-
-    /* XXX Any race with other setup_table hypercall? */
-    rc = xc_gnttab_op(xch, GNTTABOP_setup_table, &setup, sizeof(setup),
-                      1);
-
-    if ( rc || (setup.status != GNTST_okay) )
-    {
-        ERROR("Could not get grant table frame list\n");
-        goto err;
-    }
-
-    for ( i = 0; i < setup.nr_frames; i++ )
-        pfn_list[i] = frame_list[i];
-
-    gnt = xc_map_foreign_pages(xch, domid, PROT_READ, pfn_list,
-                               setup.nr_frames);
-    if ( !gnt )
-    {
-        ERROR("Could not map grant table\n");
-        goto err;
-    }
-
-err:
-    if ( frame_list )
-        xc_hypercall_buffer_free(xch, frame_list);
-    if ( pfn_list )
-        free(pfn_list);
-
-    return gnt;
-}
-
-grant_entry_v1_t *xc_gnttab_map_table_v1(xc_interface *xch, int domid,
-                                         int *gnt_num)
-{
-    if (xc_gnttab_get_version(xch, domid) == 2)
-        return NULL;
-    return _gnttab_map_table(xch, domid, gnt_num);
-}
-
-grant_entry_v2_t *xc_gnttab_map_table_v2(xc_interface *xch, int domid,
-                                         int *gnt_num)
-{
-    if (xc_gnttab_get_version(xch, domid) != 2)
-        return NULL;
-    return _gnttab_map_table(xch, domid, gnt_num);
-}
-
 /*
  * Local variables:
  * mode: C
diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/xc_minios.c
--- a/tools/libxc/xc_minios.c   Fri Dec 03 09:36:46 2010 +0000
+++ b/tools/libxc/xc_minios.c   Fri Dec 03 09:36:46 2010 +0000
@@ -457,18 +457,6 @@ int xc_gnttab_set_max_grants(xc_interfac
     return ret;
 }
 
-grant_entry_v1_t *xc_gnttab_map_table_v1(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}
-
-grant_entry_v2_t *xc_gnttab_map_table_v2(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}
-
 /*
  * Local variables:
  * mode: C
diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/xc_netbsd.c
--- a/tools/libxc/xc_netbsd.c   Fri Dec 03 09:36:46 2010 +0000
+++ b/tools/libxc/xc_netbsd.c   Fri Dec 03 09:36:46 2010 +0000
@@ -287,18 +287,6 @@ void discard_file_cache(xc_interface *xc
     }
 }
 
-grant_entry_v1_t *xc_gnttab_map_table_v1(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}
-
-grant_entry_v2_t *xc_gnttab_map_table_v2(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}
-
 /*
  * Local variables:
  * mode: C
diff -r 9a40ab7a4347 -r 7c6e87f167d4 tools/libxc/xc_solaris.c
--- a/tools/libxc/xc_solaris.c  Fri Dec 03 09:36:46 2010 +0000
+++ b/tools/libxc/xc_solaris.c  Fri Dec 03 09:36:46 2010 +0000
@@ -261,15 +261,3 @@ void discard_file_cache(xc_interface *xc
 {
     // TODO: Implement for Solaris!
 }
-
-grant_entry_v1_t *xc_gnttab_map_table_v1(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}
-
-grant_entry_v2_t *xc_gnttab_map_table_v2(
-    xc_interface *xch, int domid, int *gnt_num)
-{
-    return NULL;
-}

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