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-changelog

[Xen-changelog] Fix grant-table interface by removing the unnecessary un

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Fix grant-table interface by removing the unnecessary union.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 04 Jul 2005 11:36:11 -0400
Delivery-date: Mon, 04 Jul 2005 15:36:36 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID abc0a8f65be79d8a82d5a17bf3e44d4d49115554
# Parent  e1fbb7fee1d8e9f944b32fe427d342103a1c916e

Fix grant-table interface by removing the unnecessary union.
This fixes a domU crash introduced over the weekend.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r e1fbb7fee1d8 -r abc0a8f65be7 xen/include/public/grant_table.h
--- a/xen/include/public/grant_table.h  Mon Jul  4 15:01:22 2005
+++ b/xen/include/public/grant_table.h  Mon Jul  4 15:34:57 2005
@@ -259,13 +259,4 @@
     "permission denied"                         \
 }
 
-typedef struct gnttab_op {
-    union {
-        gnttab_map_grant_ref_t    map_grant_ref;
-        gnttab_unmap_grant_ref_t  unmap_grant_ref;
-        gnttab_setup_table_t      setup_table;
-        gnttab_dump_table_t       dump_table;
-    } u;
-} gnttab_op_t;
-
 #endif /* __XEN_PUBLIC_GRANT_TABLE_H__ */
diff -r e1fbb7fee1d8 -r abc0a8f65be7 
linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c     Mon Jul  4 
15:01:22 2005
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c     Mon Jul  4 
15:34:57 2005
@@ -116,23 +116,23 @@
 static void fast_flush_area(int idx, int nr_pages)
 {
 #ifdef CONFIG_XEN_BLKDEV_GRANT
-    gnttab_op_t       aop[BLKIF_MAX_SEGMENTS_PER_REQUEST];
-    unsigned int      i, invcount = 0;
-    u16               handle;
+    struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+    unsigned int i, invcount = 0;
+    u16 handle;
 
     for ( i = 0; i < nr_pages; i++ )
     {
         if ( BLKBACK_INVALID_HANDLE != ( handle = pending_handle(idx, i) ) )
         {
-            aop[i].u.unmap_grant_ref.host_virt_addr = MMAP_VADDR(idx, i);
-            aop[i].u.unmap_grant_ref.dev_bus_addr   = 0;
-            aop[i].u.unmap_grant_ref.handle         = handle;
+            unmap[i].host_virt_addr = MMAP_VADDR(idx, i);
+            unmap[i].dev_bus_addr   = 0;
+            unmap[i].handle         = handle;
             pending_handle(idx, i) = BLKBACK_INVALID_HANDLE;
             invcount++;
         }
     }
     if ( unlikely(HYPERVISOR_grant_table_op(
-                    GNTTABOP_unmap_grant_ref, aop, invcount)))
+                    GNTTABOP_unmap_grant_ref, unmap, invcount)))
         BUG();
 #else
 
@@ -387,21 +387,21 @@
 
 #ifdef CONFIG_XEN_BLKDEV_GRANT
     {
-        gnttab_op_t     op;
-
-        op.u.map_grant_ref.host_virt_addr = MMAP_VADDR(pending_idx, 0);
-        op.u.map_grant_ref.flags = GNTMAP_host_map;
-        op.u.map_grant_ref.ref = blkif_gref_from_fas(req->frame_and_sects[0]);
-        op.u.map_grant_ref.dom = blkif->domid;
+        struct gnttab_map_grant_ref map;
+
+        map.host_virt_addr = MMAP_VADDR(pending_idx, 0);
+        map.flags = GNTMAP_host_map;
+        map.ref = blkif_gref_from_fas(req->frame_and_sects[0]);
+        map.dom = blkif->domid;
 
         if ( unlikely(HYPERVISOR_grant_table_op(
-                        GNTTABOP_map_grant_ref, &op, 1)))
+                        GNTTABOP_map_grant_ref, &map, 1)))
             BUG();
 
-        if ( op.u.map_grant_ref.handle < 0 )
+        if ( map.handle < 0 )
             goto out;
 
