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

[Xen-changelog] Merged.



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID b9181b1c576fb39bb4d3b088ac3378d77163b4cc
# Parent  3c21a174e8fcbec6e50aa674e3b920ed7de472f2
# Parent  c3cfc4ff3b08b01051e6fa0741e1e014a1307aea
Merged.

diff -r 3c21a174e8fc -r b9181b1c576f install.sh
--- a/install.sh        Sat Nov 26 01:13:51 2005
+++ b/install.sh        Sat Nov 26 01:21:55 2005
@@ -28,7 +28,7 @@
 echo "All done."
 
 [ -x "$(which udevinfo)" ] && \
-  UDEV_VERSION=$(udevinfo -V | sed -e 's/^.*\s\([0-9]\+\)[^0-9]*/\1/')
+  UDEV_VERSION=$(udevinfo -V | sed -e 's/^[^0-9]* 
\([0-9]\{1,\}\)[^0-9]\{0,\}/\1/')
 
 if [ -n "$UDEV_VERSION" ] && [ $UDEV_VERSION -ge 059 ]; then
   cp -f $src/etc/udev/rules.d/*.rules $dst/etc/udev/rules.d/
diff -r 3c21a174e8fc -r b9181b1c576f 
linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c
--- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c        Sat Nov 26 
01:13:51 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c        Sat Nov 26 
01:21:55 2005
@@ -213,55 +213,6 @@
        break;
 #endif
 
-#ifndef __ia64__
-       case IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS: {
-               pgd_t *pgd; 
-               pud_t *pud; 
-               pmd_t *pmd; 
-               unsigned long m2pv, m2p_mfn;    
-               privcmd_m2pmfns_t m; 
-               unsigned long __user *p;
-               int i; 
-
-#if defined (__x86_64__)
-               /* 
-               ** XXX SMH: the below procedure won't work for 64 since 
-               ** we don't have access to the memory which maps the M2P. 
-               ** A proper fix will probably involve moving this 
-               ** functionality to Xen - for now just return an error 
-               ** here rather than GPF'ing in the kernel. 
-               */
-               ret = -EINVAL; 
-               break; 
-#endif
-
-               if (copy_from_user(&m, udata, sizeof(m)))
-                       return -EFAULT;
-
-               m2pv = (unsigned long)machine_to_phys_mapping;
-
-               p = m.arr; 
-
-               for (i=0; i < m.num; i++) { 
-                       pgd = pgd_offset_k(m2pv);
-                       pud = pud_offset(pgd, m2pv);
-                       pmd = pmd_offset(pud, m2pv);
-                       m2p_mfn  = (*(uint64_t *)pmd >> PAGE_SHIFT)&0xFFFFFFFF;
-                       m2p_mfn += pte_index(m2pv);
-
-                       if (put_user(m2p_mfn, p + i))
-                               return -EFAULT;
-
-                       m2pv += (1 << 21); 
-               }
-
-               ret = 0; 
-               break; 
-
-       }
-       break;
-#endif
-
        default:
                ret = -EINVAL;
                break;
diff -r 3c21a174e8fc -r b9181b1c576f 
linux-2.6-xen-sparse/include/asm-xen/linux-public/privcmd.h
--- a/linux-2.6-xen-sparse/include/asm-xen/linux-public/privcmd.h       Sat Nov 
26 01:13:51 2005
+++ b/linux-2.6-xen-sparse/include/asm-xen/linux-public/privcmd.h       Sat Nov 
26 01:21:55 2005
@@ -59,11 +59,6 @@
        unsigned long __user *arr; /* array of mfns - top nibble set on err */
 } privcmd_mmapbatch_t; 
 
-typedef struct privcmd_m2pmfns { 
-       int num;    /* max number of mfns to return */
-       unsigned long __user *arr; /* array of mfns */
-} privcmd_m2pmfns_t; 
-
 typedef struct privcmd_blkmsg
 {
        unsigned long op;
@@ -82,8 +77,6 @@
        _IOC(_IOC_NONE, 'P', 2, sizeof(privcmd_mmap_t))
 #define IOCTL_PRIVCMD_MMAPBATCH                                        \
        _IOC(_IOC_NONE, 'P', 3, sizeof(privcmd_mmapbatch_t))
-#define IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS                       \
-       _IOC(_IOC_READ, 'P', 4, sizeof(unsigned long))
 
 #endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
 
diff -r 3c21a174e8fc -r b9181b1c576f tools/check/check_hotplug
--- a/tools/check/check_hotplug Sat Nov 26 01:13:51 2005
+++ b/tools/check/check_hotplug Sat Nov 26 01:21:55 2005
@@ -7,7 +7,7 @@
    exit 1
 }
 [ -x "$(which udevinfo)" ] && \
