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

[Xen-changelog] [xen-unstable] Make domctl/sysctl interfaces 32-/64-bit invariant.



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1169656399 0
# Node ID 30af6cfdb05c6e56b3024e8be4abb3a10fc41297
# Parent  a94363b85e192540bf94c4da60adcf4176ecbdd0
Make domctl/sysctl interfaces 32-/64-bit invariant.
This kills off a fair amount of unpleasant CONFIG_COMPAT shimming and
avoids needing to keep the compat paths in sync as these interfaces
continue to develop.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/x86_64/domctl.c             |  111 -----------------------
 xen/arch/x86/x86_64/sysctl.c             |   33 ------
 xen/common/compat/domctl.c               |  137 ----------------------------
 xen/common/compat/sysctl.c               |   95 -------------------
 tools/libxc/ia64/xc_ia64_stubs.c         |    8 +
 tools/libxc/powerpc64/utils.c            |    2 
 tools/libxc/xc_core.c                    |    8 -
 tools/libxc/xc_domain.c                  |    3 
 tools/libxc/xc_linux_save.c              |   12 +-
 tools/libxc/xc_private.c                 |   29 +-----
 tools/libxc/xc_ptrace.c                  |    8 -
 tools/libxc/xc_resume.c                  |    2 
 tools/libxc/xenctrl.h                    |    4 
 xen/arch/ia64/xen/dom0_ops.c             |    2 
 xen/arch/ia64/xen/domain.c               |   30 +++---
 xen/arch/powerpc/domctl.c                |    2 
 xen/arch/x86/domctl.c                    |   74 +++++----------
 xen/arch/x86/mm/shadow/common.c          |   13 +-
 xen/arch/x86/sysctl.c                    |    8 -
 xen/arch/x86/x86_64/Makefile             |    2 
 xen/arch/x86/x86_64/compat/entry.S       |    7 +
 xen/common/compat/Makefile               |    4 
 xen/common/domain.c                      |   72 --------------
 xen/common/domctl.c                      |  149 +++++++++++++------------------
 xen/common/sysctl.c                      |   15 +--
 xen/include/Makefile                     |    2 
 xen/include/public/arch-x86/xen-x86_32.h |   19 +++
 xen/include/public/arch-x86/xen.h        |   12 +-
 xen/include/public/domctl.h              |   67 ++++++-------
 xen/include/public/sysctl.h              |   18 +--
 xen/include/public/xen.h                 |   10 ++
 xen/include/xen/domain.h                 |    6 -
 xen/include/xen/sched.h                  |    7 -
 xen/include/xlat.lst                     |    7 -
 34 files changed, 234 insertions(+), 744 deletions(-)

diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/ia64/xc_ia64_stubs.c
--- a/tools/libxc/ia64/xc_ia64_stubs.c  Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/ia64/xc_ia64_stubs.c  Wed Jan 24 16:33:19 2007 +0000
@@ -74,10 +74,11 @@ xc_ia64_get_pfn_list(int xc_handle, uint
 }
 
 int
