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] Merged.

# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 0dd531d4af4690ce99688b538fcd13a29f3af88a
# Parent  eb3ecf6abe87d6664f3e64cb19e2171eb65ba1c3
# Parent  ad2720178268926f8b94271f8d3574dba7b23e55
Merged.

diff -r eb3ecf6abe87 -r 0dd531d4af46 .hgignore
--- a/.hgignore Fri Nov 18 13:28:38 2005
+++ b/.hgignore Fri Nov 18 13:30:47 2005
@@ -171,6 +171,7 @@
 ^tools/xentrace/tbctl$
 ^tools/xentrace/xenctx$
 ^tools/xentrace/xentrace$
+^tools/xm-test/ramdisk/buildroot
 ^xen/BLOG$
 ^xen/TAGS$
 ^xen/arch/x86/asm-offsets\.s$
diff -r eb3ecf6abe87 -r 0dd531d4af46 docs/man/xm.pod.1
--- a/docs/man/xm.pod.1 Fri Nov 18 13:28:38 2005
+++ b/docs/man/xm.pod.1 Fri Nov 18 13:30:47 2005
@@ -626,12 +626,62 @@
 
 =item B<block-attach> I<domain-id> I<be-dev> I<fe-dev> I<mode> I<[bedomain-id]>
 