-  UDEV_VERSION=$(udevinfo -V | sed -e 's/^.*\s\([0-9]\+\)[^0-9]*/\1/')
+  UDEV_VERSION=$(udevinfo -V | sed -e 's/^[^0-9]* 
\([0-9]\{1,\}\)[^0-9]\{0,\}/\1/')
 
 if [ -n "$UDEV_VERSION" ] && [ $UDEV_VERSION -ge 059 ]; then
   exit 0
diff -r 3c21a174e8fc -r b9181b1c576f tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Sat Nov 26 01:13:51 2005
+++ b/tools/libxc/xc_linux_restore.c    Sat Nov 26 01:21:55 2005
@@ -78,6 +78,7 @@
             pfn = (pte >> PAGE_SHIFT) & 0xffffffff;
             
             if(pfn >= max_pfn) { 
+                /* This "page table page" is probably not one; bail. */
                 ERR("Frame number in type %lu page table is out of range: "
                     "i=%d pfn=0x%lx max_pfn=%lu", 
                     type >> 28, i, pfn, max_pfn);
@@ -111,6 +112,7 @@
     unsigned long mfn, pfn; 
     unsigned int prev_pc, this_pc;
     int verify = 0;
+    int nraces = 0; 
 
     /* The new domain's shared-info frame number. */
     unsigned long shared_info_frame;
@@ -344,8 +346,15 @@
                 if(pt_levels != 3 || pagetype != L1TAB) { 
 
                     if(!uncanonicalize_pagetable(pagetype, page)) {
-                        ERR("failed uncanonicalize pt!\n"); 
-                        goto out; 
+                        /* 
+                        ** Failing to uncanonicalize a page table can be ok
+                        ** under live migration since the pages type may have
+                        ** changed by now (and we'll get an update later). 
+                        */
+                        DPRINTF("PT L%ld race on pfn=%08lx mfn=%08lx\n", 
+                                pagetype >> 28, pfn, mfn); 
+                        nraces++; 
+                        continue; 
                     }
 
                 } 
@@ -394,7 +403,7 @@
         n+= j; /* crude stats */
     }
 
-    DPRINTF("Received all pages\n");
+    DPRINTF("Received all pages (%d races)\n", nraces);
 
     if(pt_levels == 3) { 
 
diff -r 3c21a174e8fc -r b9181b1c576f tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Sat Nov 26 01:13:51 2005
+++ b/tools/libxc/xc_linux_save.c       Sat Nov 26 01:21:55 2005
@@ -502,7 +502,7 @@
                                  unsigned long max_mfn, 
                                  int prot) 
 { 
-    privcmd_m2pmfns_t m2p_mfns; 
+    struct xen_machphys_mfn_list xmml;
     privcmd_mmap_t ioctlx; 
     privcmd_mmap_entry_t *entries; 
     unsigned long m2p_chunks, m2p_size; 
@@ -512,50 +512,45 @@
     m2p_size   = M2P_SIZE(max_mfn); 
     m2p_chunks = M2P_CHUNKS(max_mfn); 
 
-
-    m2p_mfns.num = m2p_chunks; 
-
-    if(!(m2p_mfns.arr = malloc(m2p_chunks * sizeof(unsigned long)))) { 
+    xmml.max_extents = m2p_chunks;
+    if (!(xmml.extent_start = malloc(m2p_chunks * sizeof(unsigned long)))) { 
         ERR("failed to allocate space for m2p mfns!\n"); 
         return NULL; 
     } 
 
-    if (ioctl(xc_handle, IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS, &m2p_mfns) < 0) {
+    if (xc_memory_op(xc_handle, XENMEM_machphys_mfn_list, &xmml) ||
+        (xmml.nr_extents != m2p_chunks)) {
         ERR("xc_get_m2p_mfns:"); 
         return NULL;
     }
 
-    if((m2p = mmap(NULL, m2p_size, prot, 
-                   MAP_SHARED, xc_handle, 0)) == MAP_FAILED) {
+    if ((m2p = mmap(NULL, m2p_size, prot, 
+                    MAP_SHARED, xc_handle, 0)) == MAP_FAILED) {
         ERR("failed to mmap m2p"); 
         return NULL; 
     } 
-    
-
-    if(!(entries = malloc(m2p_chunks * sizeof(privcmd_mmap_entry_t)))) { 
+
+    if (!(entries = malloc(m2p_chunks * sizeof(privcmd_mmap_entry_t)))) { 
         ERR("failed to allocate space for mmap entries!\n"); 
         return NULL; 
     } 
 
-
     ioctlx.num   = m2p_chunks;
     ioctlx.dom   = DOMID_XEN; 
     ioctlx.entry = entries; 
     
-    for(i=0; i < m2p_chunks; i++) { 
-        
+    for (i=0; i < m2p_chunks; i++) { 
         entries[i].va = (unsigned long)(((void *)m2p) + (i * M2P_CHUNK_SIZE)); 
-        entries[i].mfn = m2p_mfns.arr[i]; 
+        entries[i].mfn = xmml.extent_start[i];
         entries[i].npages = M2P_CHUNK_SIZE >> PAGE_SHIFT;
-
-    }
-
-    if((rc = ioctl(xc_handle, IOCTL_PRIVCMD_MMAP, &ioctlx)) < 0) {
+    }
+
+    if ((rc = ioctl(xc_handle, IOCTL_PRIVCMD_MMAP, &ioctlx)) < 0) {
         ERR("ioctl_mmap failed (rc = %d)", rc); 
         return NULL; 
     }
-        
-    free(m2p_mfns.arr); 
+
+    free(xmml.extent_start);
     free(entries); 
 
     return m2p; 
diff -r 3c21a174e8fc -r b9181b1c576f tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Sat Nov 26 01:13:51 2005
+++ b/tools/libxc/xc_private.c  Sat Nov 26 01:21:55 2005
@@ -190,6 +190,7 @@
 {
     DECLARE_HYPERCALL;
     struct xen_memory_reservation *reservation = arg;
+    struct xen_machphys_mfn_list *xmml = arg;
     long ret = -EINVAL;
 
     hypercall.op     = __HYPERVISOR_memory_op;
@@ -214,6 +215,20 @@
             goto out1;
         }
         break;
+    case XENMEM_machphys_mfn_list:
+        if ( mlock(xmml, sizeof(*xmml)) != 0 )
+        {
+            PERROR("Could not mlock");
+            goto out1;
+        }
+        if ( mlock(xmml->extent_start,
+                   xmml->max_extents * sizeof(unsigned long)) != 0 )
+        {
+            PERROR("Could not mlock");
+            safe_munlock(xmml, sizeof(*xmml));
+            goto out1;
+        }
+        break;
     }
 
     ret = do_xen_hypercall(xc_handle, &hypercall);
@@ -226,6 +241,11 @@
         if ( reservation->extent_start != NULL )
             safe_munlock(reservation->extent_start,
                          reservation->nr_extents * sizeof(unsigned long));
+        break;
+    case XENMEM_machphys_mfn_list:
+        safe_munlock(xmml, sizeof(*xmml));
+        safe_munlock(xmml->extent_start,
+                     xmml->max_extents * sizeof(unsigned long));
         break;
     }
 
diff -r 3c21a174e8fc -r b9181b1c576f tools/xm-test/configure.ac
--- a/tools/xm-test/configure.ac        Sat Nov 26 01:13:51 2005
+++ b/tools/xm-test/configure.ac        Sat Nov 26 01:21:55 2005
@@ -35,6 +35,7 @@
     Makefile 
     ramdisk/Makefile
     tests/Makefile
+    tests/_sanity/Makefile
     tests/block-list/Makefile
     tests/block-create/Makefile
     tests/block-destroy/Makefile
diff -r 3c21a174e8fc -r b9181b1c576f tools/xm-test/runtest.sh
--- a/tools/xm-test/runtest.sh  Sat Nov 26 01:13:51 2005
+++ b/tools/xm-test/runtest.sh  Sat Nov 26 01:21:55 2005
@@ -14,6 +14,7 @@
     echo "  -q          : run a quick test set"
     echo "  -e <email>  : set email address for report"
     echo "  -s <report> : just submit report <report>"
+    echo "  -h | --help : show this help"
 }
 
 # Just submit the report
@@ -83,6 +84,15 @@
     # See if xend is running
     if ! xm list >/dev/null 2>&1; then
        echo "'xm list' failed: is xend running?"
+       exit 1
+    fi
+
+    # Run a few sample tests to make sure things are working
+    # before we take the plunge
+    echo "Running sanity checks..."
+    make -C tests/_sanity check 2>&1 | grep REASON
+    if [ $? -eq 0 ]; then
+       echo "Sanity checks failed"
        exit 1
     fi
 
@@ -119,7 +129,7 @@
 # Run the tests
 run_tests() {
     output=$1
-    echo Running tests...
+    echo Running real tests...
     TEST_VERBOSE=1 make -k check > $output 2>&1
 }
 
@@ -209,6 +219,10 @@
       -s)
          run=no
          ;;
+      -h|--help)
+          usage
+          exit 0
+          ;;
       *)
          REPORT=$1
          break
diff -r 3c21a174e8fc -r b9181b1c576f 
tools/xm-test/tests/network-attach/network_utils.py
--- a/tools/xm-test/tests/network-attach/network_utils.py       Sat Nov 26 
01:13:51 2005
+++ b/tools/xm-test/tests/network-attach/network_utils.py       Sat Nov 26 
01:21:55 2005
@@ -10,7 +10,7 @@
         run = console.runCmd("ifconfig -a | grep eth")
     except ConsoleError, e:
         FAIL(str(e))
-    return = len(run['output'].splitlines())
+    return len(run['output'].splitlines())
 
 def network_attach(domain_name, console):
     eths_before = count_eth(console)
diff -r 3c21a174e8fc -r b9181b1c576f xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c   Sat Nov 26 01:13:51 2005
+++ b/xen/arch/x86/shadow32.c   Sat Nov 26 01:21:55 2005
@@ -800,13 +800,10 @@
 
     /*
      * Then free monitor_table.
-     * Note: for VMX guest, only BSP need do this free.
      */
-    if (!(VMX_DOMAIN(v) && v->vcpu_id)) {
-        mfn = pagetable_get_pfn(v->arch.monitor_table);
-        unmap_domain_page(v->arch.monitor_vtable);
-        free_domheap_page(&frame_table[mfn]);
-    }
+    mfn = pagetable_get_pfn(v->arch.monitor_table);
+    unmap_domain_page(v->arch.monitor_vtable);
+    free_domheap_page(&frame_table[mfn]);
 
     v->arch.monitor_table = mk_pagetable(0);
     v->arch.monitor_vtable = 0;
diff -r 3c21a174e8fc -r b9181b1c576f xen/arch/x86/shadow_public.c
--- a/xen/arch/x86/shadow_public.c      Sat Nov 26 01:13:51 2005
+++ b/xen/arch/x86/shadow_public.c      Sat Nov 26 01:21:55 2005
@@ -297,13 +297,11 @@
 
     /*
      * free monitor_table.
-     * Note: for VMX guest, only BSP need do this free.
      */
-    if (!(VMX_DOMAIN(v) && v->vcpu_id)) {
-        mfn = pagetable_get_pfn(v->arch.monitor_table);
-        unmap_domain_page(v->arch.monitor_vtable);
-        free_domheap_page(&frame_table[mfn]);
-    }
+    mfn = pagetable_get_pfn(v->arch.monitor_table);
+    unmap_domain_page(v->arch.monitor_vtable);
+    free_domheap_page(&frame_table[mfn]);
+
     v->arch.monitor_table = mk_pagetable(0);
     v->arch.monitor_vtable = 0;
 }
