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

[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


 


Rackspace

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