-Create a new virtual block device
+Create a new virtual block device.  This will trigger a hotplug event
+for the guest.
+
+B<OPTIONS>
+
+=over 4
+
+=item I<domain-id>
+
+The domain id of the guest domain that the device will be attached to.
+
+=item I<be-dev>
+
+The device in the backend domain (usually domain 0) to be exported.
+This can be specified as a physical partition (phy:sda7) or as a file
+mounted as loopback (file://path/to/loop.iso).
+
+=item I<fe-dev>
+
+How the device should be presented to the guest domain.  It can be
+specified as either a symbolic name, such as /dev/hdc, for common
+devices, or by device id, such as 0x1400 (/dev/hdc device id in hex).
+
+=item I<mode>
+
+The access mode for the device from the guest domain.  Supported modes
+are I<rw> (read/write) or I<ro> (read-only).
+
+=item I<bedomain-id>
+
+The back end domain hosting the device.  This defaults to domain 0.
+
+=back
+
+B<EXAMPLES>
+
+=over 4
+
+=item I<Mount an ISO as a Disk>
+
+xm block-attach guestdomain file://path/to/dsl-2.0RC2.iso /dev/hdc ro
+
+This will mount the dsl iso as /dev/hdc in the guestdomain as a read
+only device.  This will probably not be detected as a cdrom by the
+guest, but mounting /dev/hdc manually will work.
+
+=back
 
 =item B<block-detach> I<domain-id> I<devid>
 
-Destroy a domain's virtual block device. DevId may either be a device
-ID or the device name as mounted in the guest.
+Destroy a domain's virtual block device. devid B<must> be the device
+id given to the device by domain 0.  You will need to run I<xm
+block-list> to determine that number.
+
+FIXME: this is currently B<broken>.  Even though a block device is
+removed from domU, it appears to still be allocated in the domain 0.
 
 =item B<block-list> I<domain-id>
 
@@ -722,7 +772,7 @@
 
 =head1 SEE ALSO
 
-B<xmdomain.cfg>(5)
+B<xmdomain.cfg>(5), B<xentop>(1)
 
 BVT scheduling paper: K.J. Duda and D.R. Cheriton. Borrowed Virtual
 Time (BVT) scheduling: supporting latency-sensitive threads in a
diff -r eb3ecf6abe87 -r 0dd531d4af46 docs/man/xmdomain.cfg.pod.5
--- a/docs/man/xmdomain.cfg.pod.5       Fri Nov 18 13:28:38 2005
+++ b/docs/man/xmdomain.cfg.pod.5       Fri Nov 18 13:30:47 2005
@@ -1,6 +1,6 @@
 =head1 NAME
 
-xmdomain.cfg - xm domain create config file format
+xmdomain.cfg - xm domain config file format
 
 =head1 SYNOPSIS
 
@@ -10,17 +10,22 @@
 
 =head1 DESCRIPTION
 
-The xm(1) program uses python executable config files to define
+The B<xm>(1) program uses python executable config files to define
 domains to create from scratch.  Each of these config files needs to
 contain a number of required options, and may specify many more.
 
-Domain configuration files live in /etc/xen by default, though the
-full path to the config file must be specified in the I<xm create>
-command, so they can exist anywhere in the filesystem.
-
-/etc/xen/auto is a special case however, as domain config files in
-that directory will be started automatically at system boot if the
-xendomain init script is enabled.
+Domain configuration files live in /etc/xen by default, if you store
+config files anywhere else the full path to the config file must be
+specified in the I<xm create> command.
+
+/etc/xen/auto is a special case.  Domain config files in that
+directory will be started automatically at system boot if the
+xendomain init script is enabled.  The contents of /etc/xen/auto
+should be symlinks to files in /etc/xen to allow I<xm create> to be
+used without full paths.
+
+Options are specified by I<name = value> statements in the
+xmdomain.cfg files.
 
 =head1 OPTIONS
 
@@ -29,50 +34,157 @@
 
 =over 4
 
-=item I<kernel>
-
-The kernel image used in the domain.
-
-=item I<ramdisk>
-
-The initial ramdisk to be used in the domain.  Default xen domU
-kernels do not usually need a ramdisk.
-
-=item I<memory>
-
-The amount of memory, in megabytes to allocate to the domain when it
+=item B<kernel>
+
+The kernel image for the domain.  The format of the parameter is the
+fully qualified path to the kernel image file,
+i.e. I</boot/vmlinuz-2.6.12-xenU>.
+
+
+=item B<ramdisk>
+
+The initial ramdisk for the domain.  The format of the parameter is
+the fully qualified path to the initrd, i.e. I</boot/initrd.gz>.  On
+many Linux distros you will not need a ramdisk if using the default
+xen kernel.
+
+=item B<memory>
+
+The amount of RAM, in megabytes, to allocate to the domain when it
 starts.  Allocating insufficient memory for a domain may produce
-extremely bizarre behavior.
-
-=item I<name>
-
-A unique name for the domain.  You can not create 2 domains with the
-same name.
-
-=item I<root>
-
-Root stanza for the domain (required for Linux domains).
-
-=item I<disk>
-
-An array of disk stanzas 
-
-=back
-
-A bare minimal config file example might be as follows:
-
-    kernel = "/boot/vmlinuz-2.6-xenU"
-    memory = 128
-    name = "MyLinux"      
-    root = "/dev/hda1 ro"
+extremely bizarre behavior.  If there isn't enough free memory left on
+the machine to fulfill this request, the domain will fail to start.
+
+Xen does not support overcommit of memory, so the total memory of all
+guests (+ 64 MB needed for Xen) must be less than or equal to the
+physical RAM in the machine.
+
+=item B<name>
+
+A unique name for the domain.  Attempting to create two domains with
+the same name will cause an error.
+
+=item B<root>
+
+Specifies the root device for the domain.  This is required for Linux
+domains, and possibly other OSes.
+
+=item B<nics>
+
+The number of network interfaces allocated to the domain on boot.  It
+defaults to 1.
+
+=item B<disk>
+
+An array of block device stanzas, in the form:
+
+    disk = [ "stanza1", "stanza2", ... ]
+
+Each stanza has 3 terms, seperated by commas,
+"backend-dev,frontend-dev,mode".
+
+=over 4
+
+=item I<backend-dev>
+
+The device in the backend domain that will be exported to the guest
+(frontend) domain.  Supported formats include:
+
+I<phy:device> - export the physical device listed.  The device can be
+in symbolic form, as in sda7, or as the hex major/minor number, as in
+0x301 (which is hda1).
+
+I<file://path/to/file> - export the file listed as a loopback device.
+This will take care of the loopback setup before exporting the device.
+
+=item I<frontend-dev>
+
+How the device should appear in the guest domain.  The device can be
+in symbolic form, as in sda7, or as the hex major/minor number, as in
+0x301 (which is hda1).
+
+=item I<mode>
+
+The access mode for the device.  There are currently 2 valid options,
+I<r> (read-only), I<w> (read/write).
+
+=back
+
+=item B<vif>
+
+An arrray of virtual interface stanzas in the form:
+
+    vif = [ "stanza1", "stanza2", ... ]
+
+Each stanza specifies a set of I<name = value> options separated by
+commas, in the form: "name1=value1, name2=value2, ..."
+
+B<OPTIONS>
+
+=over 4
+
+=item I<bridge>
+
+The network bridge to be used for this device.  This is especially
+needed if multiple bridges exist on the machine.
+
+=item I<mac>
+
+The MAC address for the virtual interface.  If mac is not specified,
+one will be randomly chosen by xen with the 00:16:3e vendor id prefix.
+
+=back
+
+=back
 
 =head1 ADDITIONAL OPTIONS
 
-=over 4
-
-=item I<builder>
-
-=back 
+The following options are also supported in the config file, though
+are far more rarely used.
+
+=over 4
+
+=item B<builder>
+
+Which builder should be used to construct the domain.  This defaults
+to the I<linux> if not specified, which is the builder for
+paravirtualized Linux domains.
+
+=item B<cpu>
+
+Specifies which CPU the domain should be started on, where 0 specifies
+the first cpu, 1 the second, and so on.  This defaults to -1, which
+means Xen is free to pick which CPU to start on.
+
+=item B<extra>
+
+Extra information to append to the end of the kernel parameter line.
+The format is a string, the contents of which can be anything that the
+kernel supports.  For instance:
+
+    extra = "4"
+
+Will cause the domain to boot to runlevel 4.
+
+=item B<nfs_server>
+
+The IP address of the NFS server to use as the root device for the
+domain.  In order to do this you'll need to specify I<root=/dev/nfs>,
+and specify I<nfs_root>.
+
+=item B<nfs_root>
+
+The directory on the NFS server to be used as the root filesystem.
+Specified as a fully qualified path, i.e. I</full/path/to/root/dir>.
+
+=item B<vcpus>
+
+The number of virtual cpus to allocate to the domain.  In order to use
+this the xen kernel must be compiled with SMP support.
+
+This defaults to 1, meaning running the domain as a UP.
+
+=back
 
 =head1 DOMAIN SHUTDOWN OPTIONS
 
@@ -81,17 +193,17 @@
 
 =over 4
 
-=item I<shutdown>
+=item B<on_shutdown>
 
 Triggered on either an I<xm shutdown> or graceful shutdown from inside
 the DomU.
 
-=item I<reboot>
+=item B<on_reboot>
 
 Triggered on either an I<xm reboot> or graceful reboot from inside the
 DomU.
 
-=item I<crash>
+=item B<on_crash>
 
 Triggered when a DomU goes to the crashed state for any reason.
 
@@ -101,23 +213,23 @@
 
 =over 4
 
-=item I<destroy>
+=item B<destroy>
 
 The domain will be cleaned up completely.  No attempt at respawning
 will occur.  This is what a typical shutdown would look like.
 
-=item I<restart>
+=item B<restart>
 
 The domain will be restarted with the same name as the old domain.
 This is what a typical reboot would look like.
 
-=item I<preserve>
+=item B<preserve>
 
 The domain will not be cleaned up at all.  This is often useful for
 crash state domains which ensures that enough evidence is to debug the
 real issue.
 
-=item I<rename-restart>
+=item B<rename-restart>
 
 The old domain will not be cleaned up, but will be renamed so a new
 domain can be restarted in it's place.  The old domain will be renamed with
@@ -127,6 +239,39 @@
 
 =back
 
+=head1 EXAMPLES
+
+The following are quick examples of ways that domains might be
+configured.  They should not be considered an exhaustive set.
+
+=over 4
+
+=item I<A Loopback File as Root>
+
+    kernel = "/boot/vmlinuz-2.6-xenU"
+    memory = 128
+    name = "MyLinux"      
+    root = "/dev/hda1 ro"
+    disk = [ "file:/var/xen/mylinux.img,hda1,w" ]
+
+This creates a domain called MyLinux with 128 MB of memory using a
+default xen kernel, and the file /var/xen/mylinux.img loopback mounted
+at hda1, which is the root filesystem.
+
+=item I<NFS Root>
+
+FIXME: write me
+
+=item I<LVM Root>
+
+FIXME: write me
+
+=item I<Two Networks>
+
+FIXME: write me
+
+=back
+
 =head1 SEE ALSO
 
 B<xm>(1)
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c        Fri Nov 18 
13:28:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c        Fri Nov 18 
13:30:47 2005
@@ -37,16 +37,10 @@
 #include <asm-xen/balloon.h>
 #include <asm-xen/xen-public/memory.h>
 #include <linux/module.h>
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #include <linux/percpu.h>
 #include <asm/tlbflush.h>
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-#define pte_offset_kernel pte_offset
-#define pud_t pgd_t
-#define pud_offset(d, va) d
-#elif defined(CONFIG_X86_64)
+
+#ifdef CONFIG_X86_64
 #define pmd_val_ma(v) (v).pmd
 #else
 #ifdef CONFIG_X86_PAE
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c     Fri Nov 18 13:28:38 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c     Fri Nov 18 13:30:47 2005
@@ -121,11 +121,7 @@
 
 /* Upcall to generic IRQ layer. */
 #ifdef CONFIG_X86
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
 extern fastcall unsigned int do_IRQ(struct pt_regs *regs);
-#else
-extern asmlinkage unsigned int do_IRQ(struct pt_regs *regs);
-#endif
 #if defined (__i386__)
 #define IRQ_REG orig_eax
 #elif defined (__x86_64__)
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c
--- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Fri Nov 18 
13:28:38 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Fri Nov 18 
13:30:47 2005
@@ -91,7 +91,6 @@
 static DECLARE_WORK(balloon_worker, balloon_process, NULL);
 static struct timer_list balloon_timer;
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 /* Use the private and mapping fields of struct page as a list. */
 #define PAGE_TO_LIST(p) ((struct list_head *)&p->private)
 #define LIST_TO_PAGE(l)                                \
@@ -102,19 +101,6 @@
                p->mapping = NULL;              \
                p->private = 0;                 \
        } while(0)