@@ -396,18 +394,15 @@
 
     /*
      * Then free monitor_table.
-     * Note: for VMX guest, only BSP need do this free.
      */
-    if (!(VMX_DOMAIN(v) && v->vcpu_id)) {
-        mfn = pagetable_get_pfn(v->arch.monitor_table);
-        unmap_domain_page(v->arch.monitor_vtable);
-        free_domheap_page(&frame_table[mfn]);
-    }
+    mfn = pagetable_get_pfn(v->arch.monitor_table);
+    unmap_domain_page(v->arch.monitor_vtable);
+    free_domheap_page(&frame_table[mfn]);
 
     v->arch.monitor_table = mk_pagetable(0);
     v->arch.monitor_vtable = 0;
 }
-#endif 
+#endif
 
 static void
 shadow_free_snapshot(struct domain *d, struct out_of_sync_entry *entry)
diff -r 3c21a174e8fc -r b9181b1c576f xen/arch/x86/x86_32/mm.c
--- a/xen/arch/x86/x86_32/mm.c  Sat Nov 26 01:13:51 2005
+++ b/xen/arch/x86/x86_32/mm.c  Sat Nov 26 01:21:55 2005
@@ -27,6 +27,7 @@
 #include <asm/page.h>
 #include <asm/flushtlb.h>
 #include <asm/fixmap.h>