-        pending_handle(pending_idx, 0) = op.u.map_grant_ref.handle;
+        pending_handle(pending_idx, 0) = map.handle;
     }
 #else /* else CONFIG_XEN_BLKDEV_GRANT */
 
@@ -445,7 +445,7 @@
     int i, pending_idx = pending_ring[MASK_PEND_IDX(pending_cons)];
     pending_req_t *pending_req;
 #ifdef CONFIG_XEN_BLKDEV_GRANT
-    gnttab_op_t       aop[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+    struct gnttab_map_grant_ref map[BLKIF_MAX_SEGMENTS_PER_REQUEST];
 #else
     unsigned long remap_prot;
     multicall_entry_t mcl[BLKIF_MAX_SEGMENTS_PER_REQUEST];
@@ -486,21 +486,21 @@
             goto bad_descriptor;
         preq.nr_sects += seg[i].nsec;
 
-        aop[i].u.map_grant_ref.host_virt_addr = MMAP_VADDR(pending_idx, i);
-        aop[i].u.map_grant_ref.dom = blkif->domid;
-        aop[i].u.map_grant_ref.ref = blkif_gref_from_fas(fas);
-        aop[i].u.map_grant_ref.flags = GNTMAP_host_map;
+        map[i].host_virt_addr = MMAP_VADDR(pending_idx, i);
+        map[i].dom = blkif->domid;
+        map[i].ref = blkif_gref_from_fas(fas);
+        map[i].flags = GNTMAP_host_map;
         if ( operation == WRITE )
-            aop[i].u.map_grant_ref.flags |= GNTMAP_readonly;
+            map[i].flags |= GNTMAP_readonly;
     }
 
     if ( unlikely(HYPERVISOR_grant_table_op(
-                    GNTTABOP_map_grant_ref, aop, nseg)))
+                    GNTTABOP_map_grant_ref, map, nseg)))
         BUG();
 
     for ( i = 0; i < nseg; i++ )
     {
-        if ( unlikely(aop[i].u.map_grant_ref.handle < 0) )
+        if ( unlikely(map[i].handle < 0) )
         {
             DPRINTK("invalid buffer -- could not remap it\n");
             fast_flush_area(pending_idx, nseg);
@@ -508,9 +508,9 @@
         }
 
         phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] =
-            FOREIGN_FRAME(aop[i].u.map_grant_ref.dev_bus_addr);
-
-        pending_handle(pending_idx, i) = aop[i].u.map_grant_ref.handle;
+            FOREIGN_FRAME(map[i].dev_bus_addr);
+
+        pending_handle(pending_idx, i) = map[i].handle;
     }
 #endif
 