-#else
-/* There's a dedicated list field in struct page we can use.    */
-#define PAGE_TO_LIST(p) ( &p->list )
-#define LIST_TO_PAGE(l) ( list_entry(l, struct page, list) )
-#define UNLIST_PAGE(p)  ( list_del(&p->list) )
-#define pte_offset_kernel pte_offset
-#define pud_t pgd_t
-#define pud_offset(d, va) d
-#define pud_none(d) 0
-#define pud_bad(d) 0
-#define subsys_initcall(_fn) __initcall(_fn)
-#define pfn_to_page(_pfn) (mem_map + (_pfn))
-#endif
 
 #define IPRINTK(fmt, args...) \
        printk(KERN_INFO "xen_mem: " fmt, ##args)
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Nov 18 
13:28:38 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Fri Nov 18 
13:30:47 2005
@@ -57,6 +57,7 @@
 
 #define BLKIF_STATE_DISCONNECTED 0
 #define BLKIF_STATE_CONNECTED    1
+#define BLKIF_STATE_SUSPENDED    2
 
 #define MAXIMUM_OUTSTANDING_BLOCK_REQS \
     (BLKIF_MAX_SEGMENTS_PER_REQUEST * BLKIF_RING_SIZE)
@@ -75,7 +76,7 @@
 static void blkif_restart_queue(void *arg);
 static void blkif_recover(struct blkfront_info *);
 static void blkif_completion(struct blk_shadow *);
-static void blkif_free(struct blkfront_info *);
+static void blkif_free(struct blkfront_info *, int);
 
 
 /**
@@ -144,7 +145,7 @@
 
        DPRINTK("blkfront_resume: %s\n", dev->nodename);
 
-       blkif_free(info);
+       blkif_free(info, 1);
 
        err = talk_to_backend(dev, info);
        if (!err)
@@ -207,7 +208,7 @@
        if (message)
                xenbus_dev_fatal(dev, err, "%s", message);
  destroy_blkring:
-       blkif_free(info);
+       blkif_free(info, 0);
  out:
        return err;
 }
@@ -252,7 +253,7 @@
 
        return 0;
 fail:
-       blkif_free(info);
+       blkif_free(info, 0);
        return err;
 }
 
@@ -295,7 +296,8 @@
        unsigned int binfo;
        int err;
 
-        if (info->connected == BLKIF_STATE_CONNECTED)
+        if( (info->connected == BLKIF_STATE_CONNECTED) || 
+           (info->connected == BLKIF_STATE_SUSPENDED) ) 
                return;
 
        DPRINTK("blkfront.c:connect:%s.\n", info->xbdev->otherend);
@@ -354,7 +356,7 @@
 
        DPRINTK("blkfront_remove: %s removed\n", dev->nodename);
 
-       blkif_free(info);
+       blkif_free(info, 0);
 
        kfree(info);
 
@@ -569,6 +571,7 @@
                        req->nr_sectors, req->buffer,
                        rq_data_dir(req) ? "write" : "read");
 
+
                blkdev_dequeue_request(req);
                if (blkif_queue_request(req)) {
                        blk_requeue_request(rq, req);
@@ -643,11 +646,12 @@
        return IRQ_HANDLED;
 }
 
-static void blkif_free(struct blkfront_info *info)
+static void blkif_free(struct blkfront_info *info, int suspend)
 {
        /* Prevent new requests being issued until we fix things up. */
        spin_lock_irq(&blkif_io_lock);
-       info->connected = BLKIF_STATE_DISCONNECTED;
+       info->connected = suspend ? 
+               BLKIF_STATE_SUSPENDED : BLKIF_STATE_DISCONNECTED; 
        spin_unlock_irq(&blkif_io_lock);
 
        /* Free resources associated with old device channel. */
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c        Fri Nov 18 
13:28:38 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c        Fri Nov 18 
13:30:47 2005
@@ -128,12 +128,7 @@
 /* Common transmit-kick routine. */
 static void __xencons_tx_flush(void);
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 static struct tty_driver *xencons_driver;
-#else
-static struct tty_driver xencons_driver;
-#endif
-
 
 /******************** Kernel console driver ********************************/
 
@@ -170,18 +165,11 @@
        }
 }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 static struct tty_driver *kcons_device(struct console *c, int *index)
 {
        *index = c->index;
        return xencons_driver;
 }
-#else
-static kdev_t kcons_device(struct console *c)
-{
-       return MKDEV(TTY_MAJOR, (xc_mode == XC_SERIAL) ? 64 : 1);
-}
-#endif
 
 static struct console kcons_info = {
        .device = kcons_device,
@@ -189,13 +177,8 @@
        .index  = -1,
 };
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #define __RETCODE 0
 static int __init xen_console_init(void)
-#else
-#define __RETCODE
-void xen_console_init(void)
-#endif
 {
        if (xen_init() < 0)
                return __RETCODE;
@@ -204,10 +187,8 @@
                if (xc_mode == XC_DEFAULT)
                        xc_mode = XC_SERIAL;
                kcons_info.write = kcons_write_dom0;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
                if (xc_mode == XC_SERIAL)
                        kcons_info.flags |= CON_ENABLED;
-#endif
        } else {
                if (xc_mode == XC_DEFAULT)
                        xc_mode = XC_TTY;
@@ -237,9 +218,7 @@
 
        return __RETCODE;
 }
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 console_initcall(xen_console_init);
-#endif
 
 /*** Useful function for console debugging -- goes straight to Xen. ***/
 asmlinkage int xprintk(const char *fmt, ...)
@@ -283,15 +262,8 @@
 
 /******************** User-space console driver (/dev/console) ************/
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #define DRV(_d)         (_d)
 #define TTY_INDEX(_tty) ((_tty)->index)
-#else
-static int xencons_refcount;
-static struct tty_struct *xencons_table[MAX_NR_CONSOLES];
-#define DRV(_d)         (&(_d))
-#define TTY_INDEX(_tty) (MINOR((_tty)->device) - xencons_driver.minor_start)
-#endif
 
 static struct termios *xencons_termios[MAX_NR_CONSOLES];
 static struct termios *xencons_termios_locked[MAX_NR_CONSOLES];
@@ -484,7 +456,6 @@
        return 1;
 }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 static int xencons_write(
        struct tty_struct *tty,
        const unsigned char *buf,
@@ -509,42 +480,6 @@
 
        return i;
 }