+#include <public/memory.h>
 
 extern l1_pgentry_t *mapcache;
 
@@ -184,6 +185,41 @@
     }
 }
 
+long arch_memory_op(int op, void *arg)
+{
+    struct xen_machphys_mfn_list xmml;
+    unsigned long mfn;
+    unsigned int i, max;
+    long rc = 0;
+
+    switch ( op )
+    {
+    case XENMEM_machphys_mfn_list:
+        if ( copy_from_user(&xmml, arg, sizeof(xmml)) )
+            return -EFAULT;
+
+        max = min_t(unsigned int, xmml.max_extents, mpt_size >> 21);
+
+        for ( i = 0; i < max; i++ )
+        {
+            mfn = l2e_get_pfn(idle_pg_table_l2[l2_linear_offset(
+                RDWR_MPT_VIRT_START + (i << 21))]) + l1_table_offset(i << 21);
+            if ( put_user(mfn, &xmml.extent_start[i]) )
+                return -EFAULT;
+        }
+
+        if ( put_user(i, &((struct xen_machphys_mfn_list *)arg)->nr_extents) )
+            return -EFAULT;
+
+        break;
+
+    default:
+        rc = -ENOSYS;
+        break;
+    }
+
+    return rc;
+}
 
 long do_stack_switch(unsigned long ss, unsigned long esp)
 {
diff -r 3c21a174e8fc -r b9181b1c576f xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c  Sat Nov 26 01:13:51 2005
+++ b/xen/arch/x86/x86_64/mm.c  Sat Nov 26 01:21:55 2005
@@ -28,6 +28,7 @@
 #include <asm/flushtlb.h>
 #include <asm/fixmap.h>
 #include <asm/msr.h>
+#include <public/memory.h>
 
 struct pfn_info *alloc_xen_pagetable(void)
 {
@@ -172,6 +173,51 @@
             page_set_owner(&frame_table[m2p_start_mfn+i], dom_xen);
         }
     }