@@ -518,7 +518,7 @@
     {
         fas         = req->frame_and_sects[i];
 #ifdef CONFIG_XEN_BLKDEV_GRANT
-        seg[i].buf  = (aop[i].u.map_grant_ref.dev_bus_addr << PAGE_SHIFT) |
+        seg[i].buf  = (map[i].dev_bus_addr << PAGE_SHIFT) |
                       (blkif_first_sect(fas) << 9);
 #else
         seg[i].buf  = (fas & PAGE_MASK) | (blkif_first_sect(fas) << 9);
diff -r e1fbb7fee1d8 -r abc0a8f65be7 tools/libxc/xc_gnttab.c
--- a/tools/libxc/xc_gnttab.c   Mon Jul  4 15:01:22 2005
+++ b/tools/libxc/xc_gnttab.c   Mon Jul  4 15:34:57 2005
@@ -11,20 +11,20 @@
 #include "xen/grant_table.h"
 
 static int
-do_gnttab_op( int xc_handle,
-              unsigned long cmd,
-              gnttab_op_t *op,
-              unsigned long count )
+do_gnttab_op(int xc_handle,
+             unsigned long cmd,
+             void *op,
+             unsigned long count)
 {
     int ret = -1;
     privcmd_hypercall_t hypercall;
 
     hypercall.op     = __HYPERVISOR_grant_table_op;
     hypercall.arg[0] = cmd;
-    hypercall.arg[1] = (unsigned long)(op);
+    hypercall.arg[1] = (unsigned long)op;
     hypercall.arg[2] = count;
 
-    if ( mlock(op, sizeof(*op)) != 0 )
+    if ( mlock(op, 64) )
     {
         PERROR("do_gnttab_op: op mlock failed");
         goto out;
@@ -33,7 +33,7 @@
     if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0 )
         ERROR("do_gnttab_op: HYPERVISOR_grant_table_op failed: %d", ret);
 
-    safe_munlock(op, sizeof(*op));
+    safe_munlock(op, 64);
  out:
     return ret;
 }
@@ -47,18 +47,19 @@
                             s16        *handle,
                             memory_t   *dev_bus_addr)
 {
-    gnttab_op_t     op;
-    int             rc;
+    struct gnttab_map_grant_ref op;
+    int rc;
 
-    op.u.map_grant_ref.host_virt_addr = host_virt_addr;
-    op.u.map_grant_ref.dom            = (domid_t)dom;
-    op.u.map_grant_ref.ref            = ref;
-    op.u.map_grant_ref.flags          = flags;
+    op.host_virt_addr = host_virt_addr;
+    op.dom            = (domid_t)dom;
+    op.ref            = ref;
+    op.flags          = flags;
  
-    if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_map_grant_ref, &op, 1)) == 0 )
+    if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_map_grant_ref,
+                            &op, 1)) == 0 )
     {
-        *handle         = op.u.map_grant_ref.handle;
-        *dev_bus_addr   = op.u.map_grant_ref.dev_bus_addr;
+        *handle         = op.handle;
+        *dev_bus_addr   = op.dev_bus_addr;
     }
 
     return rc;
@@ -71,15 +72,18 @@
                               u16       handle,
                               s16      *status)
 {
-    gnttab_op_t     op;
-    int             rc;
+    struct gnttab_unmap_grant_ref op;
+    int rc;
 
-    op.u.unmap_grant_ref.host_virt_addr = host_virt_addr;
-    op.u.unmap_grant_ref.dev_bus_addr   = dev_bus_addr;
-    op.u.unmap_grant_ref.handle         = handle;
+    op.host_virt_addr = host_virt_addr;
+    op.dev_bus_addr   = dev_bus_addr;
+    op.handle         = handle;
  
-    if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_unmap_grant_ref, &op, 1)) == 0 
)
-        *status = op.u.unmap_grant_ref.status;
+    if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_unmap_grant_ref,
+                            &op, 1)) == 0 )
+    {
+        *status = op.status;
+    }
 
     return rc;
 }
@@ -90,20 +94,17 @@
                           s16       *status,
                           memory_t **frame_list)
 {
-    gnttab_op_t     op;
-    int             rc;
-    int             i;
+    struct gnttab_setup_table op;
+    int rc, i;
 
-    op.u.setup_table.dom        = (domid_t)dom;
-    op.u.setup_table.nr_frames  = nr_frames;
+    op.dom       = (domid_t)dom;
+    op.nr_frames = nr_frames;
  
     if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_setup_table, &op, 1)) == 0 )
     {
-        *status = op.u.setup_table.status;
+        *status = op.status;
         for ( i = 0; i < nr_frames; i++ )
-        {
-            (*frame_list)[i] = op.u.setup_table.frame_list[i];
-        }
+            (*frame_list)[i] = op.frame_list[i];
     }
 
     return rc;
@@ -113,15 +114,13 @@
                          u32        dom,
                          s16       *status)
 {
-    gnttab_op_t     op;
-    int             rc;
+    struct gnttab_dump_table op;
+    int rc;
 
-    op.u.dump_table.dom = (domid_t)dom;
- 
-    printf("xc_gnttab_dump_table: domain %d\n", dom);
+    op.dom = (domid_t)dom;
 
     if ( (rc = do_gnttab_op(xc_handle, GNTTABOP_dump_table, &op, 1)) == 0 )
-        *status = op.u.dump_table.status;
+        *status = op.status;
 
     return rc;
 }

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fix grant-table interface by removing the unnecessary union., Xen patchbot -unstable <=