-#else
-static int xencons_write(
-       struct tty_struct *tty, 
-       int from_user,
-       const u_char *buf, 
-       int count)
-{
-       int i;
-       unsigned long flags;
-
-       if (from_user && verify_area(VERIFY_READ, buf, count))
-               return -EINVAL;
-
-       if (TTY_INDEX(tty) != 0)
-               return count;
-
-       spin_lock_irqsave(&xencons_lock, flags);
-
-       for (i = 0; i < count; i++) {
-               char ch;
-               if (from_user)
-                       __get_user(ch, buf + i);
-               else
-                       ch = buf[i];
-               if (!__xencons_put_char(ch))
-                       break;
-       }
-
-       if (i != 0)
-               __xencons_tx_flush();
-
-       spin_unlock_irqrestore(&xencons_lock, flags);
-
-       return i;
-}
-#endif
 
 static void xencons_put_char(struct tty_struct *tty, u_char ch)
 {
@@ -629,7 +564,6 @@
        }
 }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 static struct tty_operations xencons_ops = {
        .open = xencons_open,
        .close = xencons_close,
@@ -685,7 +619,6 @@
        .con_scrolldelta =      DUMMY,
 };
 #endif
-#endif
 
 static int __init xencons_init(void)
 {
@@ -699,19 +632,10 @@
 
        xencons_ring_init();
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
        xencons_driver = alloc_tty_driver((xc_mode == XC_SERIAL) ? 
                                          1 : MAX_NR_CONSOLES);
        if (xencons_driver == NULL)
                return -ENOMEM;
-#else
-       memset(&xencons_driver, 0, sizeof(struct tty_driver));
-       xencons_driver.magic       = TTY_DRIVER_MAGIC;
-       xencons_driver.refcount    = &xencons_refcount;
-       xencons_driver.table       = xencons_table;
-       xencons_driver.num         =
-               (xc_mode == XC_SERIAL) ? 1 : MAX_NR_CONSOLES;
-#endif
 
        DRV(xencons_driver)->major           = TTY_MAJOR;
        DRV(xencons_driver)->type            = TTY_DRIVER_TYPE_SERIAL;
@@ -735,37 +659,18 @@
                DRV(xencons_driver)->name_base   = xc_num;
        }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
        tty_set_operations(xencons_driver, &xencons_ops);
-#else
-       xencons_driver.open            = xencons_open;
-       xencons_driver.close           = xencons_close;
-       xencons_driver.write           = xencons_write;
-       xencons_driver.write_room      = xencons_write_room;
-       xencons_driver.put_char        = xencons_put_char;
-       xencons_driver.flush_chars     = xencons_flush_chars;
-       xencons_driver.chars_in_buffer = xencons_chars_in_buffer;
-       xencons_driver.send_xchar      = xencons_send_xchar;
-       xencons_driver.flush_buffer    = xencons_flush_buffer;
-       xencons_driver.throttle        = xencons_throttle;
-       xencons_driver.unthrottle      = xencons_unthrottle;
-       xencons_driver.wait_until_sent = xencons_wait_until_sent;
-#endif
 
        if ((rc = tty_register_driver(DRV(xencons_driver))) != 0) {
                printk("WARNING: Failed to register Xen virtual "
                       "console driver as '%s%d'\n",
                       DRV(xencons_driver)->name, 
DRV(xencons_driver)->name_base);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
                put_tty_driver(xencons_driver);
                xencons_driver = NULL;
-#endif
                return rc;
        }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
        tty_register_device(xencons_driver, 0, NULL);