+}
+
+long arch_memory_op(int op, void *arg)
+{
+    struct xen_machphys_mfn_list xmml;
+    l3_pgentry_t l3e;
+    l2_pgentry_t l2e;
+    unsigned long mfn, v;
+    unsigned int i;
+    long rc = 0;
+
+    switch ( op )
+    {
+    case XENMEM_machphys_mfn_list:
+        if ( copy_from_user(&xmml, arg, sizeof(xmml)) )
+            return -EFAULT;
+
+        for ( v = RDWR_MPT_VIRT_START; v != RDWR_MPT_VIRT_END; v += 1 << 21 )
+        {
+            l3e = l4e_to_l3e(idle_pg_table[l4_table_offset(v)])[
+                l3_table_offset(v)];
+            if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) )
+                break;
+            l2e = l3e_to_l2e(l3e)[l2_table_offset(v)];
+            if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
+                break;
+            mfn = l2e_get_pfn(l2e) + l1_table_offset(v);
+            if ( i == xmml.max_extents )
+                break;
+            if ( put_user(mfn, &xmml.extent_start[i]) )
+                return -EFAULT;
+            i++;
+        }
+
+        if ( put_user(i, &((struct xen_machphys_mfn_list *)arg)->nr_extents) )
+            return -EFAULT;
+
+        break;
+
+    default:
+        rc = -ENOSYS;
+        break;
+    }
+
+    return rc;
 }
 
 long do_stack_switch(unsigned long ss, unsigned long esp)
diff -r 3c21a174e8fc -r b9181b1c576f xen/common/memory.c
--- a/xen/common/memory.c       Sat Nov 26 01:13:51 2005
+++ b/xen/common/memory.c       Sat Nov 26 01:21:55 2005
@@ -215,7 +215,7 @@
         break;
 
     default:
-        rc = -ENOSYS;
+        rc = arch_memory_op(op, arg);
         break;
     }
 
diff -r 3c21a174e8fc -r b9181b1c576f xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h Sat Nov 26 01:13:51 2005
+++ b/xen/include/asm-ia64/mm.h Sat Nov 26 01:21:55 2005
@@ -440,4 +440,7 @@
 #define __gpa_to_mpa(_d, gpa)   \
     ((__gpfn_to_mfn((_d),(gpa)>>PAGE_SHIFT)<<PAGE_SHIFT)|((gpa)&~PAGE_MASK))
 