-xc_get_pfn_list(int xc_handle, uint32_t domid, xen_pfn_t *pfn_buf,
+xc_get_pfn_list(int xc_handle, uint32_t domid, uint64_t *pfn_buf,
                 unsigned long max_pfns)
 {
-    return xc_ia64_get_pfn_list (xc_handle, domid, pfn_buf, 0, max_pfns);
+    return xc_ia64_get_pfn_list(xc_handle, domid, (xen_pfn_t *)pfn_buf,
+                                0, max_pfns);
 }
 
 long
@@ -86,7 +87,8 @@ xc_get_max_pages(int xc_handle, uint32_t
     struct xen_domctl domctl;
     domctl.cmd = XEN_DOMCTL_getdomaininfo;
     domctl.domain = (domid_t)domid;
-    return (do_domctl(xc_handle, &domctl) < 0) ? -1 : 
domctl.u.getdomaininfo.max_pages;
+    return ((do_domctl(xc_handle, &domctl) < 0)
+            ? -1 : domctl.u.getdomaininfo.max_pages);
 }
 
 /*
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/powerpc64/utils.c
--- a/tools/libxc/powerpc64/utils.c     Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/powerpc64/utils.c     Wed Jan 24 16:33:19 2007 +0000
@@ -76,7 +76,7 @@ int get_rma_page_array(int xc_handle, in
     DPRINTF("xc_get_pfn_list\n");
     /* We know that the RMA is machine contiguous so lets just get the
      * first MFN and fill the rest in ourselves */
-    rc = xc_get_pfn_list(xc_handle, domid, *page_array, 1);
+    rc = xc_get_pfn_list(xc_handle, domid, (uint64_t *)*page_array, 1);
     if (rc == -1) {
         perror("Could not get the page frame list");
         return -1;
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_core.c
--- a/tools/libxc/xc_core.c     Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_core.c     Wed Jan 24 16:33:19 2007 +0000
@@ -28,7 +28,7 @@ xc_domain_dumpcore_via_callback(int xc_h
                                 dumpcore_rtn_t dump_rtn)
 {
     unsigned long nr_pages;
-    xen_pfn_t *page_array = NULL;
+    uint64_t *page_array = NULL;
     xc_dominfo_t info;
     int i, nr_vcpus = 0;
     char *dump_mem, *dump_mem_start = NULL;
@@ -70,7 +70,7 @@ xc_domain_dumpcore_via_callback(int xc_h
         sizeof(vcpu_guest_context_t)*nr_vcpus;
     dummy_len = (sizeof(struct xc_core_header) +
                  (sizeof(vcpu_guest_context_t) * nr_vcpus) +
-                 (nr_pages * sizeof(xen_pfn_t)));
+                 (nr_pages * sizeof(*page_array)));
     header.xch_pages_offset = round_pgup(dummy_len);
 
     sts = dump_rtn(args, (char *)&header, sizeof(struct xc_core_header));
@@ -81,7 +81,7 @@ xc_domain_dumpcore_via_callback(int xc_h
     if ( sts != 0 )
         goto error_out;
 
-    if ( (page_array = malloc(nr_pages * sizeof(xen_pfn_t))) == NULL )
+    if ( (page_array = malloc(nr_pages * sizeof(*page_array))) == NULL )
     {
         IPRINTF("Could not allocate memory\n");
         goto error_out;
@@ -91,7 +91,7 @@ xc_domain_dumpcore_via_callback(int xc_h
         IPRINTF("Could not get the page frame list\n");
         goto error_out;
     }
-    sts = dump_rtn(args, (char *)page_array, nr_pages * sizeof(xen_pfn_t));
+    sts = dump_rtn(args, (char *)page_array, nr_pages * sizeof(*page_array));
     if ( sts != 0 )
         goto error_out;
 
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c   Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_domain.c   Wed Jan 24 16:33:19 2007 +0000
@@ -323,7 +323,8 @@ int xc_shadow_control(int xc_handle,
     domctl.u.shadow_op.pages  = pages;
     domctl.u.shadow_op.mb     = mb ? *mb : 0;
     domctl.u.shadow_op.mode   = mode;
-    set_xen_guest_handle(domctl.u.shadow_op.dirty_bitmap, dirty_bitmap);
+    set_xen_guest_handle(domctl.u.shadow_op.dirty_bitmap,
+                         (uint8_t *)dirty_bitmap);
 
     rc = do_domctl(xc_handle, &domctl);
 
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_linux_save.c       Wed Jan 24 16:33:19 2007 +0000
@@ -811,8 +811,8 @@ int xc_linux_save(int xc_handle, int io_
     analysis_phase(xc_handle, dom, max_pfn, to_skip, 0);
 
     /* We want zeroed memory so use calloc rather than malloc. */
-    pfn_type  = calloc(MAX_BATCH_SIZE, sizeof(*pfn_type));
-    pfn_batch = calloc(MAX_BATCH_SIZE, sizeof(*pfn_batch));
+    pfn_type   = calloc(MAX_BATCH_SIZE, sizeof(*pfn_type));
+    pfn_batch  = calloc(MAX_BATCH_SIZE, sizeof(*pfn_batch));
 
     if ((pfn_type == NULL) || (pfn_batch == NULL)) {
         ERROR("failed to alloc memory for pfn_type and/or pfn_batch arrays");
@@ -976,10 +976,16 @@ int xc_linux_save(int xc_handle, int io_
                 goto out;
             }
 
-            if (xc_get_pfn_type_batch(xc_handle, dom, batch, pfn_type)) {
+            for ( j = 0; j < batch; j++ )
+                ((uint32_t *)pfn_type)[i] = pfn_type[i];
+            if ( xc_get_pfn_type_batch(xc_handle, dom, batch,
+                                       (uint32_t *)pfn_type) )
+            {
                 ERROR("get_pfn_type_batch failed");
                 goto out;
             }
+            for ( j = batch-1; j >= 0; j-- )
+                pfn_type[i] = ((uint32_t *)pfn_type)[i];
 
             for ( j = 0; j < batch; j++ )
             {
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_private.c  Wed Jan 24 16:33:19 2007 +0000
@@ -102,7 +102,7 @@ void unlock_pages(void *addr, size_t len
 
 /* NB: arr must be locked */
 int xc_get_pfn_type_batch(int xc_handle,
-                          uint32_t dom, int num, unsigned long *arr)
+                          uint32_t dom, int num, uint32_t *arr)
 {
     DECLARE_DOMCTL;
     domctl.cmd = XEN_DOMCTL_getpageframeinfo2;
@@ -309,7 +309,7 @@ long long xc_domain_get_cpu_usage( int x
 #ifndef __ia64__
 int xc_get_pfn_list(int xc_handle,
                     uint32_t domid,
-                    xen_pfn_t *pfn_buf,
+                    uint64_t *pfn_buf,
                     unsigned long max_pfns)
 {
     DECLARE_DOMCTL;
@@ -320,10 +320,10 @@ int xc_get_pfn_list(int xc_handle,
     set_xen_guest_handle(domctl.u.getmemlist.buffer, pfn_buf);
 
 #ifdef VALGRIND
-    memset(pfn_buf, 0, max_pfns * sizeof(xen_pfn_t));
-#endif
-
-    if ( lock_pages(pfn_buf, max_pfns * sizeof(xen_pfn_t)) != 0 )
+    memset(pfn_buf, 0, max_pfns * sizeof(*pfn_buf));
+#endif
+
+    if ( lock_pages(pfn_buf, max_pfns * sizeof(*pfn_buf)) != 0 )
     {
         PERROR("xc_get_pfn_list: pfn_buf lock failed");
         return -1;
@@ -331,22 +331,7 @@ int xc_get_pfn_list(int xc_handle,
 
     ret = do_domctl(xc_handle, &domctl);
 
-    unlock_pages(pfn_buf, max_pfns * sizeof(xen_pfn_t));
-
-#if 0
-#ifdef DEBUG
-    DPRINTF(("Ret for xc_get_pfn_list is %d\n", ret));
-    if (ret >= 0) {
-        int i, j;
-        for (i = 0; i < domctl.u.getmemlist.num_pfns; i += 16) {
-            DPRINTF("0x%x: ", i);
-            for (j = 0; j < 16; j++)
-                DPRINTF("0x%lx ", pfn_buf[i + j]);
-            DPRINTF("\n");
-        }
-    }
-#endif
-#endif
+    unlock_pages(pfn_buf, max_pfns * sizeof(*pfn_buf));
 
     return (ret < 0) ? -1 : domctl.u.getmemlist.num_pfns;
 }
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_ptrace.c
--- a/tools/libxc/xc_ptrace.c   Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_ptrace.c   Wed Jan 24 16:33:19 2007 +0000
@@ -153,8 +153,8 @@ online_vcpus_changed(uint64_t cpumap)
 
 /* --------------------- */
 /* XXX application state */
-static long                     nr_pages = 0;
-static unsigned long           *page_array = NULL;
+static long      nr_pages = 0;
+static uint64_t *page_array = NULL;
 
 
 /*
@@ -170,7 +170,7 @@ to_ma(int cpu, uint64_t maddr)
 to_ma(int cpu, uint64_t maddr)
 {
     if ( current_is_hvm && paging_enabled(&ctxt[cpu]) )
-        maddr = (uint64_t)page_array[maddr >> PAGE_SHIFT] << PAGE_SHIFT;
+        maddr = page_array[maddr >> PAGE_SHIFT] << PAGE_SHIFT;
     return maddr;
 }
 
@@ -360,7 +360,7 @@ map_domain_va(
         if ( nr_pages > 0 )
             free(page_array);
         nr_pages = npgs;
-        if ( (page_array = malloc(nr_pages * sizeof(unsigned long))) == NULL )
+        if ( (page_array = malloc(nr_pages * sizeof(*page_array))) == NULL )
         {
             IPRINTF("Could not allocate memory\n");
             return NULL;
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xc_resume.c
--- a/tools/libxc/xc_resume.c   Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xc_resume.c   Wed Jan 24 16:33:19 2007 +0000
@@ -58,7 +58,7 @@ static int xc_domain_resume_any(int xc_h
     if ( xc_domain_getinfo(xc_handle, domid, 1, &info) != 1 )
     {
         PERROR("Could not get domain info");
-        goto out;
+        return rc;
     }
 
     /*
diff -r a94363b85e19 -r 30af6cfdb05c tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Wed Jan 24 15:59:09 2007 +0000
+++ b/tools/libxc/xenctrl.h     Wed Jan 24 16:33:19 2007 +0000
@@ -552,7 +552,7 @@ unsigned long xc_translate_foreign_addre
 unsigned long xc_translate_foreign_address(int xc_handle, uint32_t dom,
                                            int vcpu, unsigned long long virt);
 
-int xc_get_pfn_list(int xc_handle, uint32_t domid, xen_pfn_t *pfn_buf,
+int xc_get_pfn_list(int xc_handle, uint32_t domid, uint64_t *pfn_buf,
                     unsigned long max_pfns);
 
 unsigned long xc_ia64_fpsr_default(void);
@@ -575,7 +575,7 @@ int xc_memory_op(int xc_handle, int cmd,
 int xc_memory_op(int xc_handle, int cmd, void *arg);
 
 int xc_get_pfn_type_batch(int xc_handle, uint32_t dom,
-                          int num, unsigned long *arr);
+                          int num, uint32_t *arr);
 
 
 /* Get current total pages allocated to a domain. */
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c      Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/ia64/xen/dom0_ops.c      Wed Jan 24 16:33:19 2007 +0000
@@ -43,7 +43,7 @@ long arch_do_domctl(xen_domctl_t *op, XE
         struct domain *d = find_domain_by_id(op->domain);
         unsigned long start_page = op->u.getmemlist.start_pfn;
         unsigned long nr_pages = op->u.getmemlist.max_pfns;
-        unsigned long mfn;
+        uint64_t mfn;
 
         if ( d == NULL ) {
             ret = -EINVAL;
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/ia64/xen/domain.c        Wed Jan 24 16:33:19 2007 +0000
@@ -717,7 +717,7 @@ domain_set_shared_info_va (unsigned long
 }
 
 /* Transfer and clear the shadow bitmap in 1kB chunks for L1 cache. */
-#define SHADOW_COPY_CHUNK (1024 / sizeof (unsigned long))
+#define SHADOW_COPY_CHUNK 1024
 
 int shadow_mode_control(struct domain *d, xen_domctl_shadow_op_t *sc)
 {
@@ -785,7 +785,7 @@ int shadow_mode_control(struct domain *d
 
        case XEN_DOMCTL_SHADOW_OP_CLEAN:
          {
-               int nbr_longs;
+               int nbr_bytes;
 
                sc->stats.fault_count = 
atomic64_read(&d->arch.shadow_fault_count);
                sc->stats.dirty_count = 
atomic64_read(&d->arch.shadow_dirty_count);
@@ -802,21 +802,21 @@ int shadow_mode_control(struct domain *d
                if (sc->pages > d->arch.shadow_bitmap_size)
                        sc->pages = d->arch.shadow_bitmap_size; 
 
-               nbr_longs = (sc->pages + BITS_PER_LONG - 1) / BITS_PER_LONG;
-
-               for (i = 0; i < nbr_longs; i += SHADOW_COPY_CHUNK) {
-                       int size = (nbr_longs - i) > SHADOW_COPY_CHUNK ?
-                                  SHADOW_COPY_CHUNK : nbr_longs - i;
+               nbr_bytes = (sc->pages + 7) / 8;
+
+               for (i = 0; i < nbr_bytes; i += SHADOW_COPY_CHUNK) {
+                       int size = (nbr_bytes - i) > SHADOW_COPY_CHUNK ?
+                                  SHADOW_COPY_CHUNK : nbr_bytes - i;
      
-                       if (copy_to_guest_offset(sc->dirty_bitmap, i,
-                                                d->arch.shadow_bitmap + i,
-                                                size)) {
+                       if (copy_to_guest_offset(
+                            sc->dirty_bitmap, i,
+                            (uint8_t *)d->arch.shadow_bitmap + i,
+                            size)) {
                                rc = -EFAULT;
                                break;
                        }
 
-                       memset(d->arch.shadow_bitmap + i,
-                              0, size * sizeof(unsigned long));
+                       memset((uint8_t *)d->arch.shadow_bitmap + i, 0, size);
                }
                
                break;
@@ -838,9 +838,9 @@ int shadow_mode_control(struct domain *d
                if (sc->pages > d->arch.shadow_bitmap_size)
                        sc->pages = d->arch.shadow_bitmap_size; 
 
-               size = (sc->pages + BITS_PER_LONG - 1) / BITS_PER_LONG;
-               if (copy_to_guest(sc->dirty_bitmap, 
-                                 d->arch.shadow_bitmap, size)) {
+               size = (sc->pages + 7) / 8;
+               if (copy_to_guest(sc->dirty_bitmap,
+                                 (uint8_t *)d->arch.shadow_bitmap, size)) {
                        rc = -EFAULT;
                        break;
                }
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/powerpc/domctl.c
--- a/xen/arch/powerpc/domctl.c Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/powerpc/domctl.c Wed Jan 24 16:33:19 2007 +0000
@@ -49,7 +49,7 @@ long arch_do_domctl(struct xen_domctl *d
         int i;
         struct domain *d = find_domain_by_id(domctl->domain);
         unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
-        xen_pfn_t mfn;
+        uint64_t mfn;
         struct list_head *list_ent;
 
         ret = -EINVAL;
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/domctl.c
--- a/xen/arch/x86/domctl.c     Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/x86/domctl.c     Wed Jan 24 16:33:19 2007 +0000
@@ -24,21 +24,12 @@
 #include <asm/hvm/support.h>
 #include <asm/processor.h>
 #include <public/hvm/e820.h>
-#ifdef CONFIG_COMPAT
-#include <compat/xen.h>
-#endif
-
-#ifndef COMPAT
-#define _long                long
-#define copy_from_xxx_offset copy_from_guest_offset
-#define copy_to_xxx_offset   copy_to_guest_offset
-#endif
-
-_long arch_do_domctl(
+
+long arch_do_domctl(
     struct xen_domctl *domctl,
     XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
 {
-    _long ret = 0;
+    long ret = 0;
 
     switch ( domctl->cmd )
     {
@@ -135,12 +126,11 @@ _long arch_do_domctl(
 
     case XEN_DOMCTL_getpageframeinfo2:
     {
-#define GPF2_BATCH (PAGE_SIZE / sizeof(_long))
         int n,j;
         int num = domctl->u.getpageframeinfo2.num;
         domid_t dom = domctl->domain;
         struct domain *d;
-        unsigned _long *l_arr;
+        uint32_t *arr32;
         ret = -ESRCH;
 
         if ( unlikely((d = find_domain_by_id(dom)) == NULL) )
@@ -153,16 +143,18 @@ _long arch_do_domctl(
             break;
         }
 
-        l_arr = alloc_xenheap_page();
+        arr32 = alloc_xenheap_page();
  
         ret = 0;
         for ( n = 0; n < num; )
         {
-            int k = ((num-n)>GPF2_BATCH)?GPF2_BATCH:(num-n);
-
-            if ( copy_from_xxx_offset(l_arr,
-                                      domctl->u.getpageframeinfo2.array,
-                                      n, k) )
+            int k = PAGE_SIZE / 4;
+            if ( (num - n) < k )
+                k = num - n;
+
+            if ( copy_from_guest_offset(arr32,
+                                        domctl->u.getpageframeinfo2.array,
+                                        n, k) )
             {
                 ret = -EINVAL;
                 break;
@@ -171,13 +163,13 @@ _long arch_do_domctl(
             for ( j = 0; j < k; j++ )
             {      
                 struct page_info *page;
-                unsigned _long mfn = l_arr[j];
+                unsigned long mfn = arr32[j];
 
                 page = mfn_to_page(mfn);
 
                 if ( likely(mfn_valid(mfn) && get_page(page, d)) ) 
                 {
-                    unsigned _long type = 0;
+                    unsigned long type = 0;
 
                     switch( page->u.inuse.type_info & PGT_type_mask )
                     {
@@ -197,16 +189,16 @@ _long arch_do_domctl(
 
                     if ( page->u.inuse.type_info & PGT_pinned )
                         type |= XEN_DOMCTL_PFINFO_LPINTAB;
-                    l_arr[j] |= type;
+                    arr32[j] |= type;
                     put_page(page);
                 }
                 else
-                    l_arr[j] |= XEN_DOMCTL_PFINFO_XTAB;
-
-            }
-
-            if ( copy_to_xxx_offset(domctl->u.getpageframeinfo2.array,
-                                    n, l_arr, k) )
+                    arr32[j] |= XEN_DOMCTL_PFINFO_XTAB;
+
+            }
+
+            if ( copy_to_guest_offset(domctl->u.getpageframeinfo2.array,
+                                      n, arr32, k) )
             {
                 ret = -EINVAL;
                 break;
@@ -215,7 +207,7 @@ _long arch_do_domctl(
             n += k;
         }
 
-        free_xenheap_page(l_arr);
+        free_xenheap_page(arr32);
 
         put_domain(d);
     }
@@ -226,7 +218,7 @@ _long arch_do_domctl(
         int i;
         struct domain *d = find_domain_by_id(domctl->domain);
         unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
-        xen_pfn_t mfn;
+        uint64_t mfn;
         struct list_head *list_ent;
 
         ret = -EINVAL;
@@ -241,8 +233,8 @@ _long arch_do_domctl(
             {
                 mfn = page_to_mfn(list_entry(
                     list_ent, struct page_info, list));
-                if ( copy_to_xxx_offset(domctl->u.getmemlist.buffer,
-                                        i, &mfn, 1) )
+                if ( copy_to_guest_offset(domctl->u.getmemlist.buffer,
+                                          i, &mfn, 1) )
                 {
                     ret = -EFAULT;
                     break;
@@ -311,13 +303,7 @@ _long arch_do_domctl(
         
         ret = -EFAULT;
 
-#ifndef COMPAT
         if ( copy_from_guest(c, domctl->u.hvmcontext.ctxt, 1) != 0 )
-#else
-        if ( copy_from_guest(c,
-                             compat_handle_cast(domctl->u.hvmcontext.ctxt, 
void),
-                             1) != 0 )
-#endif
             goto sethvmcontext_out;
 
         ret = arch_sethvm_ctxt(v, c);
@@ -354,14 +340,8 @@ _long arch_do_domctl(
         if (arch_gethvm_ctxt(v, c) == -1)
             ret = -EFAULT;
 
-#ifndef COMPAT
         if ( copy_to_guest(domctl->u.hvmcontext.ctxt, c, 1) )
-#else
-        if ( copy_to_guest(compat_handle_cast(domctl->u.hvmcontext.ctxt,
-                                              void),
-                           c, 1) )
             ret = -EFAULT;
-#endif
 
         xfree(c);
 
@@ -382,7 +362,6 @@ _long arch_do_domctl(
     return ret;
 }
 
-#ifndef COMPAT
 void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
 {
 #ifdef CONFIG_COMPAT
@@ -396,9 +375,7 @@ void arch_get_info_guest(struct vcpu *v,
         memcpy(c.nat, &v->arch.guest_context, sizeof(*c.nat));
 #ifdef CONFIG_COMPAT
     else
-    {
         XLAT_vcpu_guest_context(c.cmp, &v->arch.guest_context);
-    }
 #endif
 
     if ( is_hvm_vcpu(v) )
@@ -446,7 +423,6 @@ void arch_get_info_guest(struct vcpu *v,
     c(vm_assist = v->domain->vm_assist);
 #undef c
 }
-#endif
 
 /*
  * Local variables:
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/mm/shadow/common.c
--- a/xen/arch/x86/mm/shadow/common.c   Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/x86/mm/shadow/common.c   Wed Jan 24 16:33:19 2007 +0000
@@ -3191,19 +3191,16 @@ static int shadow_log_dirty_op(
         if ( likely(peek) )
         {
             if ( copy_to_guest_offset(
-                     sc->dirty_bitmap,
-                     i/(8*sizeof(unsigned long)),
-                     d->arch.shadow.dirty_bitmap+(i/(8*sizeof(unsigned long))),
-                     (bytes+sizeof(unsigned long)-1) / sizeof(unsigned long)) )
+                sc->dirty_bitmap, i/8,
+                (uint8_t *)d->arch.shadow.dirty_bitmap + (i/8), bytes) )
             {
-                    rv = -EFAULT;
-                    goto out;
+                rv = -EFAULT;
+                goto out;
             }
         }
 
         if ( clean )
-            memset(d->arch.shadow.dirty_bitmap + (i/(8*sizeof(unsigned long))),
-                   0, bytes);
+            memset((uint8_t *)d->arch.shadow.dirty_bitmap + (i/8), 0, bytes);
     }
 #undef CHUNK
 
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/sysctl.c
--- a/xen/arch/x86/sysctl.c     Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/x86/sysctl.c     Wed Jan 24 16:33:19 2007 +0000
@@ -25,14 +25,10 @@
 #include <asm/hvm/support.h>
 #include <asm/processor.h>
 
-#ifndef COMPAT
-typedef long ret_t;
-#endif
-
-ret_t arch_do_sysctl(
+long arch_do_sysctl(
     struct xen_sysctl *sysctl, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
 {
-    ret_t ret = 0;
+    long ret = 0;
 
     switch ( sysctl->cmd )
     {
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/x86_64/Makefile
--- a/xen/arch/x86/x86_64/Makefile      Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/x86/x86_64/Makefile      Wed Jan 24 16:33:19 2007 +0000
@@ -5,10 +5,8 @@ obj-y += traps.o
 
 obj-$(CONFIG_COMPAT) += compat.o
 obj-$(CONFIG_COMPAT) += domain.o
-obj-$(CONFIG_COMPAT) += domctl.o
 obj-$(CONFIG_COMPAT) += physdev.o
 obj-$(CONFIG_COMPAT) += platform_hypercall.o
-obj-$(CONFIG_COMPAT) += sysctl.o
 
 ifeq ($(CONFIG_COMPAT),y)
 # extra dependencies
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S        Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S        Wed Jan 24 16:33:19 2007 +0000
@@ -276,6 +276,9 @@ CFIX14:
         .quad CFLT14,CFIX14
 .previous
 
+compat_domctl:
+compat_sysctl:
+
 .section .rodata, "a", @progbits
 
 ENTRY(compat_hypercall_table)
@@ -314,8 +317,8 @@ ENTRY(compat_hypercall_table)
         .quad do_event_channel_op
         .quad compat_physdev_op
         .quad do_hvm_op
-        .quad compat_sysctl             /* 35 */
-        .quad compat_domctl
+        .quad do_sysctl                 /* 35 */
+        .quad do_domctl
         .quad compat_kexec_op
         .rept NR_hypercalls-((.-compat_hypercall_table)/8)
         .quad compat_ni_hypercall
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/x86_64/domctl.c
--- a/xen/arch/x86/x86_64/domctl.c      Wed Jan 24 15:59:09 2007 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/******************************************************************************
- * Arch-specific compatibility domctl.c
- */
-
-#include <xen/config.h>
-#include <compat/domctl.h>
-#include <xen/guest_access.h>
-#include <asm/shadow.h>
-
-DEFINE_XEN_GUEST_HANDLE(compat_domctl_t);
-#define xen_domctl                     compat_domctl
-#define xen_domctl_t                   compat_domctl_t
-#define arch_do_domctl(x, h)           arch_compat_domctl(x, _##h)
-
-static int compat_shadow_domctl(struct domain *d,
-                                compat_domctl_shadow_op_t *csc,
-                                XEN_GUEST_HANDLE(void) u_domctl)
-{
-    xen_domctl_shadow_op_t nsc;
-    int rc, mode;
-
-#define XLAT_domctl_shadow_op_HNDL_dirty_bitmap(_d_, _s_) \
-    do \
-    { \
-        if ( (_s_)->op != XEN_DOMCTL_SHADOW_OP_CLEAN \
-             && (_s_)->op != XEN_DOMCTL_SHADOW_OP_PEEK ) \
-        { \
-            set_xen_guest_handle((_d_)->dirty_bitmap, NULL); \
-            mode = -1; \
-        } \
-        else if ( compat_handle_is_null((_s_)->dirty_bitmap) \
-                  || (((_s_)->pages - 1) \
-                      & (BITS_PER_LONG - COMPAT_BITS_PER_LONG)) \
-                     == BITS_PER_LONG - COMPAT_BITS_PER_LONG ) \
-        { \
-            XEN_GUEST_HANDLE(void) tmp; \
-            guest_from_compat_handle(tmp, (_s_)->dirty_bitmap); \
-            (_d_)->dirty_bitmap = guest_handle_cast(tmp, ulong); \
-            mode = 0; \
-        } \
-        else if ( (_s_)->pages > COMPAT_ARG_XLAT_SIZE * 8 ) \
-        { \
-            printk("Cannot translate compatibility mode 
XEN_DOMCTL_SHADOW_OP_{CLEAN,PEEK} (0x%lX)\n", \
-                   (_s_)->pages); \
-            return -E2BIG; \
-        } \
-        else \
-        { \
-            set_xen_guest_handle((_d_)->dirty_bitmap, \
-                                 (void 
*)COMPAT_ARG_XLAT_VIRT_START(current->vcpu_id)); \
-            mode = 1; \
-        } \
-    } while (0)
-    XLAT_domctl_shadow_op(&nsc, csc);
-#undef XLAT_domctl_shadow_op_HNDL_dirty_bitmap
-    rc = shadow_domctl(d, &nsc, u_domctl);
-    if ( rc != __HYPERVISOR_domctl )
-    {
-        BUG_ON(rc > 0);
-#define XLAT_domctl_shadow_op_HNDL_dirty_bitmap(_d_, _s_) \
-        do \
-        { \
-            if ( rc == 0 \
-                 && mode > 0 \
-                 && copy_to_compat((_d_)->dirty_bitmap, \
-                                   (unsigned int *)(_s_)->dirty_bitmap.p, \
-                                   ((_s_)->pages + COMPAT_BITS_PER_LONG - 1) / 
COMPAT_BITS_PER_LONG) ) \
-                rc = -EFAULT; \
-        } while (0)
-        XLAT_domctl_shadow_op(csc, &nsc);
-#undef XLAT_domctl_shadow_op_HNDL_dirty_bitmap
-    }
-    return rc;
-}
-#define xen_domctl_shadow_op           compat_domctl_shadow_op
-#define xen_domctl_shadow_op_t         compat_domctl_shadow_op_t
-#define shadow_domctl(d, sc, u)        compat_shadow_domctl(d, sc, u)
-
-#define xen_domctl_ioport_permission   compat_domctl_ioport_permission
-#define xen_domctl_ioport_permission_t compat_domctl_ioport_permission_t
-
-#define xen_domctl_getpageframeinfo    compat_domctl_getpageframeinfo
-#define xen_domctl_getpageframeinfo_t  compat_domctl_getpageframeinfo_t
-
-#define xen_domctl_getpageframeinfo2   compat_domctl_getpageframeinfo2
-#define xen_domctl_getpageframeinfo2_t compat_domctl_getpageframeinfo2_t
-
-#define xen_domctl_getmemlist          compat_domctl_getmemlist
-#define xen_domctl_getmemlist_t        compat_domctl_getmemlist_t
-#define xen_pfn_t                      compat_pfn_t
-
-#define xen_domctl_hypercall_init      compat_domctl_hypercall_init
-#define xen_domctl_hypercall_init_t    compat_domctl_hypercall_init_t
-
-#define COMPAT
-#define _XEN_GUEST_HANDLE(t)           XEN_GUEST_HANDLE(t)
-#define _long                          int
-#define copy_from_xxx_offset           copy_from_compat_offset
-#define copy_to_xxx_offset             copy_to_compat_offset
-
-#include "../domctl.c"
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff -r a94363b85e19 -r 30af6cfdb05c xen/arch/x86/x86_64/sysctl.c
--- a/xen/arch/x86/x86_64/sysctl.c      Wed Jan 24 15:59:09 2007 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/******************************************************************************
- * Arch-specific compatibility sysctl.c
- */
-
-#include <xen/config.h>
-#include <compat/sysctl.h>
-
-DEFINE_XEN_GUEST_HANDLE(compat_sysctl_t);
-#define xen_sysctl                    compat_sysctl
-#define xen_sysctl_t                  compat_sysctl_t
-#define arch_do_sysctl(x, h)          arch_compat_sysctl(x, _##h)
-
-#define xen_sysctl_physinfo           compat_sysctl_physinfo
-#define xen_sysctl_physinfo_t         compat_sysctl_physinfo_t
-
-#define xen_sysctl_ioport_emulation   compat_sysctl_ioport_emulation
-#define xen_sysctl_ioport_emulation_t compat_sysctl_ioport_emulation_t
-
-#define COMPAT
-#define _XEN_GUEST_HANDLE(t)          XEN_GUEST_HANDLE(t)
-typedef int ret_t;
-
-#include "../sysctl.c"
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/compat/Makefile
--- a/xen/common/compat/Makefile        Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/common/compat/Makefile        Wed Jan 24 16:33:19 2007 +0000
@@ -1,13 +1,9 @@ obj-y += domain.o
 obj-y += domain.o
-obj-y += domctl.o
 obj-y += kernel.o
 obj-y += memory.o
 obj-y += multicall.o
-obj-y += sysctl.o
 obj-y += xlat.o
 
 # extra dependencies
-domctl.o:      ../domctl.c
 kernel.o:      ../kernel.c
 multicall.o:   ../multicall.c
-sysctl.o:      ../sysctl.c
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/compat/domctl.c
--- a/xen/common/compat/domctl.c        Wed Jan 24 15:59:09 2007 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/******************************************************************************
- * compat/domctl.c
- */
-
-#include <xen/config.h>
-#include <compat/domctl.h>
-#include <xen/sched.h>
-#include <xen/cpumask.h>
-#include <asm/uaccess.h>
-
-DEFINE_XEN_GUEST_HANDLE(compat_domctl_t);
-#define xen_domctl                     compat_domctl
-#define xen_domctl_t                   compat_domctl_t
-#define do_domctl(h)                   compat_domctl(_##h)
-#define arch_do_domctl(x, h)           arch_compat_domctl(x, _##h)
-
-#define xen_domain_handle_t            compat_domain_handle_t
-
-#define xen_domctl_vcpucontext         compat_domctl_vcpucontext
-#define xen_domctl_vcpucontext_t       compat_domctl_vcpucontext_t
-
-#define xen_domctl_createdomain        compat_domctl_createdomain
-#define xen_domctl_createdomain_t      compat_domctl_createdomain_t
-
-#define xen_domctl_max_vcpus           compat_domctl_max_vcpus
-#define xen_domctl_max_vcpus_t         compat_domctl_max_vcpus_t
-
-static void cpumask_to_compat_ctl_cpumap(
-    struct compat_ctl_cpumap *cmpctl_cpumap, cpumask_t *cpumask)
-{
-    unsigned int guest_bytes, copy_bytes, i;
-    /*static const*/ uint8_t zero = 0;
-
-    if ( compat_handle_is_null(cmpctl_cpumap->bitmap) )
-        return;
-
-    guest_bytes = (cmpctl_cpumap->nr_cpus + 7) / 8;
-    copy_bytes  = min_t(unsigned int, guest_bytes, (NR_CPUS + 7) / 8);
-
-    copy_to_compat(cmpctl_cpumap->bitmap,
-                   (uint8_t *)cpus_addr(*cpumask),
-                   copy_bytes);
-
-    for ( i = copy_bytes; i < guest_bytes; i++ )
-        copy_to_compat_offset(cmpctl_cpumap->bitmap, i, &zero, 1);
-}
-#define cpumask_to_xenctl_cpumap       cpumask_to_compat_ctl_cpumap
-
-void compat_ctl_cpumap_to_cpumask(
-    cpumask_t *cpumask, struct compat_ctl_cpumap *cmpctl_cpumap)
-{
-    unsigned int guest_bytes, copy_bytes;
-
-    guest_bytes = (cmpctl_cpumap->nr_cpus + 7) / 8;
-    copy_bytes  = min_t(unsigned int, guest_bytes, (NR_CPUS + 7) / 8);
-
-    cpus_clear(*cpumask);
-
-    if ( compat_handle_is_null(cmpctl_cpumap->bitmap) )
-        return;
-
-    copy_from_compat((uint8_t *)cpus_addr(*cpumask),
-                     cmpctl_cpumap->bitmap,
-                     copy_bytes);
-}
-#define xenctl_cpumap_to_cpumask       compat_ctl_cpumap_to_cpumask
-
-#define xen_domctl_vcpuaffinity        compat_domctl_vcpuaffinity
-#define xen_domctl_vcpuaffinity_t      compat_domctl_vcpuaffinity_t
-
-static int compat_sched_adjust(struct domain *d,
-                               struct compat_domctl_scheduler_op *cop)
-{
-    struct xen_domctl_scheduler_op nop;
-    int ret;
-    enum XLAT_domctl_scheduler_op_u u;
-
-    switch ( cop->sched_id )
-    {
-    case XEN_SCHEDULER_SEDF:   u = XLAT_domctl_scheduler_op_u_sedf;   break;
-    case XEN_SCHEDULER_CREDIT: u = XLAT_domctl_scheduler_op_u_credit; break;
-    default: return -EINVAL;
-    }
-    XLAT_domctl_scheduler_op(&nop, cop);
-    ret = sched_adjust(d, &nop);
-    XLAT_domctl_scheduler_op(cop, &nop);
-
-    return ret;
-}
-#define sched_adjust(d, op)            compat_sched_adjust(d, op)
-#define xen_domctl_scheduler_op        compat_domctl_scheduler_op
-#define xen_domctl_scheduler_op_t      compat_domctl_scheduler_op_t
-
-#define xen_domctl_getdomaininfo       compat_domctl_getdomaininfo
-#define xen_domctl_getdomaininfo_t     compat_domctl_getdomaininfo_t
-#define getdomaininfo(d, i)            compat_getdomaininfo(d, i)
-
-#define xen_domctl_getvcpuinfo         compat_domctl_getvcpuinfo
-#define xen_domctl_getvcpuinfo_t       compat_domctl_getvcpuinfo_t
-
-#define xen_domctl_max_mem             compat_domctl_max_mem
-#define xen_domctl_max_mem_t           compat_domctl_max_mem_t
-
-#define xen_domctl_setdomainhandle     compat_domctl_setdomainhandle
-#define xen_domctl_setdomainhandle_t   compat_domctl_setdomainhandle_t
-
-#define xen_domctl_setdebugging        compat_domctl_setdebugging
-#define xen_domctl_setdebugging_t      compat_domctl_setdebugging_t
-
-#define xen_domctl_irq_permission      compat_domctl_irq_permission
-#define xen_domctl_irq_permission_t    compat_domctl_irq_permission_t
-
-#define xen_domctl_iomem_permission    compat_domctl_iomem_permission
-#define xen_domctl_iomem_permission_t  compat_domctl_iomem_permission_t
-
-#define xen_domctl_settimeoffset       compat_domctl_settimeoffset
-#define xen_domctl_settimeoffset_t     compat_domctl_settimeoffset_t
-
-#define COMPAT
-#define _XEN_GUEST_HANDLE(t)           XEN_GUEST_HANDLE(t)
-#define _u_domctl                      u_domctl
-//#undef guest_handle_cast
-//#define guest_handle_cast              compat_handle_cast
-//#define copy_to_xxx_offset             copy_to_compat_offset
-typedef int ret_t;
-
-#include "../domctl.c"
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/compat/sysctl.c
--- a/xen/common/compat/sysctl.c        Wed Jan 24 15:59:09 2007 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/******************************************************************************
- * compat/sysctl.c
- */
-
-#include <xen/config.h>
-#include <compat/sysctl.h>
-#include <xen/domain.h>
-#include <xen/guest_access.h>
-#include <xen/perfc.h>
-#include <xen/trace.h>
-
-DEFINE_XEN_GUEST_HANDLE(compat_sysctl_t);
-#define xen_sysctl                     compat_sysctl
-#define xen_sysctl_t                   compat_sysctl_t
-#define do_sysctl(h)                   compat_sysctl(_##h)
-#define arch_do_sysctl(x, h)           arch_compat_sysctl(x, _##h)
-
-#define xen_sysctl_readconsole         compat_sysctl_readconsole
-#define xen_sysctl_readconsole_t       compat_sysctl_readconsole_t
-
-static int compat_tb_control(struct compat_sysctl_tbuf_op *cmp_tbc)
-{
-    struct xen_sysctl_tbuf_op nat_tbc;
-    int ret;
-
-#define XLAT_ctl_cpumap_HNDL_bitmap(_d_, _s_) \
-    guest_from_compat_handle((_d_)->bitmap, (_s_)->bitmap)
-    XLAT_sysctl_tbuf_op(&nat_tbc, cmp_tbc);
-#undef XLAT_ctl_cpumap_HNDL_bitmap
-    ret = tb_control(&nat_tbc);
-#define XLAT_ctl_cpumap_HNDL_bitmap(_d_, _s_) ((void)0)
-    XLAT_sysctl_tbuf_op(cmp_tbc, &nat_tbc);
-#undef XLAT_ctl_cpumap_HNDL_bitmap
-    return ret;
-}
-#define xen_sysctl_tbuf_op             compat_sysctl_tbuf_op
-#define xen_sysctl_tbuf_op_t           compat_sysctl_tbuf_op_t
-#define tb_control(p)                  compat_tb_control(p)
-
-#define xen_sysctl_sched_id            compat_sysctl_sched_id
-#define xen_sysctl_sched_id_t          compat_sysctl_sched_id_t
-
-#define xen_sysctl_getdomaininfolist   compat_sysctl_getdomaininfolist
-#define xen_sysctl_getdomaininfolist_t compat_sysctl_getdomaininfolist_t
-#define xen_domctl_getdomaininfo       compat_domctl_getdomaininfo
-#define xen_domctl_getdomaininfo_t     compat_domctl_getdomaininfo_t
-#define getdomaininfo(d, i)            compat_getdomaininfo(d, i)
-
-#ifdef PERF_COUNTERS
-static int compat_perfc_control(struct compat_sysctl_perfc_op *cmp_pc)
-{
-    CHECK_sysctl_perfc_desc;
-    CHECK_TYPE(sysctl_perfc_val);
-    struct xen_sysctl_perfc_op nat_pc;
-    int ret;
-
-#define XLAT_sysctl_perfc_op_HNDL_desc(_d_, _s_) \
-    guest_from_compat_handle((_d_)->desc, (_s_)->desc)
-#define XLAT_sysctl_perfc_op_HNDL_val(_d_, _s_) \
-    guest_from_compat_handle((_d_)->val, (_s_)->val)
-    XLAT_sysctl_perfc_op(&nat_pc, cmp_pc);
-#undef XLAT_sysctl_perfc_op_HNDL_val
-#undef XLAT_sysctl_perfc_op_HNDL_desc
-    ret = perfc_control(&nat_pc);
-#define XLAT_sysctl_perfc_op_HNDL_desc(_d_, _s_)
-#define XLAT_sysctl_perfc_op_HNDL_val(_d_, _s_)
-    XLAT_sysctl_perfc_op(cmp_pc, &nat_pc);
-#undef XLAT_sysctl_perfc_op_HNDL_val
-#undef XLAT_sysctl_perfc_op_HNDL_desc
-    return ret;
-}
-#define xen_sysctl_perfc_op            compat_sysctl_perfc_op
-#define xen_sysctl_perfc_op_t          compat_sysctl_perfc_op_t
-#define perfc_control(p)               compat_perfc_control(p)
-#endif
-
-#define COMPAT
-#define _XEN_GUEST_HANDLE(t)           XEN_GUEST_HANDLE(t)
-#define _u_sysctl                      u_sysctl
-#undef guest_handle_cast
-#define guest_handle_cast              compat_handle_cast
-#define copy_to_xxx_offset             copy_to_compat_offset
-typedef int ret_t;
-
-#include "../sysctl.c"
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/domain.c
--- a/xen/common/domain.c       Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/common/domain.c       Wed Jan 24 16:33:19 2007 +0000
@@ -27,9 +27,6 @@
 #include <asm/debugger.h>
 #include <public/sched.h>
 #include <public/vcpu.h>
-#ifdef CONFIG_COMPAT
-#include <compat/domctl.h>
-#endif
 
 /* Both these structures are protected by the domlist_lock. */
 DEFINE_RWLOCK(domlist_lock);
@@ -451,75 +448,6 @@ void domain_unpause_by_systemcontroller(
     }
 }
 
-
-/*
- * set_info_guest is used for final setup, launching, and state modification 
- * of domains other than domain 0. ie. the domains that are being built by 
- * the userspace dom0 domain builder.
- */
-int set_info_guest(struct domain *d,
-                   xen_domctl_vcpucontext_u vcpucontext)
-{
-    int rc = 0;
-    vcpu_guest_context_u c;
-#ifdef CONFIG_COMPAT
-    CHECK_FIELD(domctl_vcpucontext, vcpu);
-#endif
-    unsigned long vcpu = vcpucontext.nat->vcpu;
-    struct vcpu *v;
-
-    if ( (vcpu >= MAX_VIRT_CPUS) || ((v = d->vcpu[vcpu]) == NULL) )
-        return -EINVAL;
-
-    if ( IS_COMPAT(v->domain)
-         ? compat_handle_is_null(vcpucontext.cmp->ctxt)
-         : guest_handle_is_null(vcpucontext.nat->ctxt) )
-        return vcpu_reset(v);
-
-#ifdef CONFIG_COMPAT
-    BUILD_BUG_ON(sizeof(struct vcpu_guest_context)
-                 < sizeof(struct compat_vcpu_guest_context));
-#endif
-    if ( (c.nat = xmalloc(struct vcpu_guest_context)) == NULL )
-        return -ENOMEM;
-
-    domain_pause(d);
-
-    if ( !IS_COMPAT(v->domain) )
-    {
-        if ( !IS_COMPAT(current->domain)
-             ? copy_from_guest(c.nat, vcpucontext.nat->ctxt, 1)
-#ifndef CONFIG_COMPAT
-             : 0 )
-#else
-             : copy_from_guest(c.nat,
-                               compat_handle_cast(vcpucontext.cmp->ctxt,
-                                                  void),
-                               1) )
-#endif
-            rc = -EFAULT;
-    }
-#ifdef CONFIG_COMPAT
-    else
-    {
-        if ( !IS_COMPAT(current->domain)
-             ? copy_from_guest(c.cmp,
-                               guest_handle_cast(vcpucontext.nat->ctxt, void),
-                               1)
-             : copy_from_compat(c.cmp, vcpucontext.cmp->ctxt, 1) )
-            rc = -EFAULT;
-    }
-#endif
-
-    if ( rc == 0 )
-        rc = arch_set_info_guest(v, c);
-
-    domain_unpause(d);
-
-    xfree(c.nat);
-    return rc;
-}
-
 int boot_vcpu(struct domain *d, int vcpuid, vcpu_guest_context_u ctxt)
 {
     struct vcpu *v = d->vcpu[vcpuid];
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/domctl.c
--- a/xen/common/domctl.c       Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/common/domctl.c       Wed Jan 24 16:33:19 2007 +0000
@@ -19,22 +19,12 @@
 #include <xen/iocap.h>
 #include <xen/guest_access.h>
 #include <xen/bitmap.h>
-#ifdef CONFIG_COMPAT
-#include <xen/compat.h>
-#endif
 #include <asm/current.h>
 #include <public/domctl.h>
 #include <acm/acm_hooks.h>
 
-#ifndef COMPAT
-typedef long ret_t;
-#define copy_to_xxx_offset copy_to_guest_offset
-#endif
-
-extern ret_t arch_do_domctl(
+extern long arch_do_domctl(
     struct xen_domctl *op, XEN_GUEST_HANDLE(xen_domctl_t) u_domctl);
-
-#ifndef COMPAT
 
 void cpumask_to_xenctl_cpumap(
     struct xenctl_cpumap *xenctl_cpumap, cpumask_t *cpumask)
@@ -75,8 +65,6 @@ void xenctl_cpumap_to_cpumask(
 
     bitmap_byte_to_long(cpus_addr(*cpumask), bytemap, NR_CPUS);
 }
-
-#endif /* COMPAT */
 
 static inline int is_free_domid(domid_t dom)
 {
@@ -182,9 +170,9 @@ static unsigned int default_vcpu0_locati
     return cpu;
 }
 
-ret_t do_domctl(XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
+long do_domctl(XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
 {
-    ret_t ret = 0;
+    long ret = 0;
     struct xen_domctl curop, *op = &curop;
     void *ssid = NULL; /* save security ptr between pre and post/fail hooks */
     static DEFINE_SPINLOCK(domctl_lock);
@@ -209,12 +197,52 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
     case XEN_DOMCTL_setvcpucontext:
     {
         struct domain *d = find_domain_by_id(op->domain);
-        ret = -ESRCH;
-        if ( d != NULL )
-        {
-            ret = set_info_guest(d, &op->u.vcpucontext);
-            put_domain(d);
-        }
+        vcpu_guest_context_u c = { .nat = NULL };
+        unsigned int vcpu = op->u.vcpucontext.vcpu;
+        struct vcpu *v;
+
+        ret = -ESRCH;
+        if ( d == NULL )
+            break;
+
+        ret = -EINVAL;
+        if ( (vcpu >= MAX_VIRT_CPUS) || ((v = d->vcpu[vcpu]) == NULL) )
+            goto svc_out;
+
+        if ( guest_handle_is_null(op->u.vcpucontext.ctxt) )
+        {
+            ret = vcpu_reset(v);
+            goto svc_out;
+        }
+
+#ifdef CONFIG_COMPAT
+        BUILD_BUG_ON(sizeof(struct vcpu_guest_context)
+                     < sizeof(struct compat_vcpu_guest_context));
+#endif
+        ret = -ENOMEM;
+        if ( (c.nat = xmalloc(struct vcpu_guest_context)) == NULL )
+            goto svc_out;
+
+        if ( !IS_COMPAT(v->domain) )
+            ret = copy_from_guest(c.nat, op->u.vcpucontext.ctxt, 1);
+#ifdef CONFIG_COMPAT
+        else
+            ret = copy_from_guest(c.cmp,
+                                  guest_handle_cast(op->u.vcpucontext.ctxt,
+                                                    void), 1);
+#endif
+        ret = ret ? -EFAULT : 0;
+
+        if ( ret == 0 )
+        {
+            domain_pause(d);
+            ret = arch_set_info_guest(v, c);
+            domain_unpause(d);
+        }
+
+    svc_out:
+        xfree(c.nat);
+        put_domain(d);
     }
     break;
 
@@ -313,32 +341,12 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
         if ( (d = domain_create(dom, domcr_flags)) == NULL )
             break;
 
+#ifdef CONFIG_COMPAT
+        if ( IS_COMPAT(current->domain) && ((ret = switch_compat(d)) != 0) )
+            break;
+#endif
+
         ret = 0;
-        switch ( (op->u.createdomain.flags >> XEN_DOMCTL_CDF_WORDSIZE_SHIFT)
-                 & XEN_DOMCTL_CDF_WORDSIZE_MASK )
-        {
-        case 0:
-            if ( !IS_COMPAT(current->domain) )
-                op->u.createdomain.flags |= BITS_PER_LONG
-                                            << XEN_DOMCTL_CDF_WORDSIZE_SHIFT;
-#ifdef CONFIG_COMPAT
-            else
-            {
-                op->u.createdomain.flags |= COMPAT_BITS_PER_LONG
-                                            << XEN_DOMCTL_CDF_WORDSIZE_SHIFT;
-        case COMPAT_BITS_PER_LONG:
-                ret = switch_compat(d);
-            }
-#endif
-            break;
-        case BITS_PER_LONG:
-            break;
-        default:
-            ret = -EINVAL;
-            break;
-        }
-        if ( ret )
-            break;
 
         memcpy(d->handle, op->u.createdomain.handle,
                sizeof(xen_domain_handle_t));
@@ -501,9 +509,9 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
 
     case XEN_DOMCTL_getvcpucontext:
     { 
-        vcpu_guest_context_u       c;
-        struct domain             *d;
-        struct vcpu               *v;
+        vcpu_guest_context_u c = { .nat = NULL };
+        struct domain       *d;
+        struct vcpu         *v;
 
         ret = -ESRCH;
         if ( (d = find_domain_by_id(op->domain)) == NULL )
@@ -539,35 +547,18 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
             vcpu_unpause(v);
 
         if ( !IS_COMPAT(v->domain) )
-        {
-#ifndef COMPAT
-            if ( copy_to_guest(op->u.vcpucontext.ctxt, c.nat, 1) )
-#else
-            if ( copy_to_guest(compat_handle_cast(op->u.vcpucontext.ctxt,
-                                                  void),
-                               c.nat, 1) )
-#endif
-                ret = -EFAULT;
-        }
+            ret = copy_to_guest(op->u.vcpucontext.ctxt, c.nat, 1);
 #ifdef CONFIG_COMPAT
         else
-        {
-#ifndef COMPAT
-            if ( copy_to_guest(guest_handle_cast(op->u.vcpucontext.ctxt, void),
-                               c.cmp, 1) )
-#else
-            if ( copy_to_compat(op->u.vcpucontext.ctxt, c.cmp, 1) )
+            ret = copy_to_guest(guest_handle_cast(op->u.vcpucontext.ctxt,
+                                                  void), c.cmp, 1);
 #endif
-                ret = -EFAULT;
-        }
-#endif
-
+
+        if ( copy_to_guest(u_domctl, op, 1) || ret )
+            ret = -EFAULT;
+
+    getvcpucontext_out:
         xfree(c.nat);
-
-        if ( copy_to_guest(u_domctl, op, 1) )
-            ret = -EFAULT;
-
-    getvcpucontext_out:
         put_domain(d);
     }
     break;
@@ -725,16 +716,6 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
         }
     }
     break;
-
-#ifdef CONFIG_COMPAT
-    case XEN_DOMCTL_set_compat:
-        ret = switch_compat(find_domain_by_id(op->domain));
-        break;
-
-    case XEN_DOMCTL_set_native:
-        ret = switch_native(find_domain_by_id(op->domain));
-        break;
-#endif
 
     default:
         ret = arch_do_domctl(op, u_domctl);
diff -r a94363b85e19 -r 30af6cfdb05c xen/common/sysctl.c
--- a/xen/common/sysctl.c       Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/common/sysctl.c       Wed Jan 24 16:33:19 2007 +0000
@@ -21,17 +21,12 @@
 #include <asm/current.h>
 #include <public/sysctl.h>
 
-#ifndef COMPAT
-typedef long ret_t;
-#define copy_to_xxx_offset copy_to_guest_offset
-#endif
-
-extern ret_t arch_do_sysctl(
+extern long arch_do_sysctl(
     struct xen_sysctl *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl);
 
-ret_t do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
+long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl)
 {
-    ret_t ret = 0;
+    long ret = 0;
     struct xen_sysctl curop, *op = &curop;
     static DEFINE_SPINLOCK(sysctl_lock);
 
@@ -101,8 +96,8 @@ ret_t do_sysctl(XEN_GUEST_HANDLE(xen_sys
 
             put_domain(d);
 
-            if ( copy_to_xxx_offset(op->u.getdomaininfolist.buffer,
-                                    num_domains, &info, 1) )
+            if ( copy_to_guest_offset(op->u.getdomaininfolist.buffer,
+                                      num_domains, &info, 1) )
             {
                 ret = -EFAULT;
                 break;
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/Makefile
--- a/xen/include/Makefile      Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/Makefile      Wed Jan 24 16:33:19 2007 +0000
@@ -6,7 +6,6 @@ headers-y := \
     compat/acm.h \
     compat/acm_ops.h \
     compat/callback.h \
-    compat/domctl.h \
     compat/elfnote.h \
     compat/event_channel.h \
     compat/features.h \
@@ -17,7 +16,6 @@ headers-y := \
     compat/physdev.h \
     compat/platform.h \
     compat/sched.h \
-    compat/sysctl.h \
     compat/trace.h \
     compat/vcpu.h \
     compat/version.h \
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/public/arch-x86/xen-x86_32.h
--- a/xen/include/public/arch-x86/xen-x86_32.h  Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/public/arch-x86/xen-x86_32.h  Wed Jan 24 16:33:19 2007 +0000
@@ -21,7 +21,7 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  *
- * Copyright (c) 2004-2006, K A Fraser
+ * Copyright (c) 2004-2007, K A Fraser
  */
 
 #ifndef __XEN_PUBLIC_ARCH_X86_XEN_X86_32_H__
@@ -89,6 +89,23 @@
 #define machine_to_phys_mapping ((unsigned long *)MACH2PHYS_VIRT_START)
 #endif
 
+/* 32-/64-bit invariability for control interfaces (domctl/sysctl). */
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+#undef __DEFINE_XEN_GUEST_HANDLE
+#define __DEFINE_XEN_GUEST_HANDLE(name, type)                   \
+    typedef struct { type *p; }                                 \
+        __guest_handle_ ## name;                                \
+    typedef struct { union { type *p; uint64_aligned_t q; }; }  \
+        __guest_handle_64_ ## name
+#undef set_xen_guest_handle
+#define set_xen_guest_handle(hnd, val)                      \
+    do { if ( sizeof(hnd) == 8 ) *(uint64_t *)&(hnd) = 0;   \
+         (hnd).p = val;                                     \
+    } while ( 0 )
+#define uint64_aligned_t uint64_t __attribute__((aligned(8)))
+#define XEN_GUEST_HANDLE_64(name) __guest_handle_64_ ## name
+#endif
+
 #ifndef __ASSEMBLY__
 
 struct cpu_user_regs {
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/public/arch-x86/xen.h
--- a/xen/include/public/arch-x86/xen.h Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/public/arch-x86/xen.h Wed Jan 24 16:33:19 2007 +0000
@@ -43,6 +43,12 @@
 #define get_xen_guest_handle(val, hnd)  do { val = (hnd).p; } while (0)
 #endif
 
+#if defined(__i386__)
+#include "xen-x86_32.h"
+#elif defined(__x86_64__)
+#include "xen-x86_64.h"
+#endif
+
 #ifndef __ASSEMBLY__
 /* Guest handles for primitive C types. */
 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
@@ -55,12 +61,6 @@ DEFINE_XEN_GUEST_HANDLE(void);
 
 typedef unsigned long xen_pfn_t;
 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
-#endif
-
-#if defined(__i386__)
-#include "xen-x86_32.h"
-#elif defined(__x86_64__)
-#include "xen-x86_64.h"
 #endif
 
 /*
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/public/domctl.h
--- a/xen/include/public/domctl.h       Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/public/domctl.h       Wed Jan 24 16:33:19 2007 +0000
@@ -34,10 +34,10 @@
 
 #include "xen.h"
 
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000004
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000005
 
 struct xenctl_cpumap {
-    XEN_GUEST_HANDLE(uint8_t) bitmap;
+    XEN_GUEST_HANDLE_64(uint8_t) bitmap;
     uint32_t nr_cpus;
 };
 
@@ -53,8 +53,6 @@ struct xen_domctl_createdomain {
  /* Is this an HVM guest (as opposed to a PV guest)? */
 #define _XEN_DOMCTL_CDF_hvm_guest 0
 #define XEN_DOMCTL_CDF_hvm_guest  (1U<<_XEN_DOMCTL_CDF_hvm_guest)
-#define XEN_DOMCTL_CDF_WORDSIZE_MASK 255
-#define XEN_DOMCTL_CDF_WORDSIZE_SHIFT 24
     uint32_t flags;
 };
 typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
@@ -94,10 +92,10 @@ struct xen_domctl_getdomaininfo {
 #define XEN_DOMINF_shutdownmask 255
 #define XEN_DOMINF_shutdownshift 16
     uint32_t flags;              /* XEN_DOMINF_* */
-    uint64_t tot_pages;
-    uint64_t max_pages;
-    uint64_t shared_info_frame;  /* GMFN of shared_info struct */
-    uint64_t cpu_time;
+    uint64_aligned_t tot_pages;
+    uint64_aligned_t max_pages;
+    uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
+    uint64_aligned_t cpu_time;
     uint32_t nr_online_vcpus;    /* Number of VCPUs currently online. */
     uint32_t max_vcpu_id;        /* Maximum VCPUID in use by this domain. */
     uint32_t ssidref;
@@ -111,12 +109,12 @@ struct xen_domctl_getmemlist {
 struct xen_domctl_getmemlist {
     /* IN variables. */
     /* Max entries to write to output buffer. */
-    uint64_t max_pfns;
+    uint64_aligned_t max_pfns;
     /* Start index in guest's page list. */
-    uint64_t start_pfn;
-    XEN_GUEST_HANDLE(xen_pfn_t) buffer;
+    uint64_aligned_t start_pfn;
+    XEN_GUEST_HANDLE_64(uint64_t) buffer;
     /* OUT variables. */
-    uint64_t num_pfns;
+    uint64_aligned_t num_pfns;
 };
 typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);
@@ -137,7 +135,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_getme
 
 struct xen_domctl_getpageframeinfo {
     /* IN variables. */
-    uint64_t gmfn;        /* GMFN to query */
+    uint64_aligned_t gmfn; /* GMFN to query */
     /* OUT variables. */
     /* Is the page PINNED to a type? */
     uint32_t type;         /* see above type defs */
@@ -149,9 +147,9 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpa
 #define XEN_DOMCTL_getpageframeinfo2  8
 struct xen_domctl_getpageframeinfo2 {
     /* IN variables. */
-    uint64_t num;
+    uint64_aligned_t num;
     /* IN/OUT variables. */
-    XEN_GUEST_HANDLE(ulong) array;
+    XEN_GUEST_HANDLE_64(uint32_t) array;
 };
 typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);
@@ -225,8 +223,8 @@ struct xen_domctl_shadow_op {
     uint32_t       mb;       /* Shadow memory allocation in MB */
 
     /* OP_PEEK / OP_CLEAN */
-    XEN_GUEST_HANDLE(ulong) dirty_bitmap;
-    uint64_t       pages;    /* Size of buffer. Updated with actual size. */
+    XEN_GUEST_HANDLE_64(uint8_t) dirty_bitmap;
+    uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
     struct xen_domctl_shadow_op_stats stats;
 };
 typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;
@@ -236,7 +234,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_shado
 #define XEN_DOMCTL_max_mem           11
 struct xen_domctl_max_mem {
     /* IN variables. */
-    uint64_t max_memkb;
+    uint64_aligned_t max_memkb;
 };
 typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);
@@ -246,7 +244,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_m
 #define XEN_DOMCTL_getvcpucontext    13
 struct xen_domctl_vcpucontext {
     uint32_t              vcpu;                  /* IN */
-    XEN_GUEST_HANDLE(vcpu_guest_context_t) ctxt; /* IN/OUT */
+    XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
 };
 typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);
@@ -260,7 +258,7 @@ struct xen_domctl_getvcpuinfo {
     uint8_t  online;                  /* currently online (not hotplugged)? */
     uint8_t  blocked;                 /* blocked waiting for an event? */
     uint8_t  running;                 /* currently scheduled on its CPU? */
-    uint64_t cpu_time;                /* total cpu time consumed (ns) */
+    uint64_aligned_t cpu_time;        /* total cpu time consumed (ns) */
     uint32_t cpu;                     /* current mapping   */
 };
 typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;
@@ -298,9 +296,9 @@ struct xen_domctl_scheduler_op {
     uint32_t cmd;       /* XEN_DOMCTL_SCHEDOP_* */
     union {
         struct xen_domctl_sched_sedf {
-            uint64_t period;
-            uint64_t slice;
-            uint64_t latency;
+            uint64_aligned_t period;
+            uint64_aligned_t slice;
+            uint64_aligned_t latency;
             uint32_t extratime;
             uint32_t weight;
         } sedf;
@@ -341,9 +339,9 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_p
 
 #define XEN_DOMCTL_iomem_permission  20
 struct xen_domctl_iomem_permission {
-    uint64_t first_mfn;       /* first page (physical page number) in range */
-    uint64_t nr_mfns;         /* number of pages in range (>0) */
-    uint8_t  allow_access;    /* allow (!0) or deny (0) access to range? */
+    uint64_aligned_t first_mfn;/* first page (physical page number) in range */
+    uint64_aligned_t nr_mfns;  /* number of pages in range (>0) */
+    uint8_t  allow_access;     /* allow (!0) or deny (0) access to range? */
 };
 typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t);
@@ -360,7 +358,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_iopor
 
 #define XEN_DOMCTL_hypercall_init    22
 struct xen_domctl_hypercall_init {
-    uint64_t  gmfn;            /* GMFN to be initialised */
+    uint64_aligned_t  gmfn;           /* GMFN to be initialised */
 };
 typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t);
@@ -371,12 +369,12 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_hyper
 #define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save)  */
 #define XEN_DOMAINSETUP_query  (1UL<<_XEN_DOMAINSETUP_query)
 typedef struct xen_domctl_arch_setup {
-    uint64_t flags;      /* XEN_DOMAINSETUP_* */
+    uint64_aligned_t flags;  /* XEN_DOMAINSETUP_* */
 #ifdef __ia64__
-    uint64_t bp;            /* mpaddr of boot param area */
-    uint64_t maxmem;        /* Highest memory address for MDT.  */
-    uint64_t xsi_va;        /* Xen shared_info area virtual address.  */
-    uint32_t hypercall_imm; /* Break imm for Xen hypercalls.  */
+    uint64_aligned_t bp;     /* mpaddr of boot param area */
+    uint64_aligned_t maxmem; /* Highest memory address for MDT.  */
+    uint64_aligned_t xsi_va; /* Xen shared_info area virtual address.  */
+    uint32_t hypercall_imm;  /* Break imm for Xen hypercalls.  */
 #endif
 } xen_domctl_arch_setup_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t);
@@ -399,7 +397,7 @@ DEFINE_XEN_GUEST_HANDLE(hvm_domain_conte
 #define XEN_DOMCTL_gethvmcontext   33
 #define XEN_DOMCTL_sethvmcontext   34
 typedef struct xen_domctl_hvmcontext {
-    XEN_GUEST_HANDLE(hvm_domain_context_t) ctxt;  /* IN/OUT */
+    XEN_GUEST_HANDLE_64(hvm_domain_context_t) ctxt;  /* IN/OUT */
 } xen_domctl_hvmcontext_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t);
 
@@ -409,9 +407,6 @@ struct xen_domctl_real_mode_area {
 };
 typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t;
 DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t);
-
-#define XEN_DOMCTL_set_compat        42
-#define XEN_DOMCTL_set_native        43
 
 struct xen_domctl {
     uint32_t cmd;
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h       Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/public/sysctl.h       Wed Jan 24 16:33:19 2007 +0000
@@ -34,7 +34,7 @@
 #include "xen.h"
 #include "domctl.h"
 
-#define XEN_SYSCTL_INTERFACE_VERSION 0x00000002
+#define XEN_SYSCTL_INTERFACE_VERSION 0x00000003
 
 /*
  * Read console content from Xen buffer ring.
@@ -43,7 +43,7 @@ struct xen_sysctl_readconsole {
 struct xen_sysctl_readconsole {
     /* IN variables. */
     uint32_t clear;                /* Non-zero -> clear after reading. */
-    XEN_GUEST_HANDLE(char) buffer; /* Buffer start */
+    XEN_GUEST_HANDLE_64(char) buffer; /* Buffer start */
     /* IN/OUT variables. */
     uint32_t count;            /* In: Buffer size;  Out: Used buffer size  */
 };
@@ -65,7 +65,7 @@ struct xen_sysctl_tbuf_op {
     struct xenctl_cpumap cpu_mask;
     uint32_t             evt_mask;
     /* OUT variables */
-    uint64_t buffer_mfn;
+    uint64_aligned_t buffer_mfn;
     uint32_t size;
 };
 typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
@@ -81,9 +81,9 @@ struct xen_sysctl_physinfo {
     uint32_t sockets_per_node;
     uint32_t nr_nodes;
     uint32_t cpu_khz;
-    uint64_t total_pages;
-    uint64_t free_pages;
-    uint64_t scrub_pages;
+    uint64_aligned_t total_pages;
+    uint64_aligned_t free_pages;
+    uint64_aligned_t scrub_pages;
     uint32_t hw_cap[8];
 };
 typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
@@ -121,9 +121,9 @@ struct xen_sysctl_perfc_op {
     uint32_t       nr_counters;       /*  number of counters description  */
     uint32_t       nr_vals;           /*  number of values  */
     /* counter information (or NULL) */
-    XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t) desc;
+    XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc;
     /* counter values (or NULL) */
-    XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t) val;
+    XEN_GUEST_HANDLE_64(xen_sysctl_perfc_val_t) val;
 };
 typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
@@ -133,7 +133,7 @@ struct xen_sysctl_getdomaininfolist {
     /* IN variables. */
     domid_t               first_domain;
     uint32_t              max_domains;
-    XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t) buffer;
+    XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer;
     /* OUT variables. */
     uint32_t              num_domains;
 };
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/public/xen.h
--- a/xen/include/public/xen.h  Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/public/xen.h  Wed Jan 24 16:33:19 2007 +0000
@@ -588,6 +588,16 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t);
 
 #endif /* !__ASSEMBLY__ */
 
+/* Default definitions for macros used by domctl/sysctl. */
+#if defined(__XEN__) || defined(__XEN_TOOLS__)
+#ifndef uint64_aligned_t
+#define uint64_aligned_t uint64_t
+#endif
+#ifndef XEN_GUEST_HANDLE_64
+#define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
+#endif
+#endif
+
 #endif /* __XEN_PUBLIC_XEN_H__ */
 
 /*
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/xen/domain.h
--- a/xen/include/xen/domain.h  Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/xen/domain.h  Wed Jan 24 16:33:19 2007 +0000
@@ -18,11 +18,7 @@ void free_domain(struct domain *d);
 void free_domain(struct domain *d);
 
 struct xen_domctl_getdomaininfo;
-void getdomaininfo(
-    struct domain *d, struct xen_domctl_getdomaininfo *info);
-struct compat_domctl_getdomaininfo;
-void compat_getdomaininfo(
-    struct domain *d, struct compat_domctl_getdomaininfo *info);
+void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info);
 
 /*
  * Arch-specifics.
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/xen/sched.h   Wed Jan 24 16:33:19 2007 +0000
@@ -275,13 +275,6 @@ int construct_dom0(
     unsigned long image_start, unsigned long image_len, 
     unsigned long initrd_start, unsigned long initrd_len,
     char *cmdline);
-
-typedef union {
-    struct xen_domctl_vcpucontext *nat;
-    struct compat_domctl_vcpucontext *cmp;
-} xen_domctl_vcpucontext_u __attribute__((__transparent_union__));
-
-int set_info_guest(struct domain *d, xen_domctl_vcpucontext_u);
 
 struct domain *find_domain_by_id(domid_t dom);
 void domain_destroy(struct domain *d);
diff -r a94363b85e19 -r 30af6cfdb05c xen/include/xlat.lst
--- a/xen/include/xlat.lst      Wed Jan 24 15:59:09 2007 +0000
+++ b/xen/include/xlat.lst      Wed Jan 24 16:33:19 2007 +0000
@@ -10,10 +10,6 @@
 !      trap_info                       arch-x86/xen.h
 !      vcpu_guest_context              arch-x86/xen.h
 ?      acm_getdecision                 acm_ops.h
-!      ctl_cpumap                      domctl.h
-!      domctl_scheduler_op             domctl.h
-!      domctl_shadow_op                domctl.h
-!      domctl_shadow_op_stats          domctl.h
 ?      evtchn_alloc_unbound            event_channel.h
 ?      evtchn_bind_interdomain         event_channel.h
 ?      evtchn_bind_ipi                 event_channel.h
@@ -43,9 +39,6 @@
 !      sched_poll                      sched.h
 ?      sched_remote_shutdown           sched.h
 ?      sched_shutdown                  sched.h
-?      sysctl_perfc_desc               sysctl.h
-!      sysctl_perfc_op                 sysctl.h
-!      sysctl_tbuf_op                  sysctl.h
 ?      t_buf                           trace.h
 !      vcpu_runstate_info              vcpu.h
 ?      xenoprof_init                   xenoprof.h

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


 


Rackspace

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