-#endif
 
        if (xen_start_info->flags & SIF_INITDOMAIN) {
                xencons_priv_irq = bind_virq_to_irqhandler(
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c
--- a/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c  Fri Nov 18 13:28:38 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/evtchn/evtchn.c  Fri Nov 18 13:30:47 2005
@@ -436,9 +436,7 @@
        .minor        = EVTCHN_MINOR,
        .name         = "evtchn",
        .fops         = &evtchn_fops,
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
        .devfs_name   = "misc/evtchn",
-#endif
 };
 
 static int __init evtchn_init(void)
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c
--- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c        Fri Nov 18 
13:28:38 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c        Fri Nov 18 
13:30:47 2005
@@ -31,11 +31,6 @@
 #include <asm-xen/xen-public/xen.h>
 #include <asm-xen/xen-public/dom0_ops.h>
 #include <asm-xen/xen_proc.h>
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-#define pud_t pgd_t
-#define pud_offset(d, va) d
-#endif
 
 static struct proc_dir_entry *privcmd_intf;
 
diff -r eb3ecf6abe87 -r 0dd531d4af46 
linux-2.6-xen-sparse/include/asm-xen/asm-i386/hypervisor.h
--- a/linux-2.6-xen-sparse/include/asm-xen/asm-i386/hypervisor.h        Fri Nov 
18 13:28:38 2005
+++ b/linux-2.6-xen-sparse/include/asm-xen/asm-i386/hypervisor.h        Fri Nov 
18 13:30:47 2005
@@ -39,15 +39,11 @@
 #include <asm/ptrace.h>
 #include <asm/page.h>
 #if defined(__i386__)
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #  ifdef CONFIG_X86_PAE
 #   include <asm-generic/pgtable-nopud.h>
 #  else
 #   include <asm-generic/pgtable-nopmd.h>
 #  endif
-# else
-#  define pud_t pgd_t
-# endif
 #endif
 
 extern shared_info_t *HYPERVISOR_shared_info;
@@ -113,22 +109,6 @@
 void xen_invlpg_mask(cpumask_t *mask, unsigned long ptr);
 #endif
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-/* 
-** XXX SMH: 2.4 doesn't have percpu.h (or support SMP guests) so just 
-** include sufficient #defines to allow the below to build. 
-*/
-#define DEFINE_PER_CPU(type, name) \
-    __typeof__(type) per_cpu__##name
-
-#define per_cpu(var, cpu)           (*((void)cpu, &per_cpu__##var))
-#define __get_cpu_var(var)          per_cpu__##var
-#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
-
-#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
-#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
-#endif /* linux < 2.6.0 */
-
 /* Returns zero on success else negative errno. */
 int xen_create_contiguous_region(
     unsigned long vstart, unsigned int order, unsigned int address_bits);
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c  Fri Nov 18 13:28:38 2005
+++ b/tools/ioemu/vl.c  Fri Nov 18 13:30:47 2005
@@ -137,7 +137,7 @@
 int gus_enabled = 1;
 int pci_enabled = 1;
 int prep_enabled = 0;
-int rtc_utc = 1;
+int rtc_utc = 0;
 int cirrus_vga_enabled = 1;
 int vga_accelerate = 1;
 int graphic_width = 800;
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Fri Nov 18 13:28:38 2005
+++ b/tools/libxc/xc_linux_save.c       Fri Nov 18 13:30:47 2005
@@ -729,6 +729,11 @@
 
     /* Domain is still running at this point */
 
+    if (live && (pt_levels != 2)) {
+        ERR("Live migration supported only for 32-bit non-pae");
+        goto out;
+    }
+
     if (live) {
 
         if (xc_shadow_control(xc_handle, dom, 
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Nov 18 13:28:38 2005
+++ b/tools/python/xen/xm/main.py       Fri Nov 18 13:30:47 2005
@@ -40,26 +40,81 @@
 
 import console
 
+# Strings for shorthelp
+console_help = "console <DomId>                  Attach to domain DomId's 
console."
+create_help =  """create [-c] <ConfigFile>
+               [Name=Value]..       Create a domain based on Config File"""
+destroy_help = "destroy <DomId>                  Terminate a domain 
immediately"
+help_help =    "help                             Display this message"
+list_help =    "list [--long] [DomId, ...]       List information about 
domains"
+mem_max_help = "mem-max <DomId> <Mem>            Set maximum memory 
reservation for a domain"
+mem_set_help = "mem-set <DomId> <Mem>            Adjust the current memory 
usage for a domain"
+migrate_help = "migrate <DomId> <Host>           Migrate a domain to another 
machine"
+pause_help =   "pause <DomId>                    Pause execution of a domain"
+reboot_help =  "reboot <DomId> [-w][-a]          Reboot a domain"
+restore_help = "restore <File>                   Create a domain from a saved 
state file"
+save_help =    "save <DomId> <File>              Save domain state (and 
config) to file"
+shutdown_help ="shutdown <DomId> [-w][-a][-R|-H] Shutdown a domain"
+top_help =     "top                              Monitor system and domains in 
real-time"
+unpause_help = "unpause <DomId>                  Unpause a paused domain"
+
+help_spacer = """
+   """
+
+# Strings for longhelp
+sysrq_help =   "sysrq   <DomId> <letter>         Send a sysrq to a domain"
+domid_help =   "domid <DomName>                  Converts a domain name to a 
domain id"
+domname_help = "domname <DomId>                  Convert a domain id to a 
domain name"
+set_vcpus_help = """set-vcpus <DomId> <VCPUs>        Enable the specified 
number of VCPUs in a
+                                    domain"""
+vcpu_list_help = "vcpu-list <DomId>                List the VCPUs for a domain 
(or all domains)"
+vcpu_pin_help = "vcpu-pin <DomId> <VCPU> <CPUs>   Set which cpus a VCPU can 
use" 
+dmesg_help =   "dmesg [--clear]                  Read or clear Xen's message 
buffer"
+info_help =    "info                             Get information about the xen 
host"
+log_help = "log      Print the xend log"
+sched_bvt_help = """sched-bvt <Parameters>           Set Borrowed Virtual Time 
scheduler
+                                    parameters"""
+sched_bvt_ctxallow_help = """sched-bvt-ctxallow <Allow>       Set the BVT 
scheduler context switch
+                                    allowance"""
+sched_sedf_help = "sched-sedf <Parameters>          Set simple EDF parameters"
+block_attach_help = """block-attach <DomId> <BackDev> <FrontDev> <Mode>
+                [BackDomId]         Create a new virtual block device"""
+block_detach_help = """block-detach  <DomId> <DevId>    Destroy a domain's 
virtual block device,
+                                    where <DevId> may either be the device ID
+                                    or the device name as mounted in the 
guest"""
+
+block_list_help = "block-list <DomId>               List virtual block devices 
for a domain"
+network_attach_help = """network-attach  <DomID> [script=<script>] [ip=<ip>] 
[mac=<mac>]
+                           [bridge=<bridge>] [backend=<backDomID>]
+                                    Create a new virtual network device """
+network_detach_help = """network-detach  <DomId> <DevId>  Destroy a domain's 
virtual network
+                                    device, where <DevId> is the device ID."""
+
+network_list_help = "network-list <DomId>             List virtual network 
interfaces for a domain"
+vnet_list_help = "vnet-list [-l|--long]            list vnets"
+vnet_create_help = "vnet-create <config>             create a vnet from a 
config file"
+vnet_delete_help = "vnet-delete <vnetid>             delete a vnet"
+
 
 shorthelp = """Usage: xm <subcommand> [args]
     Control, list, and manipulate Xen guest instances
 
-xm common subcommands:
-    console <DomId>         attach to console of DomId
-    create <CfgFile>        create a domain based on Config File
-    destroy <DomId>         terminate a domain immediately
-    help                    display this message
-    list [DomId, ...]       list information about domains
-    mem-max <DomId> <Mem>   set the maximum memory reservation for a domain
-    mem-set <DomId> <Mem>   adjust the current memory usage for a domain
-    migrate <DomId> <Host>  migrate a domain to another machine
-    pause <DomId>           pause execution of a domain
-    reboot <DomId>          reboot a domain
-    restore <File>          create a domain from a saved state file
-    save <DomId> <File>     save domain state (and config) to file
-    shutdown <DomId>        shutdown a domain
-    top                     monitor system and domains in real-time
-    unpause <DomId>         unpause a paused domain
+xm common subcommands:"""  + help_spacer \
++ console_help + help_spacer \
++ create_help + help_spacer \
++ destroy_help + help_spacer \
++ help_help    + help_spacer \
++ list_help    + help_spacer \
++ mem_max_help + help_spacer \
++ mem_set_help + help_spacer \
++ migrate_help + help_spacer \
++ pause_help   + help_spacer \
++ reboot_help  + help_spacer \
++ restore_help + help_spacer \
++ save_help    + help_spacer \
++ shutdown_help + help_spacer \
++ top_help     + help_spacer \
++ unpause_help + """
 
 <DomName> can be substituted for <DomId> in xm subcommands.
 
@@ -72,64 +127,102 @@
 
 xm full list of subcommands:
 
-  Domain Commands:
-    console <DomId>           attach to console of DomId
-    create  <ConfigFile>      create a domain
-    destroy <DomId>           terminate a domain immediately
-    domid   <DomName>         convert a domain name to a domain id
-    domname <DomId>           convert a domain id to a domain name
-    list                      list information about domains
-    mem-max <DomId> <Mem>     set domain maximum memory limit
-    mem-set <DomId> <Mem>     set the domain's memory dynamically
-    migrate <DomId> <Host>    migrate a domain to another machine
-    pause   <DomId>           pause execution of a domain
-    reboot   [-w|-a] <DomId>  reboot a domain
-    restore <File>            create a domain from a saved state file
-    save    <DomId> <File>    save domain state (and config) to file
-    shutdown [-w|-a] <DomId>  shutdown a domain
-    sysrq   <DomId> <letter>  send a sysrq to a domain
-    unpause <DomId>           unpause a paused domain
-    set-vcpus <DomId> <VCPUs> enable the specified number of VCPUs in a domain
-    vcpu-list <DomId>         list the VCPUs for a domain
-    vcpu-pin <DomId> <VCPU> <CPUs>    set which cpus a VCPU can use. 
-
-  Xen Host Commands:
-    dmesg   [--clear]         read or clear Xen's message buffer
-    info                      get information about the xen host
-    log                       print the xend log
-    top                       monitor system and domains in real-time
-
-  Scheduler Commands:
-    sched-bvt <options>       set BVT scheduler parameters
-    sched-bvt-ctxallow <Allow>
-        Set the BVT scheduler context switch allowance
-    sched-sedf <options>      set simple EDF parameters
-
-  Virtual Device Commands:
-    block-attach  <DomId> <BackDev> <FrontDev> <Mode> [BackDomId]
-        Create a new virtual block device 
-    block-detach  <DomId> <DevId>  Destroy a domain's virtual block device,
-                                   where <DevId> may either be the device ID
-                                   or the device name as mounted in the guest.
-    block-list    <DomId>          List virtual block devices for a domain
-
-    network-attach  <DomID> [script=<script>] [ip=<ip>] [mac=<mac>]
-                            [bridge=<bridge>] [backend=<backDomID>]
-        Create a new virtual network device 
-    network-detach  <DomId> <DevId>  Destroy a domain's virtual network
-                                     device, where <DevId> is the device ID.
-    network-list    <DomId>        List virtual network interfaces for a domain
-
-  Vnet commands:
-    vnet-list   [-l|--long]    list vnets
-    vnet-create <config>       create a vnet from a config file
-    vnet-delete <vnetid>       delete a vnet
+  Domain Commands: """ + help_spacer \
++ console_help + help_spacer \
++ create_help + help_spacer \
++ destroy_help + help_spacer \
++ domid_help   + help_spacer \
++ domname_help   + help_spacer \
++ list_help    + help_spacer \
++ mem_max_help + help_spacer \
++ mem_set_help + help_spacer \
++ migrate_help + help_spacer \
++ pause_help   + help_spacer \
++ reboot_help  + help_spacer \
++ restore_help + help_spacer \
++ save_help    + help_spacer \
++ shutdown_help + help_spacer \
++ sysrq_help + help_spacer \
++ top_help     + help_spacer \
++ unpause_help + help_spacer \
++ set_vcpus_help + help_spacer \
++ vcpu_pin_help + """
+
+   Xen Host Commands: """ + help_spacer \
++ dmesg_help + help_spacer \
++ info_help + help_spacer \
++ log_help  + help_spacer \
++ top_help  + """
+
+  Scheduler Commands: """ + help_spacer \
++ sched_bvt_help + help_spacer \
++ sched_bvt_ctxallow_help + help_spacer \
++ sched_sedf_help + """
+
+  Virtual Device Commands:"""  + help_spacer \
++ block_attach_help + help_spacer \
++ block_detach_help + help_spacer \
++ block_list_help + help_spacer \
++ network_attach_help + help_spacer \
++ network_detach_help + help_spacer \
++ network_limit_help + help_spacer \
++ network_list_help + """
+
+  Vnet commands: """ + help_spacer \
++ vnet_list_help + help_spacer \
++ vnet_create_help + help_spacer \
++ vnet_delete_help + """
 
 <DomName> can be substituted for <DomId> in xm subcommands.
 
 For a short list of subcommands run 'xm help'
 For more help on xm see the xm(1) man page
 For more help on xm create, see the xmdomain.cfg(5) man page"""
+
+# array for xm help <command>
+help = {
+    "--long": longhelp,
+    "console": console_help,
+    "create": create_help,
+    "destroy": destroy_help,
+    "domid ": domid_help,
+    "domname": domname_help,
+    "list": list_help,
+    "mem-max": mem_max_help,
+    "mem-set": mem_set_help,
+    "migrate": migrate_help,
+    "pause": pause_help,
+    "reboot": reboot_help,
+    "restore": restore_help,
+    "save":  save_help,
+    "shutdown": shutdown_help,
+    "sysrq": sysrq_help,
+    "unpause": unpause_help,
+    "set-vcpus": set_vcpus_help,
+    "vcpu-list": vcpu_list_help,
+    "vcpu-pin": vcpu_pin_help,
+#  Xen Host Commands:
+    "dmesg": dmesg_help,
+    "info":  info_help,
+    "log":   log_help,
+    "top":  top_help,
+#  Scheduler Commands:
+    "sched-bvt": sched_bvt_help,
+    "sched-bvt-ctxallow": sched_bvt_ctxallow_help,
+    "sched-sedf":  sched_sedf_help,
+
+#  Virtual Device Commands:
+    "block-attach": block_attach_help,
+    "block-detach": block_detach_help,
+    "block-list": block_list_help,
+    "network-attach": network_attach_help,
+    "network-detach": network_detach_help,
+    "network-list":  network_list_help,
+# Vnet commands:
+    "vnet-list": vnet_list_help,
+    "vnet-create": vnet_create_help,
+    "vnet-delete": vnet_delete_help
+   }
 
 ####################################################################
 #
@@ -734,10 +827,6 @@
     "vbd-list": "block-list",
     }
 
-help = {
-    "--long": longhelp
-   }
-
 
 def xm_lookup_cmd(cmd):
     if commands.has_key(cmd):
@@ -759,7 +848,7 @@
 
 def usage(cmd=None):
     if help.has_key(cmd):
-        print help[cmd]
+        print "   " + help[cmd]
     else:
         print shorthelp
     sys.exit(1)
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/Makefile.am
--- a/tools/xm-test/Makefile.am Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/Makefile.am Fri Nov 18 13:30:47 2005
@@ -1,5 +1,8 @@
 SUBDIRS = ramdisk tests
 EXTRA_DIST = lib runtest.sh mkreport
+
+existing:
+       $(MAKE) -C ramdisk existing
 
 # Remove any pyc's, CVS dirs, and prune the skel dirs
 dist-hook:
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/README
--- a/tools/xm-test/README      Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/README      Fri Nov 18 13:30:47 2005
@@ -45,11 +45,15 @@
 NB: If you have the initrd.img from another installation of xm-test,
 you can copy it into the ramdisk directory to eliminate the need to
 rebuild it.  If you do this, there is no need to run 'make' again.
-Simply copy the initrd.img file into ramdisk/ and then run the
-runtest.sh script.  Note that in general, you should not attempt to
-use a ramdisk from a previous minor version of xm-test (i.e., don't
-use a ramdisk from 0.4.0 with 0.5.0.  0.5.0 should work for 0.5.3
-though)
+Simply copy the initrd-X.Y.img file into ramdisk/ and then run:
+
+   # make existing
+
+This will set up the link so that xm-test will use the existing
+ramdisk.  Next, just run "runtest.sh" normally.  Note that in general,
+you should not attempt to use a ramdisk from a previous minor version
+of xm-test (i.e., don't use a ramdisk from 0.4.0 with 0.5.0.  0.5.0
+should work for 0.5.3 though)
 
 
 Running
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/configure.ac
--- a/tools/xm-test/configure.ac        Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/configure.ac        Fri Nov 18 13:30:47 2005
@@ -1,7 +1,7 @@
 # xm-test configure.ac input script
 
 # Basic header information
-AC_INIT([xm-test], [0.5.0])
+AC_INIT([xm-test], [0.6.0])
 AM_INIT_AUTOMAKE([1.7 foreign])
 
 # Check for dependencies
@@ -65,5 +65,6 @@
     lib/XmTestLib/config.py
     ])
 