+/* Arch-specific portion of memory_op hypercall. */
+#define arch_memory_op(op, arg) (-ENOSYS)
+
 #endif /* __ASM_IA64_MM_H__ */
diff -r 3c21a174e8fc -r b9181b1c576f xen/include/asm-x86/mm.h
--- a/xen/include/asm-x86/mm.h  Sat Nov 26 01:13:51 2005
+++ b/xen/include/asm-x86/mm.h  Sat Nov 26 01:21:55 2005
@@ -379,6 +379,9 @@
 
 void propagate_page_fault(unsigned long addr, u16 error_code);
 
-extern int __sync_lazy_execstate(void);
+int __sync_lazy_execstate(void);
+
+/* Arch-specific portion of memory_op hypercall. */
+long arch_memory_op(int op, void *arg);
 
 #endif /* __ASM_X86_MM_H__ */
diff -r 3c21a174e8fc -r b9181b1c576f xen/include/public/memory.h
--- a/xen/include/public/memory.h       Sat Nov 26 01:13:51 2005
+++ b/xen/include/public/memory.h       Sat Nov 26 01:21:55 2005
@@ -60,6 +60,34 @@
 #define XENMEM_current_reservation  3
 #define XENMEM_maximum_reservation  4
 
+/*
+ * Returns a list of MFN bases of 2MB extents comprising the machine_to_phys
+ * mapping table. Architectures which do not have a m2p table do not implement
+ * this command.
+ * arg == addr of xen_machphys_mfn_list_t.
+ */
+#define XENMEM_machphys_mfn_list    5
+typedef struct xen_machphys_mfn_list {
+    /*
+     * Size of the 'extent_start' array. Fewer entries will be filled if the
+     * machphys table is smaller than max_extents * 2MB.
+     */
+    unsigned int max_extents;
+    
+    /*
+     * Pointer to buffer to fill with list of extent starts. If there are
+     * any large discontiguities in the machine address space, 2MB gaps in
+     * the machphys table will be represented by an MFN base of zero.
+     */
+    unsigned long *extent_start;
+
+    /*
+     * Number of extents written to the above array. This will be smaller
+     * than 'max_extents' if the machphys table is smaller than max_e * 2MB.
+     */
+    unsigned int nr_extents;
+} xen_machphys_mfn_list_t;
+
 #endif /* __XEN_PUBLIC_MEMORY_H__ */
 
 /*
diff -r 3c21a174e8fc -r b9181b1c576f tools/xm-test/tests/_sanity/01_domu_proc.py
--- /dev/null   Sat Nov 26 01:13:51 2005
+++ b/tools/xm-test/tests/_sanity/01_domu_proc.py       Sat Nov 26 01:21:55 2005
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2005
+# Author: Dan Smith <danms@xxxxxxxxxx>
+
+#
+# Test that the library and ramdisk are working to the point
+# that we can start a DomU and read /proc
+#
+
+from XmTestLib import *
+
+import re
+
+domain = XmTestDomain()
+
+try:
+    domain.start()
+except DomainError, e:
+    FAIL(str(e))
+
+try:
+    console = XmConsole(domain.getName())
+    console.sendInput("foo")
+    run = console.runCmd("cat /proc/cpuinfo")
+except ConsoleError, e:
+    FAIL(str(e))
+
+if run["return"] != 0:
+    FAIL("Unable to read /proc/cpuinfo")
+
+if not re.search("processor", run["output"]):
+    print run["output"]
+    FAIL("/proc/cpuinfo looks wrong!")
diff -r 3c21a174e8fc -r b9181b1c576f tools/xm-test/tests/_sanity/Makefile.am
--- /dev/null   Sat Nov 26 01:13:51 2005
+++ b/tools/xm-test/tests/_sanity/Makefile.am   Sat Nov 26 01:21:55 2005
@@ -0,0 +1,21 @@
+
+SUBDIRS =
+
+TESTS = 01_domu_proc.test 
+
+XFAIL_TESTS = 
+
+EXTRA_DIST = $(TESTS) $(XFAIL_TESTS)
+
+TESTS_ENVIRONMENT=@TENV@
+
+%.test: %.py
+       cp $< $@
+       chmod +x $@
+
+clean-local: am_config_clean-local
+
+am_config_clean-local:
+       rm -f *test
+       rm -f *log
+       rm -f *~

_______________________________________________
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®.