+AC_OUTPUT
 
-AC_OUTPUT
+chmod a+x lib/XmTestReport/xmtest.py
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/lib/XmTestReport/xmtest.py.in
--- a/tools/xm-test/lib/XmTestReport/xmtest.py.in       Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/lib/XmTestReport/xmtest.py.in       Fri Nov 18 13:30:47 2005
@@ -1,3 +1,15 @@
 #!/usr/bin/python
 
 XM_TEST_VERSION = "@PACKAGE_VERSION@"
+
+if __name__ == "__main__":
+    import re
+
+    match = re.match("^(\d+)\.(\d+)\.(\d+)$", XM_TEST_VERSION)
+
+    print "XM_TEST_VERSION=%s" % XM_TEST_VERSION
+    if match:
+        print "XM_TEST_MAJ=%s" % match.group(1)
+        print "XM_TEST_MIN=%s" % match.group(2)
+        print "XM_TEST_REV=%s" % match.group(3)
+        
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/ramdisk/Makefile.am
--- a/tools/xm-test/ramdisk/Makefile.am Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/ramdisk/Makefile.am Fri Nov 18 13:30:47 2005
@@ -1,5 +1,5 @@
 
-EXTRA_DIST = skel configs
+EXTRA_DIST = skel configs patches
 
 BR_TAR = buildroot-20050823.tar.bz2
 BR_URL = http://buildroot.uclibc.org/downloads/snapshots/$(BR_TAR)
@@ -8,6 +8,9 @@
 BR_IMG = $(BR_SRC)/rootfs.i386.ext2
 
 BR_ROOT = build_i386/root
+
+XMTEST_MAJ_VER = $(shell echo @PACKAGE_VERSION@ | perl -pe 
's/(\d+)\.(\d+)\.\d+/\1.\2/')
+XMTEST_VER_IMG = initrd-$(XMTEST_MAJ_VER).img
 
 all: initrd.img
 
@@ -21,12 +24,21 @@
        cp configs/buildroot $(BR_SRC)/.config
        cp configs/busybox $(BR_SRC)/package/busybox/busybox.config
        cp configs/uClibc $(BR_SRC)/toolchain/uClibc/uClibc.config
+       (for i in patches/buildroot/*.patch; do \
+         cd $(BR_SRC) && patch -p1 <../$$i; done )
        cd $(BR_SRC) && make oldconfig && make
 
-initrd.img: $(BR_IMG)
+$(XMTEST_VER_IMG): $(BR_IMG)
        (cd skel; tar cf - .) | (cd $(BR_SRC)/$(BR_ROOT); tar xvf -)
        cd $(BR_SRC) && make
-       cp $(BR_IMG) initrd.img
+       cp $(BR_IMG) initrd-$(XMTEST_MAJ_VER).img
+
+initrd.img: $(XMTEST_VER_IMG)
+       ln -sf $(XMTEST_VER_IMG) initrd.img
+
+existing:
+       @[ -f $(XMTEST_VER_IMG) ] && ln -sf $(XMTEST_VER_IMG) initrd.img || \
+       echo Error, $(XMTEST_VER_IMG) not found
 
 clean-local: am_config_clean-local
 
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/ramdisk/configs/buildroot
--- a/tools/xm-test/ramdisk/configs/buildroot   Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/ramdisk/configs/buildroot   Fri Nov 18 13:30:47 2005
@@ -225,6 +225,7 @@
 # BR2_PACKAGE_WIRELESS_TOOLS is not set
 # BR2_PACKAGE_XORG is not set
 # BR2_PACKAGE_ZLIB is not set
+BR2_PACKAGE_HPING=y
 
 #
 # Target Options
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/runtest.sh
--- a/tools/xm-test/runtest.sh  Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/runtest.sh  Fri Nov 18 13:30:47 2005
@@ -61,19 +61,31 @@
     fi
 
     # See if the ramdisk has been built
-    rdsize=$(stat -c %s ramdisk/initrd.img 2>/dev/null)
+    rdsize=$(stat -Lc %s ramdisk/initrd.img 2>/dev/null)
     if [ -z "$rdsize" ] || [ $rdsize -le 16384 ]; then
        echo "Cannot find a valid ramdisk.  You need to run \"make\" or"
        echo "copy in a previously-built ramdisk to the ramdisk/ directory"
        exit 1
     fi
 
+    # Figure out the version of the ramdisk link and compare it
+    # to what it should be as a cheap way of making sure we're
+    # using the right version
+    realrd=$(readlink ramdisk/initrd.img)
+    eval $(./lib/XmTestReport/xmtest.py)
+    rrdver="initrd-${XM_TEST_MAJ}.${XM_TEST_MIN}.img"
+    if [ "$realrd" != "$rrdver" ]; then
+       echo "Error: ramdisk/initrd.img is from an old version"
+       echo "You need to build a ramdisk from at least 
${XM_TEST_MAJ}.${XM_TEST_MIN}"
+       exit 1
+    fi
+
     # See if xend is running
     if ! xm list >/dev/null 2>&1; then
        echo "'xm list' failed: is xend running?"
        exit 1
     fi
-    
+
 }
 
 # Get contact info if needed
diff -r eb3ecf6abe87 -r 0dd531d4af46 tools/xm-test/tests/block-list/Makefile.am
--- a/tools/xm-test/tests/block-list/Makefile.am        Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/tests/block-list/Makefile.am        Fri Nov 18 13:30:47 2005
@@ -5,7 +5,8 @@
        02_block-list_attachbd_pos.test \
        03_block-list_anotherbd_pos.test \
        04_block-list_nodb_pos.test \
-       05_block-list_nonexist_neg.test
+       05_block-list_nonexist_neg.test \
+       06_block-list_checkremove_pos.test
 
 XFAIL_TESTS = 
 
diff -r eb3ecf6abe87 -r 0dd531d4af46 
tools/xm-test/tests/create/15_create_smallmem_pos.py
--- a/tools/xm-test/tests/create/15_create_smallmem_pos.py      Fri Nov 18 
13:28:38 2005
+++ b/tools/xm-test/tests/create/15_create_smallmem_pos.py      Fri Nov 18 
13:30:47 2005
@@ -7,7 +7,8 @@
 
 MEM = 16
 
-domain = XmTestDomain(extraOpts={"memory":"%i" % MEM})
+domain = XmTestDomain(extraOpts={"memory":"%i" % MEM,
+                                 "extra" :"mem=%iM" % MEM})
 
 try:
     domain.start()
diff -r eb3ecf6abe87 -r 0dd531d4af46 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Fri Nov 18 13:28:38 2005
+++ b/xen/arch/x86/domain.c     Fri Nov 18 13:30:47 2005
@@ -255,6 +255,9 @@
     struct domain *d = v->domain;
     l1_pgentry_t gdt_l1e;
     int vcpuid, pdpt_order;
+#ifdef __x86_64__
+    int i;
+#endif
 
     if ( is_idle_task(d) )
         return;
diff -r eb3ecf6abe87 -r 0dd531d4af46 xen/include/xen/event.h
--- a/xen/include/xen/event.h   Fri Nov 18 13:28:38 2005
+++ b/xen/include/xen/event.h   Fri Nov 18 13:30:47 2005
@@ -60,7 +60,7 @@
 
 /* Note: Bitwise operations result in fast code with no branches. */
 #define event_pending(v)                        \
-    ((v)->vcpu_info->evtchn_upcall_pending &    \
-     ~(v)->vcpu_info->evtchn_upcall_mask)
+    (!!(v)->vcpu_info->evtchn_upcall_pending &  \
+      !(v)->vcpu_info->evtchn_upcall_mask)
 
 #endif /* __XEN_EVENT_H__ */
diff -r eb3ecf6abe87 -r 0dd531d4af46 
tools/xm-test/ramdisk/patches/buildroot/hping.patch
--- /dev/null   Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/ramdisk/patches/buildroot/hping.patch       Fri Nov 18 
13:30:47 2005
@@ -0,0 +1,67 @@
+diff -Naur buildroot.orig/package/Config.in buildroot/package/Config.in
+--- buildroot.orig/package/Config.in   2005-11-15 07:30:21.000000000 -0800
++++ buildroot/package/Config.in        2005-11-15 07:30:54.000000000 -0800
+@@ -118,6 +118,6 @@
+ source "package/wireless-tools/Config.in"
+ source "package/xorg/Config.in"
+ source "package/zlib/Config.in"
+-
++source "package/hping/Config.in"
+ 
+ endmenu
+diff -Naur buildroot.orig/package/hping/Config.in 
buildroot/package/hping/Config.in
+--- buildroot.orig/package/hping/Config.in     1969-12-31 16:00:00.000000000 
-0800
++++ buildroot/package/hping/Config.in  2005-11-14 14:13:20.000000000 -0800
+@@ -0,0 +1,5 @@
++config BR2_PACKAGE_HPING
++      bool "hping"
++      default y
++      help
++              This is the hping package
+diff -Naur buildroot.orig/package/hping/hping.mk 
buildroot/package/hping/hping.mk
+--- buildroot.orig/package/hping/hping.mk      1969-12-31 16:00:00.000000000 
-0800
++++ buildroot/package/hping/hping.mk   2005-11-14 15:11:06.000000000 -0800
+@@ -0,0 +1,43 @@
++# Taken from the buildroot examples
++
++HPING_VERSION = 2.0.0-rc3
++HPING_TBALL = hping$(HPING_VERSION).tar.gz
++HPING_URL = http://www.hping.org/$(HPING_TBALL)
++HPING_DIR = $(BUILD_DIR)/hping2-rc3
++HPING_TARGET_BINARY = usr/bin/hping
++HPING_BINARY = hping
++
++$(DL_DIR)/$(HPING_TBALL):
++      $(WGET) -P $(DL_DIR) $(HPING_URL)
++
++$(HPING_DIR)/.source: $(DL_DIR)/$(HPING_TBALL)
++      tar xzf $(DL_DIR)/$(HPING_TBALL) -C $(BUILD_DIR)
++      touch $(HPING_DIR)/.source
++
++$(HPING_DIR)/.configured: $(HPING_DIR)/.source
++      (cd $(HPING_DIR); \
++      ./configure; )
++      cat $(HPING_DIR)/Makefile | grep -v './hping2 -v' > $(HPING_DIR)/foo
++      mv $(HPING_DIR)/foo $(HPING_DIR)/Makefile
++      touch $(HPING_DIR)/.configured 
++
++$(HPING_DIR)/$(HPING_BINARY): $(HPING_DIR)/.configured
++      $(MAKE) CC=$(TARGET_CC) -C $(HPING_DIR)
++
++$(TARGET_DIR)/$(HPING_TARGET_BINARY): $(HPING_DIR)/$(HPING_BINARY)
++      cp $(HPING_DIR)/hping2 $(TARGET_DIR)/bin
++
++hping: $(TARGET_DIR)/$(HPING_TARGET_BINARY)
++
++hping-clean:
++      $(MAKE) prefix=$(TARGET_DIR)/usr -C $(HPING_DIR) uninstall
++      -$(MAKE) -C $(HPING_DIR) clean
++
++hping-dirclean:
++      rm -Rf $(HPING_DIR)
++
++ifeq ($(strip $(BR2_PACKAGE_HPING)),y)
++TARGETS += hping
++endif
++
++
diff -r eb3ecf6abe87 -r 0dd531d4af46 
tools/xm-test/tests/block-list/06_block-list_checkremove_pos.py
--- /dev/null   Fri Nov 18 13:28:38 2005
+++ b/tools/xm-test/tests/block-list/06_block-list_checkremove_pos.py   Fri Nov 
18 13:30:47 2005
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2005
+# Author: Dan Smith <danms@xxxxxxxxxx>
+
+from XmTestLib import *
+
+domain = XmTestDomain()
+
+try:
+    domain.start()
+except DomainError, e:
+    FAIL(str(e))
+
+try:
+    console = XmConsole(domain.getName())
+except ConsoleError, e:
+    FAIL(str(e))
+
+s, o = traceCommand("xm block-list %s" % domain.getName())
+if s != 0:
+    FAIL("block-list returned !0 when no devices attached")
+if o:
+    FAIL("block-list without devices reported something!")
+
+s, o = traceCommand("xm block-attach %s phy:/dev/ram0 hda1 w" % 
domain.getName())
+if s != 0:
+    FAIL("Unable to attach /dev/ram0->hda1")
+
+s, o = traceCommand("xm block-list %s" % domain.getName())
+if s != 0:
+    FAIL("block-list failed")
+if not o.find("769"):
+    FAIL("block-list didn't show the block device I just attached!")
+
+s, o = traceCommand("xm block-attach %s phy:/dev/ram1 hda2 w" % 
domain.getName())
+if s != 0:
+    FAIL("Unable to attach /dev/ram1->hda2")
+
+s, o = traceCommand("xm block-list %s" % domain.getName())
+if s != 0:
+    FAIL("block-list failed")
+if not o.find("770"):
+    FAIL("block-list didn't show the other block device I just attached!")
+
+s, o = traceCommand("xm block-detach %s 769" % domain.getName())
+if s != 0:
+    FAIL("block-destroy of hda1 failed")
+
+s, o = traceCommand("xm block-list %s" % domain.getName())
+if s != 0:
+    FAIL("block-list failed after detaching a device")
+if o.find("769"):
+    FAIL("hda1 still shown in block-list after detach!")
+if not o.find("770"):
+    FAIL("hda2 not shown after detach of hda1!")
+
+s, o = traceCommand("xm block-detach %s 770" % domain.getName())
+if s != 0:
+    FAIL("block-list failed after detaching another device")
+if o.find("770"):
+    FAIL("hda2 still shown in block-list after detach!")
+if o:
+    FAIL("block-list still shows something after all devices detached!")
+    
+

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

<Prev in Thread] Current Thread [Next in Thread>