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

[Xen-changelog] [xen-unstable] merge with xen-unstable.hg



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID d246b79986d12e99db87339ba57bdac067950ec5
# Parent  aa8ca06d209e34db5ae2573e0fcc22c602ce6510
# Parent  fd5140c2854fe99e1181546383b40de6210f41ee
merge with xen-unstable.hg
---
 tools/xm-test/ramdisk/configs/buildroot                       |  330 ---------
 .hgignore                                                     |   11 
 linux-2.6-xen-sparse/drivers/xen/balloon/Makefile             |    2 
 linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c            |   91 +-
 linux-2.6-xen-sparse/drivers/xen/balloon/common.h             |   58 +
 linux-2.6-xen-sparse/drivers/xen/balloon/sysfs.c              |  165 ++++
 linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c            |   16 
 linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c              |  304 +++++---
 linux-2.6-xen-sparse/drivers/xen/netback/common.h             |    5 
 linux-2.6-xen-sparse/drivers/xen/netback/interface.c          |   54 -
 linux-2.6-xen-sparse/drivers/xen/netback/netback.c            |   43 -
 linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c             |    2 
 tools/ioemu/patches/domain-timeoffset                         |    8 
 tools/ioemu/patches/hypervisor-rtc                            |   26 
 tools/ioemu/patches/ide-cd-dma                                |   18 
 tools/ioemu/patches/qemu-bootorder                            |   22 
 tools/ioemu/patches/qemu-cleanup                              |   33 
 tools/ioemu/patches/qemu-daemonize                            |    4 
 tools/ioemu/patches/qemu-logging                              |    3 
 tools/ioemu/patches/qemu-target-i386-dm                       |   18 
 tools/ioemu/patches/serial-port-rate-limit                    |   47 +
 tools/ioemu/patches/series                                    |    6 
 tools/ioemu/patches/vnc-access-monitor-vt                     |    8 
 tools/ioemu/patches/vnc-backoff-screen-scan                   |   42 -
 tools/ioemu/patches/vnc-display-find-unused                   |   15 
 tools/ioemu/patches/vnc-fixes                                 |   17 
 tools/ioemu/patches/vnc-listen-specific-interface             |  142 ++++
 tools/ioemu/patches/vnc-password                              |  119 +++
 tools/ioemu/patches/vnc-protocol-fixes                        |   46 +
 tools/ioemu/patches/vnc-start-vncviewer                       |    8 
 tools/ioemu/patches/vnc-title-domain-name                     |    8 
 tools/ioemu/patches/xen-build                                 |   13 
 tools/ioemu/patches/xen-platform-device                       |   12 
 tools/ioemu/patches/xen-support-buffered-ioreqs               |    8 
 tools/ioemu/patches/xenstore-block-device-config              |   47 -
 tools/ioemu/patches/xenstore-write-vnc-port                   |   12 
 tools/libxc/xc_acm.c                                          |    6 
 tools/libxc/xc_domain.c                                       |   25 
 tools/libxc/xc_evtchn.c                                       |    6 
 tools/libxc/xc_hvm_build.c                                    |    6 
 tools/libxc/xc_linux_build.c                                  |    6 
 tools/libxc/xc_linux_restore.c                                |    8 
 tools/libxc/xc_linux_save.c                                   |   16 
 tools/libxc/xc_misc.c                                         |    4 
 tools/libxc/xc_private.c                                      |  112 +--
 tools/libxc/xc_private.h                                      |   11 
 tools/libxc/xc_tbuf.c                                         |    4 
 tools/libxc/xg_private.c                                      |   16 
 tools/misc/xenperf.c                                          |   26 
 tools/python/xen/lowlevel/acm/acm.c                           |   19 
 tools/python/xen/util/security.py                             |    9 
 tools/python/xen/xend/XendDomain.py                           |    3 
 tools/python/xen/xend/XendDomainInfo.py                       |   12 
 tools/python/xen/xm/create.py                                 |   16 
 tools/python/xen/xm/opts.py                                   |    6 
 tools/xm-test/README                                          |    4 
 tools/xm-test/configure.ac                                    |    4 
 tools/xm-test/lib/XmTestLib/Console.py                        |    5 
 tools/xm-test/lib/XmTestLib/XenDomain.py                      |   76 --
 tools/xm-test/lib/XmTestLib/acm.py                            |    2 
 tools/xm-test/lib/XmTestLib/arch.py                           |  148 ++++
 tools/xm-test/lib/XmTestReport/OSReport.py                    |   10 
 tools/xm-test/lib/XmTestReport/arch.py                        |   48 +
 tools/xm-test/ramdisk/Makefile.am                             |   42 -
 tools/xm-test/ramdisk/README-XenSource-initrd-1.0-img         |   45 +
 tools/xm-test/ramdisk/configs/buildroot-i386                  |  346 ++++++++++
 tools/xm-test/ramdisk/configs/buildroot-powerpc               |  338 +++++++++
 tools/xm-test/runtest.sh                                      |   11 
 tools/xm-test/tests/create/11_create_concurrent_pos.py        |    2 
 tools/xm-test/tests/create/12_create_concurrent_stress_pos.py |    9 
 tools/xm-test/tests/create/15_create_smallmem_pos.py          |    4 
 tools/xm-test/tests/create/16_create_smallmem_neg.py          |    8 
 xen/arch/ia64/linux-xen/setup.c                               |    2 
 xen/arch/ia64/vmx/mmio.c                                      |   14 
 xen/arch/ia64/vmx/vmx_phy_mode.c                              |    8 
 xen/arch/ia64/vmx/vmx_vcpu.c                                  |    2 
 xen/arch/ia64/vmx/vmx_virt.c                                  |    6 
 xen/arch/ia64/xen/dom0_ops.c                                  |    6 
 xen/arch/ia64/xen/dom_fw.c                                    |   26 
 xen/arch/ia64/xen/domain.c                                    |   14 
 xen/arch/ia64/xen/faults.c                                    |   36 -
 xen/arch/ia64/xen/fw_emul.c                                   |   54 -
 xen/arch/ia64/xen/hypercall.c                                 |   12 
 xen/arch/ia64/xen/hyperprivop.S                               |    2 
 xen/arch/ia64/xen/irq.c                                       |    2 
 xen/arch/ia64/xen/mm.c                                        |   10 
 xen/arch/ia64/xen/privop.c                                    |   22 
 xen/arch/ia64/xen/regionreg.c                                 |    8 
 xen/arch/ia64/xen/tlb_track.c                                 |    2 
 xen/arch/ia64/xen/vcpu.c                                      |   96 +-
 xen/arch/ia64/xen/vhpt.c                                      |    6 
 xen/arch/ia64/xen/xencomm.c                                   |    6 
 xen/arch/ia64/xen/xenmisc.c                                   |    4 
 xen/arch/ia64/xen/xensetup.c                                  |    6 
 xen/arch/ia64/xen/xentime.c                                   |    2 
 xen/arch/powerpc/backtrace.c                                  |   20 
 xen/arch/powerpc/domain.c                                     |    8 
 xen/arch/powerpc/of-devwalk.c                                 |   18 
 xen/arch/powerpc/powerpc64/domain.c                           |    6 
 xen/arch/x86/boot/x86_32.S                                    |    2 
 xen/arch/x86/boot/x86_64.S                                    |    2 
 xen/arch/x86/domain.c                                         |    8 
 xen/arch/x86/hvm/hvm.c                                        |   13 
 xen/arch/x86/hvm/io.c                                         |    2 
 xen/arch/x86/hvm/platform.c                                   |    9 
 xen/arch/x86/hvm/svm/intr.c                                   |    2 
 xen/arch/x86/hvm/svm/svm.c                                    |   38 -
 xen/arch/x86/hvm/svm/vmcb.c                                   |   36 -
 xen/arch/x86/hvm/svm/x86_32/exits.S                           |    3 
 xen/arch/x86/hvm/svm/x86_64/exits.S                           |    2 
 xen/arch/x86/hvm/vmx/vmx.c                                    |    4 
 xen/arch/x86/hvm/vmx/x86_32/exits.S                           |    3 
 xen/arch/x86/hvm/vmx/x86_64/exits.S                           |    2 
 xen/arch/x86/setup.c                                          |    2 
 xen/arch/x86/x86_32/entry.S                                   |    2 
 xen/arch/x86/x86_32/supervisor_mode_kernel.S                  |    2 
 xen/arch/x86/x86_64/entry.S                                   |    2 
 xen/common/sched_sedf.c                                       |    6 
 xen/drivers/char/console.c                                    |    2 
 xen/include/asm-ia64/config.h                                 |    2 
 xen/include/asm-ia64/vcpu.h                                   |    2 
 xen/include/xen/event.h                                       |    7 
 xen/include/xen/lib.h                                         |    3 
 123 files changed, 2559 insertions(+), 1171 deletions(-)

diff -r aa8ca06d209e -r d246b79986d1 .hgignore
--- a/.hgignore Tue Oct 24 10:08:30 2006 -0600
+++ b/.hgignore Tue Oct 24 11:21:48 2006 -0600
@@ -184,6 +184,17 @@
 ^tools/xentrace/xenctx$
 ^tools/xentrace/xentrace$
 ^tools/xm-test/ramdisk/buildroot
+^tools/xm-test/aclocal.m4$
+^tools/xm-test/autom4te
+^tools/xm-test/install-sh$
+^tools/xm-test/mkinstalldirs$
+^tools/xm-test/missing$
+^tools/xm-test/config(ure|.log|.status|.guess|.sub)$
+^tools/xm-test/Makefile(.in)*$
+^tools/xm-test/.*/Makefile(.in)*$
+^tools/xm-test/lib/XmTestLib/config.py$
+^tools/xm-test/lib/XmTestReport/xmtest.py$
+^tools/xm-test/tests/.*\.test$
 ^xen/BLOG$
 ^xen/TAGS$
 ^xen/arch/x86/asm-offsets\.s$
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/balloon/Makefile
--- a/linux-2.6-xen-sparse/drivers/xen/balloon/Makefile Tue Oct 24 10:08:30 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/Makefile Tue Oct 24 11:21:48 
2006 -0600
@@ -1,2 +1,2 @@
 
-obj-y += balloon.o
+obj-y := balloon.o sysfs.o
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c
--- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Tue Oct 24 
10:08:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Tue Oct 24 
11:21:48 2006 -0600
@@ -53,10 +53,8 @@
 #include <asm/uaccess.h>
 #include <asm/tlb.h>
 #include <linux/list.h>
-
 #include <xen/xenbus.h>
-
-#define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10))
+#include "common.h"
 
 #ifdef CONFIG_PROC_FS
 static struct proc_dir_entry *balloon_pde;
@@ -71,9 +69,7 @@ static DECLARE_MUTEX(balloon_mutex);
  */
 DEFINE_SPINLOCK(balloon_lock);
 
-/* We aim for 'current allocation' == 'target allocation'. */
-static unsigned long current_pages;
-static unsigned long target_pages;
+struct balloon_stats balloon_stats;
 
 /* We increase/decrease in batches which fit in a page */
 static unsigned long frame_list[PAGE_SIZE / sizeof(unsigned long)];
@@ -81,18 +77,8 @@ static unsigned long frame_list[PAGE_SIZ
 /* VM /proc information for memory */
 extern unsigned long totalram_pages;
 
-/* We may hit the hard limit in Xen. If we do then we remember it. */
-static unsigned long hard_limit;
-
-/*
- * Drivers may alter the memory reservation independently, but they must
- * inform the balloon driver so that we can avoid hitting the hard limit.
- */
-static unsigned long driver_pages;
-
 /* List of ballooned pages, threaded through the mem_map array. */
 static LIST_HEAD(ballooned_pages);
-static unsigned long balloon_low, balloon_high;
 
 /* Main work function, always executed in process context. */
 static void balloon_process(void *unused);
@@ -124,10 +110,10 @@ static void balloon_append(struct page *
        /* Lowmem is re-populated first, so highmem pages go at list tail. */
        if (PageHighMem(page)) {
                list_add_tail(PAGE_TO_LIST(page), &ballooned_pages);
-               balloon_high++;
+               bs.balloon_high++;
        } else {
                list_add(PAGE_TO_LIST(page), &ballooned_pages);
-               balloon_low++;
+               bs.balloon_low++;
        }
 }
 
@@ -143,9 +129,9 @@ static struct page *balloon_retrieve(voi
        UNLIST_PAGE(page);
 
        if (PageHighMem(page))
-               balloon_high--;
+               bs.balloon_high--;
        else
-               balloon_low--;
+               bs.balloon_low--;
 
        return page;
 }
@@ -172,9 +158,9 @@ static void balloon_alarm(unsigned long 
 
 static unsigned long current_target(void)
 {
-       unsigned long target = min(target_pages, hard_limit);
-       if (target > (current_pages + balloon_low + balloon_high))
-               target = current_pages + balloon_low + balloon_high;
+       unsigned long target = min(bs.target_pages, bs.hard_limit);
+       if (target > (bs.current_pages + bs.balloon_low + bs.balloon_high))
+               target = bs.current_pages + bs.balloon_low + bs.balloon_high;
        return target;
 }
 
@@ -216,7 +202,8 @@ static int increase_reservation(unsigned
                        BUG_ON(ret != rc);
                }
                if (rc >= 0)
-                       hard_limit = current_pages + rc - driver_pages;
+                       bs.hard_limit = (bs.current_pages + rc -
+                                        bs.driver_pages);
                goto out;
        }
 
@@ -248,8 +235,8 @@ static int increase_reservation(unsigned
                __free_page(page);
        }
 
-       current_pages += nr_pages;
-       totalram_pages = current_pages;
+       bs.current_pages += nr_pages;
+       totalram_pages = bs.current_pages;
 
  out:
        balloon_unlock(flags);
@@ -317,8 +304,8 @@ static int decrease_reservation(unsigned
        ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
        BUG_ON(ret != nr_pages);
 
-       current_pages -= nr_pages;
-       totalram_pages = current_pages;
+       bs.current_pages -= nr_pages;
+       totalram_pages = bs.current_pages;
 
        balloon_unlock(flags);
 
@@ -339,7 +326,7 @@ static void balloon_process(void *unused
        down(&balloon_mutex);
 
        do {
-               credit = current_target() - current_pages;
+               credit = current_target() - bs.current_pages;
                if (credit > 0)
                        need_sleep = (increase_reservation(credit) != 0);
                if (credit < 0)
@@ -352,18 +339,18 @@ static void balloon_process(void *unused
        } while ((credit != 0) && !need_sleep);
 
        /* Schedule more work if there is some still to be done. */
-       if (current_target() != current_pages)
+       if (current_target() != bs.current_pages)
                mod_timer(&balloon_timer, jiffies + HZ);
 
        up(&balloon_mutex);
 }
 
 /* Resets the Xen limit, sets new target, and kicks off processing. */
-static void set_new_target(unsigned long target)
+void balloon_set_new_target(unsigned long target)
 {
        /* No need for lock. Not read-modify-write updates. */
-       hard_limit   = ~0UL;
-       target_pages = target;
+       bs.hard_limit   = ~0UL;
+       bs.target_pages = target;
        schedule_work(&balloon_worker);
 }
 
@@ -388,7 +375,7 @@ static void watch_target(struct xenbus_w
        /* The given memory/target value is in KiB, so it needs converting to
         * pages. PAGE_SHIFT converts bytes to pages, hence PAGE_SHIFT - 10.
         */
-       set_new_target(new_target >> (PAGE_SHIFT - 10));
+       balloon_set_new_target(new_target >> (PAGE_SHIFT - 10));
 }
 
 static int balloon_init_watcher(struct notifier_block *notifier,
@@ -424,7 +411,7 @@ static int balloon_write(struct file *fi
        memstring[sizeof(memstring)-1] = '\0';
 
        target_bytes = memparse(memstring, &endchar);
-       set_new_target(target_bytes >> PAGE_SHIFT);
+       balloon_set_new_target(target_bytes >> PAGE_SHIFT);
 
        return count;
 }
@@ -442,12 +429,13 @@ static int balloon_read(char *page, char
                "High-mem balloon:   %8lu kB\n"
                "Driver pages:       %8lu kB\n"
                "Xen hard limit:     ",
-               PAGES2KB(current_pages), PAGES2KB(target_pages), 
-               PAGES2KB(balloon_low), PAGES2KB(balloon_high),
-               PAGES2KB(driver_pages));
-
-       if (hard_limit != ~0UL)
-               len += sprintf(page + len, "%8lu kB\n", PAGES2KB(hard_limit));
+               PAGES2KB(bs.current_pages), PAGES2KB(bs.target_pages), 
+               PAGES2KB(bs.balloon_low), PAGES2KB(bs.balloon_high),
+               PAGES2KB(bs.driver_pages));
+
+       if (bs.hard_limit != ~0UL)
+               len += sprintf(page + len, "%8lu kB\n",
+                              PAGES2KB(bs.hard_limit));
        else
                len += sprintf(page + len, "     ??? kB\n");
 
@@ -468,13 +456,13 @@ static int __init balloon_init(void)
 
        IPRINTK("Initialising balloon driver.\n");
 
-       current_pages = min(xen_start_info->nr_pages, max_pfn);
-       totalram_pages = current_pages;
-       target_pages  = current_pages;
-       balloon_low   = 0;
-       balloon_high  = 0;
-       driver_pages  = 0UL;
-       hard_limit    = ~0UL;
+       bs.current_pages = min(xen_start_info->nr_pages, max_pfn);
+       totalram_pages   = bs.current_pages;
+       bs.target_pages  = bs.current_pages;
+       bs.balloon_low   = 0;
+       bs.balloon_high  = 0;
+       bs.driver_pages  = 0UL;
+       bs.hard_limit    = ~0UL;
 
        init_timer(&balloon_timer);
        balloon_timer.data = 0;
@@ -489,6 +477,7 @@ static int __init balloon_init(void)
        balloon_pde->read_proc  = balloon_read;
        balloon_pde->write_proc = balloon_write;
 #endif
+       balloon_sysfs_init();
     
        /* Initialise the balloon with excess memory space. */
        for (pfn = xen_start_info->nr_pages; pfn < max_pfn; pfn++) {
@@ -512,7 +501,7 @@ void balloon_update_driver_allowance(lon
        unsigned long flags;
 
        balloon_lock(flags);
-       driver_pages += delta;
+       bs.driver_pages += delta;
        balloon_unlock(flags);
 }
 
@@ -578,7 +567,7 @@ struct page **alloc_empty_pages_and_page
                        goto err;
                }
 
-               totalram_pages = --current_pages;
+               totalram_pages = --bs.current_pages;
 
                balloon_unlock(flags);
        }
@@ -624,7 +613,7 @@ void balloon_release_driver_page(struct 
 
        balloon_lock(flags);
        balloon_append(page);
-       driver_pages--;
+       bs.driver_pages--;
        balloon_unlock(flags);
 
        schedule_work(&balloon_worker);
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c        Tue Oct 24 
10:08:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c        Tue Oct 24 
11:21:48 2006 -0600
@@ -293,7 +293,7 @@ static int do_block_io_op(blkif_t *blkif
 static int do_block_io_op(blkif_t *blkif)
 {
        blkif_back_ring_t *blk_ring = &blkif->blk_ring;
-       blkif_request_t *req;
+       blkif_request_t req;
        pending_req_t *pending_req;
        RING_IDX rc, rp;
        int more_to_do = 0;
@@ -311,22 +311,22 @@ static int do_block_io_op(blkif_t *blkif
                        break;
                }
 
-               req = RING_GET_REQUEST(blk_ring, rc);
+               memcpy(&req, RING_GET_REQUEST(blk_ring, rc), sizeof(req));
                blk_ring->req_cons = ++rc; /* before make_response() */
 
-               switch (req->operation) {
+               switch (req.operation) {
                case BLKIF_OP_READ:
                        blkif->st_rd_req++;
-                       dispatch_rw_block_io(blkif, req, pending_req);
+                       dispatch_rw_block_io(blkif, &req, pending_req);
                        break;
                case BLKIF_OP_WRITE:
                        blkif->st_wr_req++;
-                       dispatch_rw_block_io(blkif, req, pending_req);
+                       dispatch_rw_block_io(blkif, &req, pending_req);
                        break;
                default:
                        DPRINTK("error: unknown block io operation [%d]\n",
-                               req->operation);
-                       make_response(blkif, req->id, req->operation,
+                               req.operation);
+                       make_response(blkif, req.id, req.operation,
                                      BLKIF_RSP_ERROR);
                        free_req(pending_req);
                        break;
@@ -375,7 +375,7 @@ static void dispatch_rw_block_io(blkif_t
                        req->seg[i].first_sect + 1;
 
                if ((req->seg[i].last_sect >= (PAGE_SIZE >> 9)) ||
-                   (seg[i].nsec <= 0))
+                   (req->seg[i].last_sect < req->seg[i].first_sect))
                        goto fail_response;
                preq.nr_sects += seg[i].nsec;
 
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c
--- a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c  Tue Oct 24 10:08:30 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c  Tue Oct 24 11:21:48 
2006 -0600
@@ -9,6 +9,9 @@
  * Based on the blkback driver code.
  * 
  * Copyright (c) 2004-2005, Andrew Warfield and Julian Chesterfield
+ *
+ * Clean ups and fix ups:
+ *    Copyright (c) 2006, Steven Rostedt - Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License version 2
@@ -51,7 +54,7 @@
 #include <asm/tlbflush.h>
 #include <linux/devfs_fs_kernel.h>
 
-#define MAX_TAP_DEV 100     /*the maximum number of tapdisk ring devices    */
+#define MAX_TAP_DEV 256     /*the maximum number of tapdisk ring devices    */
 #define MAX_DEV_NAME 100    /*the max tapdisk ring device name e.g. blktap0 */
 
 
@@ -104,6 +107,12 @@ static int mmap_pages = MMAP_PAGES;
                      * have a bunch of pages reserved for shared
                      * memory rings.
                      */
+
+/*Data struct handed back to userspace for tapdisk device to VBD mapping*/
+typedef struct domid_translate {
+       unsigned short domid;
+       unsigned short busid;
+} domid_translate_t ;
 
 /*Data struct associated with each of the tapdisk devices*/
 typedef struct tap_blkif {
@@ -123,17 +132,11 @@ typedef struct tap_blkif {
        unsigned long *idx_map;       /*Record the user ring id to kern 
                                        [req id, idx] tuple                  */
        blkif_t *blkif;               /*Associate blkif with tapdev          */
-       int sysfs_set;                /*Set if it has a class device.        */
+       struct domid_translate trans; /*Translation from domid to bus.       */
 } tap_blkif_t;
 
-/*Data struct handed back to userspace for tapdisk device to VBD mapping*/
-typedef struct domid_translate {
-       unsigned short domid;
-       unsigned short busid;
-} domid_translate_t ;
-
-static domid_translate_t  translate_domid[MAX_TAP_DEV];
-static tap_blkif_t *tapfds[MAX_TAP_DEV];
+static struct tap_blkif *tapfds[MAX_TAP_DEV];
+static int blktap_next_minor;
 
 static int __init set_blkif_reqs(char *str)
 {
@@ -322,7 +325,7 @@ struct vm_operations_struct blktap_vm_op
  */
  
 /*Function Declarations*/
-static int get_next_free_dev(void);
+static tap_blkif_t *get_next_free_dev(void);
 static int blktap_open(struct inode *inode, struct file *filp);
 static int blktap_release(struct inode *inode, struct file *filp);
 static int blktap_mmap(struct file *filp, struct vm_area_struct *vma);
@@ -340,51 +343,96 @@ static struct file_operations blktap_fop
 };
 
 
-static int get_next_free_dev(void)
+static tap_blkif_t *get_next_free_dev(void)
 {
        tap_blkif_t *info;
-       int i = 0, ret = -1;
-       unsigned long flags;
-
-       spin_lock_irqsave(&pending_free_lock, flags);
-       
-       while (i < MAX_TAP_DEV) {
+       int minor;
+
+       /*
+        * This is called only from the ioctl, which
+        * means we should always have interrupts enabled.
+        */
+       BUG_ON(irqs_disabled());
+
+       spin_lock_irq(&pending_free_lock);
+
+       /* tapfds[0] is always NULL */
+
+       for (minor = 1; minor < blktap_next_minor; minor++) {
+               info = tapfds[minor];
+               /* we could have failed a previous attempt. */
+               if (!info ||
+                   ((info->dev_inuse == 0) &&
+                    (info->dev_pending == 0)) ) {
+                       info->dev_pending = 1;
+                       goto found;
+               }
+       }
+       info = NULL;
+       minor = -1;
+
+       /*
+        * We didn't find free device. If we can still allocate
+        * more, then we grab the next device minor that is
+        * available.  This is done while we are still under
+        * the protection of the pending_free_lock.
+        */
+       if (blktap_next_minor < MAX_TAP_DEV)
+               minor = blktap_next_minor++;
+found:
+       spin_unlock_irq(&pending_free_lock);
+
+       if (!info && minor > 0) {
+               info = kzalloc(sizeof(*info), GFP_KERNEL);
+               if (unlikely(!info)) {
+                       /*
+                        * If we failed here, try to put back
+                        * the next minor number. But if one
+                        * was just taken, then we just lose this
+                        * minor.  We can try to allocate this
+                        * minor again later.
+                        */
+                       spin_lock_irq(&pending_free_lock);
+                       if (blktap_next_minor == minor+1)
+                               blktap_next_minor--;
+                       spin_unlock_irq(&pending_free_lock);
+                       goto out;
+               }
+
+               info->minor = minor;
+               /*
+                * Make sure that we have a minor before others can
+                * see us.
+                */
+               wmb();
+               tapfds[minor] = info;
+
+               class_device_create(xen_class, NULL,
+                                   MKDEV(blktap_major, minor), NULL,
+                                   "blktap%d", minor);
+               devfs_mk_cdev(MKDEV(blktap_major, minor),
+                       S_IFCHR|S_IRUGO|S_IWUSR, "xen/blktap%d", minor);
+       }
+
+out:
+       return info;
+}
+
+int dom_to_devid(domid_t domid, int xenbus_id, blkif_t *blkif) 
+{
+       tap_blkif_t *info;
+       int i;
+
+       for (i = 1; i < blktap_next_minor; i++) {
                info = tapfds[i];
-               if ( (tapfds[i] != NULL) && (info->dev_inuse == 0)
-                       && (info->dev_pending == 0) ) {
-                       info->dev_pending = 1;
-                       ret = i;
-                       goto done;
-               }
-               i++;
-       }
-       
-done:
-       spin_unlock_irqrestore(&pending_free_lock, flags);
-
-       /*
-        * We are protected by having the dev_pending set.
-        */
-       if (!tapfds[i]->sysfs_set && xen_class) {
-               class_device_create(xen_class, NULL,
-                                   MKDEV(blktap_major, ret), NULL,
-                                   "blktap%d", ret);
-               tapfds[i]->sysfs_set = 1;
-       }
-       return ret;
-}
-
-int dom_to_devid(domid_t domid, int xenbus_id, blkif_t *blkif) 
-{
-       int i;
-               
-       for (i = 0; i < MAX_TAP_DEV; i++)
-               if ( (translate_domid[i].domid == domid)
-                   && (translate_domid[i].busid == xenbus_id) ) {
-                       tapfds[i]->blkif = blkif;
-                       tapfds[i]->status = RUNNING;
+               if ( info &&
+                    (info->trans.domid == domid) &&
+                    (info->trans.busid == xenbus_id) ) {
+                       info->blkif = blkif;
+                       info->status = RUNNING;
                        return i;
                }
+       }
        return -1;
 }
 
@@ -394,12 +442,16 @@ void signal_tapdisk(int idx)
        struct task_struct *ptask;
 
        info = tapfds[idx];
-       if ( (idx > 0) && (idx < MAX_TAP_DEV) && (info->pid > 0) ) {
+       if ((idx < 0) || (idx > MAX_TAP_DEV) || !info)
+               return;
+
+       if (info->pid > 0) {
                ptask = find_task_by_pid(info->pid);
                if (ptask)
                        info->status = CLEANSHUTDOWN;
        }
        info->blkif = NULL;
+
        return;
 }
 
@@ -410,14 +462,19 @@ static int blktap_open(struct inode *ino
        tap_blkif_t *info;
        int i;
        
-       if (tapfds[idx] == NULL) {
+       /* ctrl device, treat differently */
+       if (!idx)
+               return 0;
+
+       info = tapfds[idx];
+
+       if ((idx < 0) || (idx > MAX_TAP_DEV) || !info) {
                WPRINTK("Unable to open device /dev/xen/blktap%d\n",
-                      idx);
-               return -ENOMEM;
-       }
+                       idx);
+               return -ENODEV;
+       }
+
        DPRINTK("Opening device /dev/xen/blktap%d\n",idx);
-       
-       info = tapfds[idx];
        
        /*Only one process can access device at a time*/
        if (test_and_set_bit(0, &info->dev_inuse))
@@ -458,12 +515,10 @@ static int blktap_release(struct inode *
 {
        tap_blkif_t *info = filp->private_data;
        
-       /* can this ever happen? - sdr */
-       if (!info) {
-               WPRINTK("Trying to free device that doesn't exist "
-                      "[/dev/xen/blktap%d]\n",iminor(inode) - BLKTAP_MINOR);
-               return -EBADF;
-       }
+       /* check for control device */
+       if (!info)
+               return 0;
+
        info->dev_inuse = 0;
        DPRINTK("Freeing device [/dev/xen/blktap%d]\n",info->minor);
 
@@ -619,33 +674,31 @@ static int blktap_ioctl(struct inode *in
        {               
                uint64_t val = (uint64_t)arg;
                domid_translate_t *tr = (domid_translate_t *)&val;
-               int newdev;
 
                DPRINTK("NEWINTF Req for domid %d and bus id %d\n", 
                       tr->domid, tr->busid);
-               newdev = get_next_free_dev();
-               if (newdev < 1) {
+               info = get_next_free_dev();
+               if (!info) {
                        WPRINTK("Error initialising /dev/xen/blktap - "
                                "No more devices\n");
                        return -1;
                }
-               translate_domid[newdev].domid = tr->domid;
-               translate_domid[newdev].busid = tr->busid;
-               return newdev;
+               info->trans.domid = tr->domid;
+               info->trans.busid = tr->busid;
+               return info->minor;
        }
        case BLKTAP_IOCTL_FREEINTF:
        {
                unsigned long dev = arg;
                unsigned long flags;
 
-               /* Looking at another device */
-               info = NULL;
-
-               if ( (dev > 0) && (dev < MAX_TAP_DEV) )
-                       info = tapfds[dev];
+               info = tapfds[dev];
+
+               if ((dev > MAX_TAP_DEV) || !info)
+                       return 0; /* should this be an error? */
 
                spin_lock_irqsave(&pending_free_lock, flags);
-               if ( (info != NULL) && (info->dev_pending) )
+               if (info->dev_pending)
                        info->dev_pending = 0;
                spin_unlock_irqrestore(&pending_free_lock, flags);
 
@@ -655,16 +708,12 @@ static int blktap_ioctl(struct inode *in
        {
                unsigned long dev = arg;
 
-               /* Looking at another device */
-               info = NULL;
-               
-               if ( (dev > 0) && (dev < MAX_TAP_DEV) )
-                       info = tapfds[dev];
-               
-               if (info != NULL)
-                       return info->minor;
-               else
-                       return -1;
+               info = tapfds[dev];
+
+               if ((dev > MAX_TAP_DEV) || !info)
+                       return -EINVAL;
+
+               return info->minor;
        }
        case BLKTAP_IOCTL_MAJOR:
                return blktap_major;
@@ -683,13 +732,8 @@ static unsigned int blktap_poll(struct f
 {
        tap_blkif_t *info = filp->private_data;
        
-       if (!info) {
-               WPRINTK(" poll, retrieving idx failed\n");
-               return 0;
-       }
-
        /* do not work on the control device */
-       if (!info->minor)
+       if (!info)
                return 0;
 
        poll_wait(filp, &info->wait, wait);
@@ -704,13 +748,12 @@ void blktap_kick_user(int idx)
 {
        tap_blkif_t *info;
 
-       if (idx == 0)
+       info = tapfds[idx];
+
+       if ((idx < 0) || (idx > MAX_TAP_DEV) || !info)
                return;
-       
-       info = tapfds[idx];
-       
-       if (info != NULL)
-               wake_up_interruptible(&info->wait);
+
+       wake_up_interruptible(&info->wait);
 
        return;
 }
@@ -822,8 +865,8 @@ static void free_req(pending_req_t *req)
                wake_up(&pending_free_wq);
 }
 
-static void fast_flush_area(pending_req_t *req, int k_idx, int u_idx, int 
-                           tapidx)
+static void fast_flush_area(pending_req_t *req, int k_idx, int u_idx,
+                           int tapidx)
 {
        struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST*2];
        unsigned int i, invcount = 0;
@@ -831,13 +874,16 @@ static void fast_flush_area(pending_req_
        uint64_t ptep;
        int ret, mmap_idx;
        unsigned long kvaddr, uvaddr;
-
-       tap_blkif_t *info = tapfds[tapidx];
+       tap_blkif_t *info;
        
-       if (info == NULL) {
+
+       info = tapfds[tapidx];
+
+       if ((tapidx < 0) || (tapidx > MAX_TAP_DEV) || !info) {
                WPRINTK("fast_flush: Couldn't get info!\n");
                return;
        }
+
        mmap_idx = req->mem_idx;
 
        for (i = 0; i < req->nr_pages; i++) {
@@ -1042,7 +1088,7 @@ static int do_block_io_op(blkif_t *blkif
        rmb(); /* Ensure we see queued requests up to 'rp'. */
 
        /*Check blkif has corresponding UE ring*/
-       if (blkif->dev_num == -1) {
+       if (blkif->dev_num < 0) {
                /*oops*/
                if (print_dbug) {
                        WPRINTK("Corresponding UE " 
@@ -1053,7 +1099,8 @@ static int do_block_io_op(blkif_t *blkif
        }
 
        info = tapfds[blkif->dev_num];
-       if (info == NULL || !info->dev_inuse) {
+
+       if (blkif->dev_num > MAX_TAP_DEV || !info || !info->dev_inuse) {
                if (print_dbug) {
                        WPRINTK("Can't get UE info!\n");
                        print_dbug = 0;
@@ -1121,15 +1168,22 @@ static void dispatch_rw_block_io(blkif_t
        struct gnttab_map_grant_ref map[BLKIF_MAX_SEGMENTS_PER_REQUEST*2];
        unsigned int nseg;
        int ret, i;
-       tap_blkif_t *info = tapfds[blkif->dev_num];
+       tap_blkif_t *info;
        uint64_t sector;
-       
        blkif_request_t *target;
        int pending_idx = RTN_PEND_IDX(pending_req,pending_req->mem_idx);
-       int usr_idx = GET_NEXT_REQ(info->idx_map);
+       int usr_idx;
        uint16_t mmap_idx = pending_req->mem_idx;
 
+       if (blkif->dev_num < 0 || blkif->dev_num > MAX_TAP_DEV)
+               goto fail_response;
+
+       info = tapfds[blkif->dev_num];
+       if (info == NULL)
+               goto fail_response;
+
        /* Check we have space on user ring - should never fail. */
+       usr_idx = GET_NEXT_REQ(info->idx_map);
        if (usr_idx == INVALID_REQ)
                goto fail_response;
 
@@ -1330,7 +1384,6 @@ static int __init blkif_init(void)
 static int __init blkif_init(void)
 {
        int i,ret,blktap_dir;
-       tap_blkif_t *info;
 
        if (!is_running_on_xen())
                return -ENODEV;
@@ -1349,9 +1402,6 @@ static int __init blkif_init(void)
        alloc_pending_reqs = 0;
 
        tap_blkif_xenbus_init();
-
-       /*Create the blktap devices, but do not map memory or waitqueue*/
-       for(i = 0; i < MAX_TAP_DEV; i++) translate_domid[i].domid = 0xFFFF;
 
        /* Dynamically allocate a major for this device */
        ret = register_chrdev(0, "blktap", &blktap_fops);
@@ -1364,24 +1414,17 @@ static int __init blkif_init(void)
        
        blktap_major = ret;
 
-       for(i = 0; i < MAX_TAP_DEV; i++ ) {
-               info = tapfds[i] = kzalloc(sizeof(tap_blkif_t),GFP_KERNEL);
-               if(tapfds[i] == NULL)
-                       return -ENOMEM;
-               info->minor = i;
-               info->pid = 0;
-               info->blkif = NULL;
-
-               ret = devfs_mk_cdev(MKDEV(blktap_major, i),
-                       S_IFCHR|S_IRUGO|S_IWUSR, "xen/blktap%d", i);
-
-               if(ret != 0)
-                       return -ENOMEM;
-               info->dev_pending = info->dev_inuse = 0;
-
-               DPRINTK("Created misc_dev [/dev/xen/blktap%d]\n",i);
-       }
-       
+       /* tapfds[0] is always NULL */
+       blktap_next_minor++;
+
+       ret = devfs_mk_cdev(MKDEV(blktap_major, i),
+                           S_IFCHR|S_IRUGO|S_IWUSR, "xen/blktap%d", i);
+
+       if(ret != 0)
+               return -ENOMEM;
+
+       DPRINTK("Created misc_dev [/dev/xen/blktap%d]\n",i);
+
        /* Make sure the xen class exists */
        if (!setup_xen_class()) {
                /*
@@ -1394,7 +1437,6 @@ static int __init blkif_init(void)
                class_device_create(xen_class, NULL,
                                    MKDEV(blktap_major, 0), NULL,
                                    "blktap0");
-               tapfds[0]->sysfs_set = 1;
        } else {
                /* this is bad, but not fatal */
                WPRINTK("blktap: sysfs xen_class not created\n");
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/netback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/netback/common.h Tue Oct 24 10:08:30 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/common.h Tue Oct 24 11:21:48 
2006 -0600
@@ -92,6 +92,9 @@ typedef struct netif_st {
        unsigned long   remaining_credit;
        struct timer_list credit_timeout;
 
+       /* Enforce draining of the transmit queue. */
+       struct timer_list tx_queue_timeout;
+
        /* Miscellaneous private stuff. */
        struct list_head list;  /* scheduling list */
        atomic_t         refcnt;
@@ -119,6 +122,8 @@ int netif_map(netif_t *netif, unsigned l
 
 void netif_xenbus_init(void);
 
+#define netif_schedulable(dev) (netif_running(dev) && netif_carrier_ok(dev))
+
 void netif_schedule_work(netif_t *netif);
 void netif_deschedule_work(netif_t *netif);
 
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/netback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c      Tue Oct 24 
10:08:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c      Tue Oct 24 
11:21:48 2006 -0600
@@ -44,12 +44,11 @@
  * For example, consider a packet that holds onto resources belonging to the
  * guest for which it is queued (e.g., packet received on vif1.0, destined for
  * vif1.1 which is not activated in the guest): in this situation the guest
- * will never be destroyed, unless vif1.1 is taken down (which flushes the
- * 'tx_queue').
- * 
- * Only set this parameter to non-zero value if you know what you are doing!
+ * will never be destroyed, unless vif1.1 is taken down. To avoid this, we
+ * run a timer (tx_queue_timeout) to drain the queue when the interface is
+ * blocked.
  */
-static unsigned long netbk_queue_length = 0;
+static unsigned long netbk_queue_length = 32;
 module_param_named(queue_length, netbk_queue_length, ulong, 0);
 
 static void __netif_up(netif_t *netif)
@@ -62,7 +61,6 @@ static void __netif_down(netif_t *netif)
 {
        disable_irq(netif->irq);
        netif_deschedule_work(netif);
-       del_timer_sync(&netif->credit_timeout);
 }
 
 static int net_open(struct net_device *dev)
@@ -153,7 +151,10 @@ netif_t *netif_alloc(domid_t domid, unsi
        netif->credit_bytes = netif->remaining_credit = ~0UL;
        netif->credit_usec  = 0UL;
        init_timer(&netif->credit_timeout);
+       /* Initialize 'expires' now: it's used to track the credit window. */
        netif->credit_timeout.expires = jiffies;
+
+       init_timer(&netif->tx_queue_timeout);
 
        dev->hard_start_xmit = netif_be_start_xmit;
        dev->get_stats       = netif_be_get_stats;
@@ -319,25 +320,6 @@ err_rx:
        return err;
 }
 
-static void netif_free(netif_t *netif)
-{
-       atomic_dec(&netif->refcnt);
-       wait_event(netif->waiting_to_free, atomic_read(&netif->refcnt) == 0);
-
-       if (netif->irq)
-               unbind_from_irqhandler(netif->irq, netif);
-       
-       unregister_netdev(netif->dev);
-
-       if (netif->tx.sring) {
-               unmap_frontend_pages(netif);
-               free_vm_area(netif->tx_comms_area);
-               free_vm_area(netif->rx_comms_area);
-       }
-
-       free_netdev(netif->dev);
-}
-
 void netif_disconnect(netif_t *netif)
 {
        if (netif_carrier_ok(netif->dev)) {
@@ -348,5 +330,23 @@ void netif_disconnect(netif_t *netif)
                rtnl_unlock();
                netif_put(netif);
        }
-       netif_free(netif);
-}
+
+       atomic_dec(&netif->refcnt);
+       wait_event(netif->waiting_to_free, atomic_read(&netif->refcnt) == 0);
+
+       del_timer_sync(&netif->credit_timeout);
+       del_timer_sync(&netif->tx_queue_timeout);
+
+       if (netif->irq)
+               unbind_from_irqhandler(netif->irq, netif);
+       
+       unregister_netdev(netif->dev);
+
+       if (netif->tx.sring) {
+               unmap_frontend_pages(netif);
+               free_vm_area(netif->tx_comms_area);
+               free_vm_area(netif->rx_comms_area);
+       }
+
+       free_netdev(netif->dev);
+}
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Tue Oct 24 
10:08:30 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Tue Oct 24 
11:21:48 2006 -0600
@@ -264,6 +264,13 @@ static inline int netbk_queue_full(netif
               ((netif->rx.rsp_prod_pvt + NET_RX_RING_SIZE - peek) < needed);
 }
 
+static void tx_queue_callback(unsigned long data)
+{
+       netif_t *netif = (netif_t *)data;
+       if (netif_schedulable(netif->dev))
+               netif_wake_queue(netif->dev);
+}
+
 int netif_be_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        netif_t *netif = netdev_priv(dev);
@@ -271,20 +278,13 @@ int netif_be_start_xmit(struct sk_buff *
        BUG_ON(skb->dev != dev);
 
        /* Drop the packet if the target domain has no receive buffers. */
-       if (unlikely(!netif_running(dev) || !netif_carrier_ok(dev)))
+       if (unlikely(!netif_schedulable(dev) || netbk_queue_full(netif)))
                goto drop;
 
-       if (unlikely(netbk_queue_full(netif))) {
-               /* Not a BUG_ON() -- misbehaving netfront can trigger this. */
-               if (netbk_can_queue(dev))
-                       DPRINTK("Queue full but not stopped!\n");
-               goto drop;
-       }
-
-       /* Copy the packet here if it's destined for a flipping
-          interface but isn't flippable (e.g. extra references to
-          data)
-       */
+       /*
+        * Copy the packet here if it's destined for a flipping interface
+        * but isn't flippable (e.g. extra references to data).
+        */
        if (!netif->copying_receiver && !is_flippable_skb(skb)) {
                struct sk_buff *nskb = netbk_copy_skb(skb);
                if ( unlikely(nskb == NULL) )
@@ -305,8 +305,19 @@ int netif_be_start_xmit(struct sk_buff *
                netif->rx.sring->req_event = netif->rx_req_cons_peek +
                        netbk_max_required_rx_slots(netif);
                mb(); /* request notification /then/ check & stop the queue */
-               if (netbk_queue_full(netif))
+               if (netbk_queue_full(netif)) {
                        netif_stop_queue(dev);
+                       /*
+                        * Schedule 500ms timeout to restart the queue, thus
+                        * ensuring that an inactive queue will be drained.
+                        * Packets will be immediately be dropped until more
+                        * receive buffers become available (see
+                        * netbk_queue_full() check above).
+                        */
+                       netif->tx_queue_timeout.data = (unsigned long)netif;
+                       netif->tx_queue_timeout.function = tx_queue_callback;
+                       __mod_timer(&netif->tx_queue_timeout, jiffies + HZ/2);
+               }
        }
 
        skb_queue_tail(&rx_queue, skb);
@@ -706,6 +717,7 @@ static void net_rx_action(unsigned long 
                }
 
                if (netif_queue_stopped(netif->dev) &&
+                   netif_schedulable(netif->dev) &&
                    !netbk_queue_full(netif))
                        netif_wake_queue(netif->dev);
 
@@ -763,8 +775,7 @@ static void add_to_net_schedule_list_tai
 
        spin_lock_irq(&net_schedule_list_lock);
        if (!__on_net_schedule_list(netif) &&
-           likely(netif_running(netif->dev) &&
-                  netif_carrier_ok(netif->dev))) {
+           likely(netif_schedulable(netif->dev))) {
                list_add_tail(&netif->list, &net_schedule_list);
                netif_get(netif);
        }
@@ -1358,7 +1369,7 @@ irqreturn_t netif_be_int(int irq, void *
        add_to_net_schedule_list_tail(netif);
        maybe_schedule_tx_action();
 
-       if (netif_queue_stopped(netif->dev) && !netbk_queue_full(netif))
+       if (netif_schedulable(netif->dev) && !netbk_queue_full(netif))
                netif_wake_queue(netif->dev);
 
        return IRQ_HANDLED;
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c Tue Oct 24 10:08:30 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c Tue Oct 24 11:21:48 
2006 -0600
@@ -328,7 +328,7 @@ static void connect(struct backend_info 
 
        /* May not get a kick from the frontend, so start the tx_queue now. */
        if (!netbk_can_queue(be->netif->dev))
-               netif_start_queue(be->netif->dev);
+               netif_wake_queue(be->netif->dev);
 }
 
 
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/domain-timeoffset
--- a/tools/ioemu/patches/domain-timeoffset     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/domain-timeoffset     Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/mc146818rtc.c
 Index: ioemu/hw/mc146818rtc.c
 ===================================================================
---- ioemu.orig/hw/mc146818rtc.c        2006-09-21 19:33:25.000000000 +0100
-+++ ioemu/hw/mc146818rtc.c     2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/hw/mc146818rtc.c        2006-10-24 14:45:21.000000000 +0100
++++ ioemu/hw/mc146818rtc.c     2006-10-24 14:45:39.000000000 +0100
 @@ -178,10 +178,27 @@
      }
  }
@@ -46,8 +46,8 @@ Index: ioemu/hw/mc146818rtc.c
  static void rtc_copy_date(RTCState *s)
 Index: ioemu/hw/pc.c
 ===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/hw/pc.c      2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:45:38.000000000 +0100
++++ ioemu/hw/pc.c      2006-10-24 14:45:39.000000000 +0100
 @@ -159,7 +159,7 @@
  }
  
@@ -117,8 +117,8 @@ Index: ioemu/hw/pc.c
  QEMUMachine pc_machine = {
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/vl.c    2006-10-24 14:45:38.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:45:39.000000000 +0100
 @@ -163,6 +163,8 @@
  
  int xc_handle;
@@ -174,8 +174,8 @@ Index: ioemu/vl.c
      if (usb_enabled) {
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:30.000000000 +0100
+--- ioemu.orig/vl.h    2006-10-24 14:45:38.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:45:39.000000000 +0100
 @@ -576,7 +576,7 @@
                                   int boot_device,
               DisplayState *ds, const char **fd_filename, int snapshot,
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/qemu-bootorder
--- a/tools/ioemu/patches/qemu-bootorder        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/qemu-bootorder        Tue Oct 24 11:21:48 2006 -0600
@@ -1,9 +1,9 @@ Index: ioemu/vl.c
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -124,7 +124,7 @@
- int vncunused;
+--- ioemu.orig/vl.c    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -125,7 +125,7 @@
+ struct sockaddr_in vnclisten_addr;
  const char* keyboard_layout = NULL;
  int64_t ticks_per_sec;
 -int boot_device = 'c';
@@ -11,7 +11,7 @@ Index: ioemu/vl.c
  uint64_t ram_size;
  int pit_min_timer_count = 0;
  int nb_nics;
-@@ -6063,14 +6063,14 @@
+@@ -6075,14 +6075,14 @@
                  break;
  #endif /* !CONFIG_DM */
              case QEMU_OPTION_boot:
@@ -32,7 +32,7 @@ Index: ioemu/vl.c
                      exit(1);
                  }
                  break;
-@@ -6334,6 +6334,7 @@
+@@ -6349,6 +6349,7 @@
          fd_filename[0] == '\0')
          help();
      
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
      /* boot to cd by default if no hard disk */
      if (hd_filename[0] == '\0' && boot_device == 'c') {
          if (fd_filename[0] != '\0')
-@@ -6341,6 +6342,7 @@
+@@ -6356,6 +6357,7 @@
          else
              boot_device = 'd';
      }
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
  #endif /* !CONFIG_DM */
  
      setvbuf(stdout, NULL, _IOLBF, 0);
-@@ -6599,6 +6601,7 @@
+@@ -6614,6 +6616,7 @@
                    ds, fd_filename, snapshot,
                    kernel_filename, kernel_cmdline, initrd_filename,
                    timeoffset);
@@ -58,9 +58,9 @@ Index: ioemu/vl.c
      if (usb_enabled) {
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -576,7 +576,7 @@
+--- ioemu.orig/vl.h    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
+@@ -578,7 +578,7 @@
  #ifndef QEMU_TOOL
  
  typedef void QEMUMachineInitFunc(uint64_t ram_size, int vga_ram_size, 
@@ -69,7 +69,7 @@ Index: ioemu/vl.h
               DisplayState *ds, const char **fd_filename, int snapshot,
               const char *kernel_filename, const char *kernel_cmdline,
               const char *initrd_filename, time_t timeoffset);
-@@ -1021,7 +1021,7 @@
+@@ -1023,7 +1023,7 @@
                      uint32_t start, uint32_t count);
  int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
                            const unsigned char *arch,
@@ -80,8 +80,8 @@ Index: ioemu/vl.h
                            uint32_t initrd_image, uint32_t initrd_size,
 Index: ioemu/hw/pc.c
 ===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/hw/pc.c      2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:33:47.000000000 +0100
++++ ioemu/hw/pc.c      2006-10-24 14:33:47.000000000 +0100
 @@ -158,8 +158,23 @@
      rtc_set_memory(s, info_ofs + 8, sectors);
  }
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/qemu-cleanup
--- a/tools/ioemu/patches/qemu-cleanup  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/qemu-cleanup  Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/vga.c
 Index: ioemu/hw/vga.c
 ===================================================================
---- ioemu.orig/hw/vga.c        2006-08-06 02:03:51.906765409 +0100
-+++ ioemu/hw/vga.c     2006-08-06 02:15:10.364150665 +0100
+--- ioemu.orig/hw/vga.c        2006-10-24 14:44:03.000000000 +0100
++++ ioemu/hw/vga.c     2006-10-24 14:45:22.000000000 +0100
 @@ -1622,7 +1622,9 @@
  static void vga_save(QEMUFile *f, void *opaque)
  {
@@ -26,8 +26,8 @@ Index: ioemu/hw/vga.c
          return -EINVAL;
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-08-06 02:15:01.774108287 +0100
-+++ ioemu/vl.c 2006-08-06 02:15:31.040845624 +0100
+--- ioemu.orig/vl.c    2006-10-24 14:44:08.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:45:29.000000000 +0100
 @@ -39,6 +39,7 @@
  #include <sys/ioctl.h>
  #include <sys/socket.h>
@@ -36,6 +36,24 @@ Index: ioemu/vl.c
  #include <dirent.h>
  #include <netdb.h>
  #ifdef _BSD
+@@ -2932,7 +2933,7 @@
+     }
+ 
+     /* XXX: better tmp dir construction */
+-    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%d", getpid());
++    snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%ld", (long)getpid());
+     if (mkdir(smb_dir, 0700) < 0) {
+         fprintf(stderr, "qemu: could not create samba server dir '%s'\n", 
smb_dir);
+         exit(1);
+@@ -3893,7 +3894,7 @@
+                 perror("Opening pidfile");
+                 exit(1);
+             }
+-            fprintf(f, "%d\n", getpid());
++            fprintf(f, "%ld\n", (long)getpid());
+             fclose(f);
+             pid_filename = qemu_strdup(filename);
+             if (!pid_filename) {
 @@ -5308,7 +5309,9 @@
      QEMU_OPTION_d,
      QEMU_OPTION_hdachs,
@@ -70,8 +88,8 @@ Index: ioemu/vl.c
                      fprintf(stderr, "qemu: too many network clients\n");
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-08-06 02:15:01.775108175 +0100
-+++ ioemu/vl.h 2006-08-06 02:15:10.368150219 +0100
+--- ioemu.orig/vl.h    2006-10-24 14:44:08.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:45:22.000000000 +0100
 @@ -957,7 +957,7 @@
               unsigned long vram_offset, int vram_size, int width, int height);
  
@@ -81,3 +99,18 @@ Index: ioemu/vl.h
  void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
  void slavio_pic_info(void *opaque);
  void slavio_irq_info(void *opaque);
+Index: ioemu/usb-linux.c
+===================================================================
+--- ioemu.orig/usb-linux.c     2006-10-24 14:44:03.000000000 +0100
++++ ioemu/usb-linux.c  2006-10-24 14:44:08.000000000 +0100
+@@ -26,7 +26,9 @@
+ #if defined(__linux__)
+ #include <dirent.h>
+ #include <sys/ioctl.h>
+-#include <linux/compiler.h>
++/* Some versions of usbdevice_fs.h need __user to be defined for them.   */
++/* This may (harmlessly) conflict with a definition in linux/compiler.h. */
++#define __user
+ #include <linux/usbdevice_fs.h>
+ #include <linux/version.h>
+ 
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/qemu-daemonize
--- a/tools/ioemu/patches/qemu-daemonize        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/qemu-daemonize        Tue Oct 24 11:21:48 2006 -0600
@@ -2,9 +2,9 @@ Changes required because qemu-dm runs da
 
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -6042,10 +6042,11 @@
+--- ioemu.orig/vl.c    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -6054,10 +6054,11 @@
                  }
                  break;
              case QEMU_OPTION_nographic:
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/qemu-logging
--- a/tools/ioemu/patches/qemu-logging  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/qemu-logging  Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-08-06 02:15:48.550893605 +0100
-+++ ioemu/vl.c 2006-08-06 02:16:31.246133963 +0100
+--- ioemu.orig/vl.c    2006-10-24 14:36:58.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:37:03.000000000 +0100
 @@ -5234,7 +5234,7 @@
             "-S              freeze CPU at startup (use 'c' to start 
execution)\n"
             "-s              wait gdb connection to port %d\n"
@@ -43,7 +43,7 @@ Index: ioemu/vl.c
      /* default mac address of the first network interface */
      
 +    /* init debug */
-+    sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
++    sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%ld.log", 
(long)getpid());
 +    cpu_set_log_filename(qemu_dm_logfilename);
 +    cpu_set_log(0);
 +    
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/qemu-target-i386-dm
--- a/tools/ioemu/patches/qemu-target-i386-dm   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/qemu-target-i386-dm   Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/Makefile.target
 Index: ioemu/Makefile.target
 ===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/Makefile.target      2006-09-21 18:54:22.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 13:47:23.000000000 +0100
++++ ioemu/Makefile.target      2006-10-24 14:30:56.000000000 +0100
 @@ -62,6 +62,8 @@
  QEMU_SYSTEM=qemu-fast
  endif
@@ -32,8 +32,8 @@ Index: ioemu/Makefile.target
  DEFINES += -DHAS_AUDIO
 Index: ioemu/configure
 ===================================================================
---- ioemu.orig/configure       2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/configure    2006-09-21 18:54:21.000000000 +0100
+--- ioemu.orig/configure       2006-10-24 13:47:23.000000000 +0100
++++ ioemu/configure    2006-10-24 14:29:34.000000000 +0100
 @@ -373,6 +373,8 @@
      if [ "$user" = "yes" ] ; then
          target_list="i386-user arm-user armeb-user sparc-user ppc-user 
mips-user mipsel-user $target_list"
@@ -45,8 +45,8 @@ Index: ioemu/configure
  fi
 Index: ioemu/monitor.c
 ===================================================================
---- ioemu.orig/monitor.c       2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/monitor.c    2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/monitor.c       2006-10-24 13:47:23.000000000 +0100
++++ ioemu/monitor.c    2006-10-24 14:30:56.000000000 +0100
 @@ -1262,6 +1262,10 @@
        "", "show profiling information", },
      { "capture", "", do_info_capture,
@@ -60,8 +60,8 @@ Index: ioemu/monitor.c
  
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/vl.c    2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:30:56.000000000 +0100
 @@ -87,7 +87,7 @@
  
  #include "exec-all.h"
@@ -98,8 +98,8 @@ Index: ioemu/vl.c
  {
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 11:30:11.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 18:54:23.000000000 +0100
+--- ioemu.orig/vl.h    2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:30:56.000000000 +0100
 @@ -37,6 +37,8 @@
  #include <unistd.h>
  #include <fcntl.h>
@@ -132,7 +132,7 @@ Index: ioemu/target-i386-dm/cpu.h
 Index: ioemu/target-i386-dm/cpu.h
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/cpu.h 2006-09-21 18:54:22.000000000 +0100
++++ ioemu/target-i386-dm/cpu.h 2006-10-24 14:30:56.000000000 +0100
 @@ -0,0 +1,86 @@
 +/*
 + * i386 virtual CPU header
@@ -223,7 +223,7 @@ Index: ioemu/target-i386-dm/exec-dm.c
 Index: ioemu/target-i386-dm/exec-dm.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/exec-dm.c     2006-09-21 18:54:22.000000000 +0100
++++ ioemu/target-i386-dm/exec-dm.c     2006-10-24 14:30:56.000000000 +0100
 @@ -0,0 +1,516 @@
 +/*
 + *  virtual page mapping and translated block handling
@@ -744,7 +744,7 @@ Index: ioemu/target-i386-dm/helper2.c
 Index: ioemu/target-i386-dm/helper2.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/helper2.c     2006-09-21 18:55:31.000000000 +0100
++++ ioemu/target-i386-dm/helper2.c     2006-10-24 14:31:01.000000000 +0100
 @@ -0,0 +1,469 @@
 +/*
 + *  i386 helpers (without register variable usage)
@@ -1205,8 +1205,8 @@ Index: ioemu/target-i386-dm/helper2.c
 +                break;
 +        }
 +
-+        /* Wait up to 100 msec. */
-+        main_loop_wait(100);
++        /* Wait up to 10 msec. */
++        main_loop_wait(10);
 +
 +        if (env->send_event) {
 +            env->send_event = 0;
@@ -1218,7 +1218,7 @@ Index: ioemu/target-i386-dm/i8259-dm.c
 Index: ioemu/target-i386-dm/i8259-dm.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/i8259-dm.c    2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/i8259-dm.c    2006-10-24 13:47:23.000000000 +0100
 @@ -0,0 +1,107 @@
 +/* Xen 8259 stub for interrupt controller emulation
 + * 
@@ -1330,7 +1330,7 @@ Index: ioemu/target-i386-dm/qemu-dm.debu
 Index: ioemu/target-i386-dm/qemu-dm.debug
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/qemu-dm.debug 2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/qemu-dm.debug 2006-10-24 13:47:23.000000000 +0100
 @@ -0,0 +1,5 @@
 +#!/bin/sh
 +
@@ -1340,7 +1340,7 @@ Index: ioemu/target-i386-dm/qemu-ifup
 Index: ioemu/target-i386-dm/qemu-ifup
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/target-i386-dm/qemu-ifup     2006-09-21 11:30:11.000000000 +0100
++++ ioemu/target-i386-dm/qemu-ifup     2006-10-24 13:47:23.000000000 +0100
 @@ -0,0 +1,10 @@
 +#!/bin/sh
 +
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/series
--- a/tools/ioemu/patches/series        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/series        Tue Oct 24 11:21:48 2006 -0600
@@ -32,10 +32,12 @@ fix-vga-scanning-code-overflow
 fix-vga-scanning-code-overflow
 vnc-cleanup
 vnc-fixes
+vnc-protocol-fixes
 vnc-start-vncviewer
 vnc-title-domain-name
 vnc-access-monitor-vt
 vnc-display-find-unused
+vnc-listen-specific-interface
 vnc-backoff-screen-scan
 xenstore-block-device-config
 xenstore-write-vnc-port
@@ -47,3 +49,7 @@ qemu-bootorder
 qemu-bootorder
 qemu-tunable-ide-write-cache
 qemu-pci 
+serial-port-rate-limit
+hypervisor-rtc
+ide-cd-dma
+vnc-password
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-access-monitor-vt
--- a/tools/ioemu/patches/vnc-access-monitor-vt Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/vnc-access-monitor-vt Tue Oct 24 11:21:48 2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:33:31.000000000 +0100
-@@ -32,6 +32,10 @@
+--- ioemu.orig/vnc.c   2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:33:46.000000000 +0100
+@@ -33,6 +33,10 @@
  #include "vnc_keysym.h"
  #include "keymaps.c"
  
@@ -13,7 +13,7 @@ Index: ioemu/vnc.c
  typedef struct Buffer
  {
      size_t capacity;
-@@ -95,6 +99,8 @@
+@@ -96,6 +100,8 @@
      int visible_h;
  
      int slow_client;
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
  };
  
  #define DIRTY_PIXEL_BITS 64
-@@ -791,16 +797,80 @@
+@@ -794,16 +800,80 @@
  
  static void do_key_event(VncState *vs, int down, uint32_t sym)
  {
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-backoff-screen-scan
--- a/tools/ioemu/patches/vnc-backoff-screen-scan       Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/ioemu/patches/vnc-backoff-screen-scan       Tue Oct 24 11:21:48 
2006 -0600
@@ -1,10 +1,10 @@ Index: ioemu/vnc.c
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:32:23.000000000 +0100
-@@ -27,7 +27,19 @@
- #include "vl.h"
+--- ioemu.orig/vnc.c   2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:33:24.000000000 +0100
+@@ -28,7 +28,19 @@
  #include "qemu_socket.h"
+ #include <assert.h>
  
 -#define VNC_REFRESH_INTERVAL (1000 / 30)
 +/* The refresh interval starts at BASE.  If we scan the buffer and
@@ -23,7 +23,7 @@ Index: ioemu/vnc.c
  
  #include "vnc_keysym.h"
  #include "keymaps.c"
-@@ -64,10 +76,11 @@
+@@ -65,10 +77,11 @@
  struct VncState
  {
      QEMUTimer *timer;
@@ -36,7 +36,7 @@ Index: ioemu/vnc.c
      int width;
      int height;
      uint64_t *dirty_row;      /* screen regions which are possibly dirty */
-@@ -98,8 +111,6 @@
+@@ -99,8 +112,6 @@
      int visible_w;
      int visible_h;
  
@@ -45,7 +45,7 @@ Index: ioemu/vnc.c
      int ctl_keys;               /* Ctrl+Alt starts calibration */
  };
  
-@@ -380,7 +391,7 @@
+@@ -381,7 +392,7 @@
      int y = 0;
      int pitch = ds->linesize;
      VncState *vs = ds->opaque;
@@ -54,19 +54,19 @@ Index: ioemu/vnc.c
  
      if (src_x < vs->visible_x || src_y < vs->visible_y ||
        dst_x < vs->visible_x || dst_y < vs->visible_y ||
-@@ -390,11 +401,6 @@
+@@ -391,10 +402,8 @@
        (dst_y + h) > (vs->visible_y + vs->visible_h))
        updating_client = 0;
  
 -    if (updating_client) {
 -      vs->need_update = 1;
--      _vnc_update_client(vs);
++    if (updating_client)
+       _vnc_update_client(vs);
 -    }
--
+ 
      if (dst_y > src_y) {
        y = h - 1;
-       pitch = -pitch;
-@@ -445,110 +451,145 @@
+@@ -446,110 +455,149 @@
  static void _vnc_update_client(void *opaque)
  {
      VncState *vs = opaque;
@@ -279,12 +279,16 @@ Index: ioemu/vnc.c
 +             interested (e.g. minimised) it'll ignore this, and we
 +             can stop scanning the buffer until it sends another
 +             update request. */
-+          /* Note that there are bugs in xvncviewer which prevent
-+             this from actually working.  Leave the code in place
-+             for correct clients. */
++          /* It turns out that there's a bug in realvncviewer 4.1.2
++             which means that if you send a proper null update (with
++             no update rectangles), it gets a bit out of sync and
++             never sends any further requests, regardless of whether
++             it needs one or not.  Fix this by sending a single 1x1
++             update rectangle instead. */
 +          vnc_write_u8(vs, 0);
 +          vnc_write_u8(vs, 0);
-+          vnc_write_u16(vs, 0);
++          vnc_write_u16(vs, 1);
++          send_framebuffer_update(vs, 0, 0, 1, 1);
 +          vnc_flush(vs);
 +          vs->last_update_time = now;
 +          return;
@@ -295,7 +299,7 @@ Index: ioemu/vnc.c
  }
  
  static void vnc_update_client(void *opaque)
-@@ -561,8 +602,10 @@
+@@ -562,8 +610,10 @@
  
  static void vnc_timer_init(VncState *vs)
  {
@@ -307,7 +311,7 @@ Index: ioemu/vnc.c
  }
  
  static void vnc_dpy_refresh(DisplayState *ds)
-@@ -622,7 +665,6 @@
+@@ -623,7 +673,6 @@
        vs->csock = -1;
        buffer_reset(&vs->input);
        buffer_reset(&vs->output);
@@ -315,7 +319,7 @@ Index: ioemu/vnc.c
        return 0;
      }
      return ret;
-@@ -892,7 +934,6 @@
+@@ -895,7 +944,6 @@
                                       int x_position, int y_position,
                                       int w, int h)
  {
@@ -323,7 +327,7 @@ Index: ioemu/vnc.c
      if (!incremental)
        framebuffer_set_updated(vs, x_position, y_position, w, h);
      vs->visible_x = x_position;
-@@ -1015,6 +1056,7 @@
+@@ -1018,6 +1066,7 @@
  {
      int i;
      uint16_t limit;
@@ -331,7 +335,7 @@ Index: ioemu/vnc.c
  
      switch (data[0]) {
      case 0:
-@@ -1054,12 +1096,18 @@
+@@ -1061,12 +1110,18 @@
        if (len == 1)
            return 8;
  
@@ -352,15 +356,15 @@ Index: ioemu/vnc.c
      case 6:
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:32:23.000000000 +0100
-@@ -725,6 +725,12 @@
+--- ioemu.orig/vl.c    2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:24.000000000 +0100
+@@ -726,6 +726,12 @@
      }
  }
  
 +void qemu_advance_timer(QEMUTimer *ts, int64_t expire_time)
 +{
-+    if (ts->expire_time > expire_time)
++    if (ts->expire_time > expire_time || !qemu_timer_pending(ts))
 +      qemu_mod_timer(ts, expire_time);
 +}
 +
@@ -369,9 +373,9 @@ Index: ioemu/vl.c
  void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time)
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:31:03.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:32:23.000000000 +0100
-@@ -405,6 +405,7 @@
+--- ioemu.orig/vl.h    2006-10-24 14:33:17.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:24.000000000 +0100
+@@ -407,6 +407,7 @@
  void qemu_free_timer(QEMUTimer *ts);
  void qemu_del_timer(QEMUTimer *ts);
  void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-display-find-unused
--- a/tools/ioemu/patches/vnc-display-find-unused       Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/ioemu/patches/vnc-display-find-unused       Tue Oct 24 11:21:48 
2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:33:31.000000000 +0100
-@@ -1182,7 +1182,7 @@
+--- ioemu.orig/vnc.c   2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:31:36.000000000 +0100
+@@ -1195,7 +1195,7 @@
      }
  }
  
@@ -11,7 +11,7 @@ Index: ioemu/vnc.c
  {
      struct sockaddr_in addr;
      int reuse_addr, ret;
-@@ -1213,10 +1213,6 @@
+@@ -1226,10 +1226,6 @@
        exit(1);
      }
  
@@ -22,7 +22,7 @@ Index: ioemu/vnc.c
      reuse_addr = 1;
      ret = setsockopt(vs->lsock, SOL_SOCKET, SO_REUSEADDR,
                     (const char *)&reuse_addr, sizeof(reuse_addr));
-@@ -1225,7 +1221,16 @@
+@@ -1238,7 +1234,16 @@
        exit(1);
      }
  
@@ -39,7 +39,7 @@ Index: ioemu/vnc.c
        fprintf(stderr, "bind() failed\n");
        exit(1);
      }
-@@ -1246,6 +1251,8 @@
+@@ -1259,6 +1264,8 @@
      vs->ds->dpy_refresh = vnc_dpy_refresh;
  
      vnc_dpy_resize(vs->ds, 640, 400);
@@ -50,8 +50,8 @@ Index: ioemu/vnc.c
  int vnc_start_viewer(int port)
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/vl.c    2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:31:41.000000000 +0100
 @@ -121,6 +121,7 @@
  static DisplayState display_state;
  int nographic;
@@ -99,7 +99,7 @@ Index: ioemu/vl.c
 +            case QEMU_OPTION_vncunused:
 +                vncunused++;
 +                if (vnc_display == -1)
-+                    vnc_display = -2;
++                    vnc_display = 0;
 +                break;
              }
          }
@@ -115,8 +115,8 @@ Index: ioemu/vl.c
      } else {
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/vl.h    2006-10-24 14:31:09.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:31:36.000000000 +0100
 @@ -785,7 +785,7 @@
  void cocoa_display_init(DisplayState *ds, int full_screen);
  
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-fixes
--- a/tools/ioemu/patches/vnc-fixes     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/vnc-fixes     Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:08:18.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:26:24.000000000 +0100
+--- ioemu.orig/vl.c    2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:19:36.000000000 +0100
 @@ -6534,8 +6534,10 @@
          }
      }
@@ -17,8 +17,8 @@ Index: ioemu/vl.c
      if (use_gdbstub) {
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:08:18.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:26:38.000000000 +0100
+--- ioemu.orig/vnc.c   2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:20:00.000000000 +0100
 @@ -3,6 +3,7 @@
   * 
   * Copyright (C) 2006 Anthony Liguori <anthony@xxxxxxxxxxxxx>
@@ -483,7 +483,16 @@ Index: ioemu/vnc.c
  
      vga_hw_invalidate();
      vga_hw_update();
-@@ -1010,11 +1101,11 @@
+@@ -924,6 +1015,8 @@
+ {
+     char pad[3] = { 0, 0, 0 };
+ 
++    vga_hw_update();
++
+     vs->width = vs->ds->width;
+     vs->height = vs->ds->height;
+     vnc_write_u16(vs, vs->ds->width);
+@@ -1010,11 +1103,11 @@
        vnc_write(vs, "RFB 003.003\n", 12);
        vnc_flush(vs);
        vnc_read_when(vs, protocol_version, 12);
@@ -497,7 +506,7 @@ Index: ioemu/vnc.c
      }
  }
  
-@@ -1071,17 +1162,15 @@
+@@ -1071,17 +1164,15 @@
        exit(1);
      }
  
@@ -520,8 +529,8 @@ Index: ioemu/vnc.c
  }
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:00:48.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:26:24.000000000 +0100
+--- ioemu.orig/vl.h    2006-10-24 13:47:23.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:19:36.000000000 +0100
 @@ -319,6 +319,7 @@
  int is_graphic_console(void);
  CharDriverState *text_console_init(DisplayState *ds);
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-start-vncviewer
--- a/tools/ioemu/patches/vnc-start-vncviewer   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/vnc-start-vncviewer   Tue Oct 24 11:21:48 2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vnc.c
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:26:38.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:29:58.000000000 +0100
-@@ -1174,3 +1174,25 @@
+--- ioemu.orig/vnc.c   2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:33:46.000000000 +0100
+@@ -1187,3 +1187,25 @@
  
      vnc_dpy_resize(vs->ds, 640, 400);
  }
@@ -30,8 +30,8 @@ Index: ioemu/vnc.c
 +}
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:26:24.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:29:50.000000000 +0100
+--- ioemu.orig/vl.c    2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:46.000000000 +0100
 @@ -120,6 +120,7 @@
  int bios_size;
  static DisplayState display_state;
@@ -93,8 +93,8 @@ Index: ioemu/vl.c
          sdl_display_init(ds, full_screen);
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:26:24.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:29:50.000000000 +0100
+--- ioemu.orig/vl.h    2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:46.000000000 +0100
 @@ -786,6 +786,7 @@
  
  /* vnc.c */
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-title-domain-name
--- a/tools/ioemu/patches/vnc-title-domain-name Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/vnc-title-domain-name Tue Oct 24 11:21:48 2006 -0600
@@ -1,16 +1,16 @@ Index: ioemu/vnc.c
 Index: ioemu/vnc.c
 ===================================================================
---- ioemu.orig/vnc.c   2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vnc.c        2006-09-21 19:33:31.000000000 +0100
-@@ -1013,6 +1013,7 @@
+--- ioemu.orig/vnc.c   2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:33:46.000000000 +0100
+@@ -1024,6 +1024,7 @@
  
  static int protocol_client_init(VncState *vs, char *data, size_t len)
  {
 +    size_t l;
      char pad[3] = { 0, 0, 0 };
  
-     vs->width = vs->ds->width;
-@@ -1058,8 +1059,10 @@
+     vga_hw_update();
+@@ -1071,8 +1072,10 @@
        
      vnc_write(vs, pad, 3);           /* padding */
  
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/xen-build
--- a/tools/ioemu/patches/xen-build     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/xen-build     Tue Oct 24 11:21:48 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/Makefile
 Index: ioemu/Makefile
 ===================================================================
---- ioemu.orig/Makefile        2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/Makefile     2006-08-28 20:20:08.000000000 +0100
+--- ioemu.orig/Makefile        2006-10-24 14:37:25.000000000 +0100
++++ ioemu/Makefile     2006-10-24 14:37:28.000000000 +0100
 @@ -1,11 +1,14 @@
  # Makefile for QEMU.
  
@@ -85,8 +85,8 @@ Index: ioemu/Makefile
  info: qemu-doc.info qemu-tech.info
 Index: ioemu/Makefile.target
 ===================================================================
---- ioemu.orig/Makefile.target 2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/Makefile.target      2006-08-28 20:19:47.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:37:25.000000000 +0100
++++ ioemu/Makefile.target      2006-10-24 14:40:25.000000000 +0100
 @@ -1,5 +1,8 @@
  include config.mak
  
@@ -112,7 +112,7 @@ Index: ioemu/Makefile.target
  endif
 -CFLAGS=-Wall -O2 -g -fno-strict-aliasing
 +CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
-+SSE2 := $(call test-gcc-flag,$(CC),-msse2)
++SSE2 := $(call cc-option,$(CC),-msse2,)
 +ifeq ($(SSE2),-msse2)
 +CFLAGS += -DUSE_SSE2=1 -msse2
 +endif
@@ -149,17 +149,18 @@ Index: ioemu/Makefile.target
  install: all 
 +      mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(configdir)"
  ifneq ($(PROGS),)
-       $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
- endif
-+      install -m 755 $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
-+      install -m 755 $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
+-      $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++      $(INSTALL_PROG) $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
++      $(INSTALL_PROG) $(TARGET_PATH)/qemu-dm.debug "$(DESTDIR)$(bindir)"
++      $(INSTALL_PROG) $(TARGET_PATH)/qemu-ifup "$(DESTDIR)$(configdir)"
  
  ifneq ($(wildcard .depend),)
  include .depend
 Index: ioemu/configure
 ===================================================================
---- ioemu.orig/configure       2006-08-28 20:19:23.000000000 +0100
-+++ ioemu/configure    2006-08-28 20:19:47.000000000 +0100
+--- ioemu.orig/configure       2006-10-24 14:37:25.000000000 +0100
++++ ioemu/configure    2006-10-24 14:40:20.000000000 +0100
 @@ -18,8 +18,8 @@
  
  # default parameters
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/xen-platform-device
--- a/tools/ioemu/patches/xen-platform-device   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/ioemu/patches/xen-platform-device   Tue Oct 24 11:21:48 2006 -0600
@@ -3,8 +3,8 @@ will come later.
 
 Index: ioemu/Makefile.target
 ===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/Makefile.target      2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:41:01.000000000 +0100
++++ ioemu/Makefile.target      2006-10-24 14:41:01.000000000 +0100
 @@ -359,6 +359,7 @@
  VL_OBJS+= usb-uhci.o
  VL_OBJS+= piix4acpi.o
@@ -15,8 +15,8 @@ Index: ioemu/Makefile.target
  ifeq ($(TARGET_BASE_ARCH), ppc)
 Index: ioemu/hw/pc.c
 ===================================================================
---- ioemu.orig/hw/pc.c 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/hw/pc.c      2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/hw/pc.c 2006-10-24 14:41:00.000000000 +0100
++++ ioemu/hw/pc.c      2006-10-24 14:41:01.000000000 +0100
 @@ -823,6 +823,9 @@
      }
  #endif /* !CONFIG_DM */
@@ -30,8 +30,8 @@ Index: ioemu/hw/xen_platform.c
 Index: ioemu/hw/xen_platform.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/hw/xen_platform.c    2006-09-21 19:33:32.000000000 +0100
-@@ -0,0 +1,138 @@
++++ ioemu/hw/xen_platform.c    2006-10-24 14:41:04.000000000 +0100
+@@ -0,0 +1,144 @@
 +/*
 + * XEN platform fake pci device, formerly known as the event channel device
 + * 
@@ -131,7 +131,8 @@ Index: ioemu/hw/xen_platform.c
 +    uint8_t  bist; /* Built in self test */
 +    uint32_t base_address_regs[6];
 +    uint32_t reserved1;
-+    uint32_t reserved2;
++    uint16_t subsystem_vendor_id;
++    uint16_t subsystem_id;
 +    uint32_t rom_addr;
 +    uint32_t reserved3;
 +    uint32_t reserved4;
@@ -160,6 +161,11 @@ Index: ioemu/hw/xen_platform.c
 +    pch->header_type = 0;
 +    pch->interrupt_pin = 1;
 +
++    /* Microsoft WHQL requires non-zero subsystem IDs. */
++    /* http://www.pcisig.com/reflector/msg02205.html.  */
++    pch->subsystem_vendor_id = pch->vendor_id; /* Duplicate vendor id.  */
++    pch->subsystem_id        = 0x0001;         /* Hardcode sub-id as 1. */
++
 +    pci_register_io_region(d, 0, 0x100, PCI_ADDRESS_SPACE_IO,
 +                           platform_ioport_map);
 +
@@ -172,9 +178,9 @@ Index: ioemu/hw/xen_platform.c
 +}
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -1210,6 +1210,9 @@
+--- ioemu.orig/vl.h    2006-10-24 14:41:01.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:41:01.000000000 +0100
+@@ -1212,6 +1212,9 @@
  void xenstore_check_new_media_present(int timeout);
  void xenstore_write_vncport(int vnc_display);
  
diff -r aa8ca06d209e -r d246b79986d1 
tools/ioemu/patches/xen-support-buffered-ioreqs
--- a/tools/ioemu/patches/xen-support-buffered-ioreqs   Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/ioemu/patches/xen-support-buffered-ioreqs   Tue Oct 24 11:21:48 
2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vl.c
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:32.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -5844,6 +5844,7 @@
+--- ioemu.orig/vl.c    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -5854,6 +5854,7 @@
      unsigned long nr_pages, tmp_nr_pages, shared_page_nr;
      xen_pfn_t *page_array;
      extern void *shared_page;
@@ -10,7 +10,7 @@ Index: ioemu/vl.c
  
      char qemu_dm_logfilename[64];
  
-@@ -6425,6 +6426,18 @@
+@@ -6440,6 +6441,18 @@
      fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n",
              shared_page_nr, (uint64_t)(page_array[shared_page_nr]));
  
@@ -31,8 +31,8 @@ Index: ioemu/vl.c
  #elif defined(__ia64__)
 Index: ioemu/target-i386-dm/helper2.c
 ===================================================================
---- ioemu.orig/target-i386-dm/helper2.c        2006-09-21 19:33:30.000000000 
+0100
-+++ ioemu/target-i386-dm/helper2.c     2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/target-i386-dm/helper2.c        2006-10-24 14:33:45.000000000 
+0100
++++ ioemu/target-i386-dm/helper2.c     2006-10-24 14:33:47.000000000 +0100
 @@ -76,6 +76,10 @@
  
  shared_iopage_t *shared_page = NULL;
diff -r aa8ca06d209e -r d246b79986d1 
tools/ioemu/patches/xenstore-block-device-config
--- a/tools/ioemu/patches/xenstore-block-device-config  Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/ioemu/patches/xenstore-block-device-config  Tue Oct 24 11:21:48 
2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/Makefile.target
 Index: ioemu/Makefile.target
 ===================================================================
---- ioemu.orig/Makefile.target 2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/Makefile.target      2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/Makefile.target 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/Makefile.target      2006-10-24 14:33:28.000000000 +0100
 @@ -358,6 +358,7 @@
  VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
  VL_OBJS+= usb-uhci.o
@@ -13,7 +13,7 @@ Index: ioemu/xenstore.c
 Index: ioemu/xenstore.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/xenstore.c   2006-09-21 19:33:31.000000000 +0100
++++ ioemu/xenstore.c   2006-10-24 14:33:28.000000000 +0100
 @@ -0,0 +1,187 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General
@@ -204,9 +204,9 @@ Index: ioemu/xenstore.c
 +}
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:31.000000000 +0100
-@@ -5249,9 +5249,11 @@
+--- ioemu.orig/vl.c    2006-10-24 14:33:24.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:28.000000000 +0100
+@@ -5256,9 +5256,11 @@
             "Standard options:\n"
             "-M machine      select emulated machine (-M ? for list)\n"
             "-fda/-fdb file  use 'file' as floppy disk 0/1 image\n"
@@ -218,7 +218,7 @@ Index: ioemu/vl.c
             "-boot [a|c|d]   boot on floppy (a), hard disk (c) or CD-ROM (d)\n"
           "-snapshot       write to temporary files instead of disk image 
files\n"
  #ifdef TARGET_I386
-@@ -5378,11 +5380,13 @@
+@@ -5386,11 +5388,13 @@
      QEMU_OPTION_M,
      QEMU_OPTION_fda,
      QEMU_OPTION_fdb,
@@ -232,7 +232,7 @@ Index: ioemu/vl.c
      QEMU_OPTION_boot,
      QEMU_OPTION_snapshot,
  #ifdef TARGET_I386
-@@ -5454,11 +5458,13 @@
+@@ -5463,11 +5467,13 @@
      { "M", HAS_ARG, QEMU_OPTION_M },
      { "fda", HAS_ARG, QEMU_OPTION_fda },
      { "fdb", HAS_ARG, QEMU_OPTION_fdb },
@@ -246,7 +246,7 @@ Index: ioemu/vl.c
      { "boot", HAS_ARG, QEMU_OPTION_boot },
      { "snapshot", 0, QEMU_OPTION_snapshot },
  #ifdef TARGET_I386
-@@ -5807,10 +5813,16 @@
+@@ -5817,10 +5823,16 @@
  #ifdef CONFIG_GDBSTUB
      int use_gdbstub, gdbstub_port;
  #endif
@@ -265,7 +265,7 @@ Index: ioemu/vl.c
      const char *kernel_filename, *kernel_cmdline;
      DisplayState *ds = &display_state;
      int cyls, heads, secs, translation;
-@@ -5871,8 +5883,10 @@
+@@ -5881,8 +5893,10 @@
      initrd_filename = NULL;
      for(i = 0; i < MAX_FD; i++)
          fd_filename[i] = NULL;
@@ -276,7 +276,7 @@ Index: ioemu/vl.c
      ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
      vga_ram_size = VGA_RAM_SIZE;
      bios_size = BIOS_SIZE;
-@@ -5886,11 +5900,13 @@
+@@ -5896,11 +5910,13 @@
      vncunused = 0;
      kernel_filename = NULL;
      kernel_cmdline = "";
@@ -290,7 +290,7 @@ Index: ioemu/vl.c
      cyls = heads = secs = 0;
      translation = BIOS_ATA_TRANSLATION_AUTO;
      pstrcpy(monitor_device, sizeof(monitor_device), "vc");
-@@ -5923,7 +5939,11 @@
+@@ -5935,7 +5951,11 @@
              break;
          r = argv[optind];
          if (r[0] != '-') {
@@ -302,7 +302,7 @@ Index: ioemu/vl.c
          } else {
              const QEMUOption *popt;
  
-@@ -5967,6 +5987,7 @@
+@@ -5979,6 +5999,7 @@
              case QEMU_OPTION_initrd:
                  initrd_filename = optarg;
                  break;
@@ -310,7 +310,7 @@ Index: ioemu/vl.c
              case QEMU_OPTION_hda:
              case QEMU_OPTION_hdb:
              case QEMU_OPTION_hdc:
-@@ -5979,6 +6000,7 @@
+@@ -5991,6 +6012,7 @@
                          cdrom_index = -1;
                  }
                  break;
@@ -318,7 +318,7 @@ Index: ioemu/vl.c
              case QEMU_OPTION_snapshot:
                  snapshot = 1;
                  break;
-@@ -6031,11 +6053,13 @@
+@@ -6043,11 +6065,13 @@
              case QEMU_OPTION_append:
                  kernel_cmdline = optarg;
                  break;
@@ -332,7 +332,7 @@ Index: ioemu/vl.c
              case QEMU_OPTION_boot:
                  boot_device = optarg[0];
                  if (boot_device != 'a' && 
-@@ -6290,12 +6314,18 @@
+@@ -6305,12 +6329,18 @@
          }
      }
  
@@ -351,7 +351,7 @@ Index: ioemu/vl.c
      if (!linux_boot && 
          hd_filename[0] == '\0' && 
          (cdrom_index >= 0 && hd_filename[cdrom_index] == '\0') &&
-@@ -6309,6 +6339,7 @@
+@@ -6324,6 +6354,7 @@
          else
              boot_device = 'd';
      }
@@ -359,7 +359,7 @@ Index: ioemu/vl.c
  
      setvbuf(stdout, NULL, _IOLBF, 0);
      
-@@ -6441,6 +6472,7 @@
+@@ -6456,6 +6487,7 @@
  
  #endif /* !CONFIG_DM */
  
@@ -367,7 +367,7 @@ Index: ioemu/vl.c
      /* we always create the cdrom drive, even if no disk is there */
      bdrv_init();
      if (cdrom_index >= 0) {
-@@ -6467,6 +6499,7 @@
+@@ -6482,6 +6514,7 @@
              }
          }
      }
@@ -375,7 +375,7 @@ Index: ioemu/vl.c
  
      /* we always create at least one floppy disk */
      fd_table[0] = bdrv_new("fda");
-@@ -6545,6 +6578,8 @@
+@@ -6560,6 +6593,8 @@
          }
      }
  
@@ -386,8 +386,8 @@ Index: ioemu/vl.c
                    kernel_filename, kernel_cmdline, initrd_filename,
 Index: ioemu/monitor.c
 ===================================================================
---- ioemu.orig/monitor.c       2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/monitor.c    2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/monitor.c       2006-10-24 14:31:36.000000000 +0100
++++ ioemu/monitor.c    2006-10-24 14:33:28.000000000 +0100
 @@ -24,6 +24,7 @@
  #include "vl.h"
  #include "disas.h"
@@ -416,8 +416,8 @@ Index: ioemu/monitor.c
      int i;
 Index: ioemu/block.c
 ===================================================================
---- ioemu.orig/block.c 2006-09-21 19:33:25.000000000 +0100
-+++ ioemu/block.c      2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/block.c 2006-10-24 14:31:36.000000000 +0100
++++ ioemu/block.c      2006-10-24 14:33:28.000000000 +0100
 @@ -758,6 +758,7 @@
  static void raw_close(BlockDriverState *bs)
  {
@@ -428,9 +428,9 @@ Index: ioemu/block.c
  
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:31.000000000 +0100
-@@ -1189,6 +1189,8 @@
+--- ioemu.orig/vl.h    2006-10-24 14:33:24.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:28.000000000 +0100
+@@ -1191,6 +1191,8 @@
  void term_print_help(void);
  void monitor_readline(const char *prompt, int is_password,
                        char *buf, int buf_size);
@@ -439,7 +439,7 @@ Index: ioemu/vl.h
  
  /* readline.c */
  typedef void ReadLineFunc(void *opaque, const char *str);
-@@ -1201,6 +1203,13 @@
+@@ -1203,6 +1205,13 @@
  void readline_start(const char *prompt, int is_password,
                      ReadLineFunc *readline_func, void *opaque);
  
@@ -455,8 +455,8 @@ Index: ioemu/vl.h
  extern char domain_name[];
 Index: ioemu/hw/ide.c
 ===================================================================
---- ioemu.orig/hw/ide.c        2006-09-21 19:33:30.000000000 +0100
-+++ ioemu/hw/ide.c     2006-09-21 19:33:31.000000000 +0100
+--- ioemu.orig/hw/ide.c        2006-10-24 14:31:36.000000000 +0100
++++ ioemu/hw/ide.c     2006-10-24 14:33:28.000000000 +0100
 @@ -1158,6 +1158,7 @@
          } else {
              ide_atapi_cmd_error(s, SENSE_NOT_READY, 
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/xenstore-write-vnc-port
--- a/tools/ioemu/patches/xenstore-write-vnc-port       Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/ioemu/patches/xenstore-write-vnc-port       Tue Oct 24 11:21:48 
2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/xenstore.c
 Index: ioemu/xenstore.c
 ===================================================================
---- ioemu.orig/xenstore.c      2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/xenstore.c   2006-09-21 19:33:32.000000000 +0100
+--- ioemu.orig/xenstore.c      2006-10-24 14:33:47.000000000 +0100
++++ ioemu/xenstore.c   2006-10-24 14:33:47.000000000 +0100
 @@ -185,3 +185,31 @@
      free(image);
      free(vec);
@@ -36,10 +36,10 @@ Index: ioemu/xenstore.c
 +}
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.c 2006-09-21 19:33:32.000000000 +0100
-@@ -6535,6 +6535,7 @@
-       vnc_display = vnc_display_init(ds, vnc_display, vncunused);
+--- ioemu.orig/vl.c    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:33:47.000000000 +0100
+@@ -6550,6 +6550,7 @@
+       vnc_display = vnc_display_init(ds, vnc_display, vncunused, 
&vnclisten_addr);
        if (vncviewer)
            vnc_start_viewer(vnc_display);
 +      xenstore_write_vncport(vnc_display);
@@ -48,9 +48,9 @@ Index: ioemu/vl.c
          sdl_display_init(ds, full_screen);
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-09-21 19:33:31.000000000 +0100
-+++ ioemu/vl.h 2006-09-21 19:33:32.000000000 +0100
-@@ -1208,6 +1208,7 @@
+--- ioemu.orig/vl.h    2006-10-24 14:33:47.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:33:47.000000000 +0100
+@@ -1210,6 +1210,7 @@
  int xenstore_fd(void);
  void xenstore_process_event(void *opaque);
  void xenstore_check_new_media_present(int timeout);
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_acm.c
--- a/tools/libxc/xc_acm.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_acm.c      Tue Oct 24 11:21:48 2006 -0600
@@ -24,12 +24,12 @@ int xc_acm_op(int xc_handle, int cmd, vo
     hypercall.arg[0] = cmd;
     hypercall.arg[1] = (unsigned long) arg;
 
-    if (mlock(arg, arg_size) != 0) {
-        PERROR("xc_acm_op: arg mlock failed");
+    if (lock_pages(arg, arg_size) != 0) {
+        PERROR("xc_acm_op: arg lock failed");
         goto out;
     }
     ret = do_xen_hypercall(xc_handle, &hypercall);
-    safe_munlock(arg, arg_size);
+    unlock_pages(arg, arg_size);
  out:
     return ret;
 }
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_domain.c   Tue Oct 24 11:21:48 2006 -0600
@@ -72,7 +72,7 @@ int xc_domain_shutdown(int xc_handle,
     arg.domain_id = domid;
     arg.reason = reason;
 
-    if ( mlock(&arg, sizeof(arg)) != 0 )
+    if ( lock_pages(&arg, sizeof(arg)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out1;
@@ -80,7 +80,7 @@ int xc_domain_shutdown(int xc_handle,
 
     ret = do_xen_hypercall(xc_handle, &hypercall);
 
-    safe_munlock(&arg, sizeof(arg));
+    unlock_pages(&arg, sizeof(arg));
 
  out1:
     return ret;
@@ -103,7 +103,7 @@ int xc_vcpu_setaffinity(int xc_handle,
                          (uint8_t *)&cpumap);
     domctl.u.vcpuaffinity.cpumap.nr_cpus = sizeof(cpumap) * 8;
     
-    if ( mlock(&cpumap, sizeof(cpumap)) != 0 )
+    if ( lock_pages(&cpumap, sizeof(cpumap)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out;
@@ -111,7 +111,7 @@ int xc_vcpu_setaffinity(int xc_handle,
 
     ret = do_domctl(xc_handle, &domctl);
 
-    safe_munlock(&cpumap, sizeof(cpumap));
+    unlock_pages(&cpumap, sizeof(cpumap));
 
  out:
     return ret;
@@ -134,7 +134,7 @@ int xc_vcpu_getaffinity(int xc_handle,
                          (uint8_t *)cpumap);
     domctl.u.vcpuaffinity.cpumap.nr_cpus = sizeof(*cpumap) * 8;
     
-    if ( mlock(cpumap, sizeof(*cpumap)) != 0 )
+    if ( lock_pages(cpumap, sizeof(*cpumap)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out;
@@ -142,7 +142,7 @@ int xc_vcpu_getaffinity(int xc_handle,
 
     ret = do_domctl(xc_handle, &domctl);
 
-    safe_munlock(cpumap, sizeof(*cpumap));
+    unlock_pages(cpumap, sizeof(*cpumap));
 
  out:
     return ret;
@@ -213,7 +213,7 @@ int xc_domain_getinfolist(int xc_handle,
     int ret = 0;
     DECLARE_SYSCTL;
 
-    if ( mlock(info, max_domains*sizeof(xc_domaininfo_t)) != 0 )
+    if ( lock_pages(info, max_domains*sizeof(xc_domaininfo_t)) != 0 )
         return -1;
 
     sysctl.cmd = XEN_SYSCTL_getdomaininfolist;
@@ -226,8 +226,7 @@ int xc_domain_getinfolist(int xc_handle,
     else
         ret = sysctl.u.getdomaininfolist.num_domains;
 
-    if ( munlock(info, max_domains*sizeof(xc_domaininfo_t)) != 0 )
-        ret = -1;
+    unlock_pages(info, max_domains*sizeof(xc_domaininfo_t));
 
     return ret;
 }
@@ -245,12 +244,12 @@ int xc_vcpu_getcontext(int xc_handle,
     domctl.u.vcpucontext.vcpu   = (uint16_t)vcpu;
     set_xen_guest_handle(domctl.u.vcpucontext.ctxt, ctxt);
 
-    if ( (rc = mlock(ctxt, sizeof(*ctxt))) != 0 )
+    if ( (rc = lock_pages(ctxt, sizeof(*ctxt))) != 0 )
         return rc;
 
     rc = do_domctl(xc_handle, &domctl);
 
-    safe_munlock(ctxt, sizeof(*ctxt));
+    unlock_pages(ctxt, sizeof(*ctxt));
 
     return rc;
 }
@@ -512,12 +511,12 @@ int xc_vcpu_setcontext(int xc_handle,
     domctl.u.vcpucontext.vcpu = vcpu;
     set_xen_guest_handle(domctl.u.vcpucontext.ctxt, ctxt);
 
-    if ( (rc = mlock(ctxt, sizeof(*ctxt))) != 0 )
+    if ( (rc = lock_pages(ctxt, sizeof(*ctxt))) != 0 )
         return rc;
 
     rc = do_domctl(xc_handle, &domctl);
 
-    safe_munlock(ctxt, sizeof(*ctxt));
+    unlock_pages(ctxt, sizeof(*ctxt));
 
     return rc;
 
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_evtchn.c
--- a/tools/libxc/xc_evtchn.c   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_evtchn.c   Tue Oct 24 11:21:48 2006 -0600
@@ -18,16 +18,16 @@ static int do_evtchn_op(int xc_handle, i
     hypercall.arg[0] = cmd;
     hypercall.arg[1] = (unsigned long)arg;
 
-    if ( mlock(arg, arg_size) != 0 )
+    if ( lock_pages(arg, arg_size) != 0 )
     {
-        PERROR("do_evtchn_op: arg mlock failed");
+        PERROR("do_evtchn_op: arg lock failed");
         goto out;
     }
 
     if ((ret = do_xen_hypercall(xc_handle, &hypercall)) < 0)
         ERROR("do_evtchn_op: HYPERVISOR_event_channel_op failed: %d", ret);
 
-    safe_munlock(arg, arg_size);
+    unlock_pages(arg, arg_size);
  out:
     return ret;
 }
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_hvm_build.c        Tue Oct 24 11:21:48 2006 -0600
@@ -38,13 +38,13 @@ static void xc_set_hvm_param(int handle,
     arg.domid = dom;
     arg.index = param;
     arg.value = value;
-    if ( mlock(&arg, sizeof(arg)) != 0 )
+    if ( lock_pages(&arg, sizeof(arg)) != 0 )
     {
         PERROR("Could not lock memory for set parameter");
         return;
     }
     rc = do_xen_hypercall(handle, &hypercall);
-    safe_munlock(&arg, sizeof(arg));
+    unlock_pages(&arg, sizeof(arg));
     if (rc < 0)
         PERROR("set HVM parameter failed (%d)", rc);
 }
@@ -403,7 +403,7 @@ static int xc_hvm_build_internal(int xc_
         goto error_out;
     }
 
-    if ( mlock(&st_ctxt, sizeof(st_ctxt) ) )
+    if ( lock_pages(&st_ctxt, sizeof(st_ctxt) ) )
     {
         PERROR("%s: ctxt mlock failed", __func__);
         return 1;
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_linux_build.c      Tue Oct 24 11:21:48 2006 -0600
@@ -1140,9 +1140,9 @@ static int xc_linux_build_internal(int x
     memset(&st_ctxt, 0, sizeof(st_ctxt));
 #endif
 
-    if ( mlock(&st_ctxt, sizeof(st_ctxt) ) )
-    {
-        PERROR("%s: ctxt mlock failed", __func__);
+    if ( lock_pages(&st_ctxt, sizeof(st_ctxt) ) )
+    {
+        PERROR("%s: ctxt lock failed", __func__);
         return 1;
     }
 
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_linux_restore.c    Tue Oct 24 11:21:48 2006 -0600
@@ -162,9 +162,9 @@ int xc_linux_restore(int xc_handle, int 
         return 1;
     }
 
-    if (mlock(&ctxt, sizeof(ctxt))) {
+    if (lock_pages(&ctxt, sizeof(ctxt))) {
         /* needed for build domctl, but might as well do early */
-        ERROR("Unable to mlock ctxt");
+        ERROR("Unable to lock ctxt");
         return 1;
     }
 
@@ -251,8 +251,8 @@ int xc_linux_restore(int xc_handle, int 
         goto out;
     }
 
-    if (mlock(region_mfn, sizeof(xen_pfn_t) * MAX_BATCH_SIZE)) {
-        ERROR("Could not mlock region_mfn");
+    if (lock_pages(region_mfn, sizeof(xen_pfn_t) * MAX_BATCH_SIZE)) {
+        ERROR("Could not lock region_mfn");
         goto out;
     }
 
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_linux_save.c       Tue Oct 24 11:21:48 2006 -0600
@@ -628,8 +628,8 @@ int xc_linux_save(int xc_handle, int io_
         return 1;
     }
 
-    if (mlock(&ctxt, sizeof(ctxt))) {
-        ERROR("Unable to mlock ctxt");
+    if (lock_pages(&ctxt, sizeof(ctxt))) {
+        ERROR("Unable to lock ctxt");
         return 1;
     }
 
@@ -767,14 +767,14 @@ int xc_linux_save(int xc_handle, int io_
 
     memset(to_send, 0xff, BITMAP_SIZE);
 
-    if (mlock(to_send, BITMAP_SIZE)) {
-        ERROR("Unable to mlock to_send");
+    if (lock_pages(to_send, BITMAP_SIZE)) {
+        ERROR("Unable to lock to_send");
         return 1;
     }
 
     /* (to fix is local only) */
-    if (mlock(to_skip, BITMAP_SIZE)) {
-        ERROR("Unable to mlock to_skip");
+    if (lock_pages(to_skip, BITMAP_SIZE)) {
+        ERROR("Unable to lock to_skip");
         return 1;
     }
 
@@ -790,8 +790,8 @@ int xc_linux_save(int xc_handle, int io_
         goto out;
     }
 
-    if (mlock(pfn_type, MAX_BATCH_SIZE * sizeof(*pfn_type))) {
-        ERROR("Unable to mlock");
+    if (lock_pages(pfn_type, MAX_BATCH_SIZE * sizeof(*pfn_type))) {
+        ERROR("Unable to lock");
         goto out;
     }
 
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_misc.c
--- a/tools/libxc/xc_misc.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_misc.c     Tue Oct 24 11:21:48 2006 -0600
@@ -21,13 +21,13 @@ int xc_readconsolering(int xc_handle,
     sysctl.u.readconsole.count  = nr_chars;
     sysctl.u.readconsole.clear  = clear;
 
-    if ( (ret = mlock(buffer, nr_chars)) != 0 )
+    if ( (ret = lock_pages(buffer, nr_chars)) != 0 )
         return ret;
 
     if ( (ret = do_sysctl(xc_handle, &sysctl)) == 0 )
         *pnr_chars = sysctl.u.readconsole.count;
 
-    safe_munlock(buffer, nr_chars);
+    unlock_pages(buffer, nr_chars);
 
     return ret;
 }
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_private.c
--- a/tools/libxc/xc_private.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_private.c  Tue Oct 24 11:21:48 2006 -0600
@@ -7,7 +7,23 @@
 #include <inttypes.h>
 #include "xc_private.h"
 
-/* NB: arr must be mlock'ed */
+int lock_pages(void *addr, size_t len)
+{
+      int e = 0;
+#ifndef __sun__
+      e = mlock(addr, len);
+#endif
+      return (e);
+}
+
+void unlock_pages(void *addr, size_t len)
+{
+#ifndef __sun__
+       safe_munlock(addr, len);
+#endif
+}
+
+/* NB: arr must be locked */
 int xc_get_pfn_type_batch(int xc_handle,
                           uint32_t dom, int num, unsigned long *arr)
 {
@@ -51,7 +67,7 @@ int xc_mmuext_op(
     hypercall.arg[2] = (unsigned long)0;
     hypercall.arg[3] = (unsigned long)dom;
 
-    if ( mlock(op, nr_ops*sizeof(*op)) != 0 )
+    if ( lock_pages(op, nr_ops*sizeof(*op)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out1;
@@ -59,7 +75,7 @@ int xc_mmuext_op(
 
     ret = do_xen_hypercall(xc_handle, &hypercall);
 
-    safe_munlock(op, nr_ops*sizeof(*op));
+    unlock_pages(op, nr_ops*sizeof(*op));
 
  out1:
     return ret;
@@ -79,9 +95,9 @@ static int flush_mmu_updates(int xc_hand
     hypercall.arg[2] = 0;
     hypercall.arg[3] = mmu->subject;
 
-    if ( mlock(mmu->updates, sizeof(mmu->updates)) != 0 )
-    {
-        PERROR("flush_mmu_updates: mmu updates mlock failed");
+    if ( lock_pages(mmu->updates, sizeof(mmu->updates)) != 0 )
+    {
+        PERROR("flush_mmu_updates: mmu updates lock_pages failed");
         err = 1;
         goto out;
     }
@@ -94,7 +110,7 @@ static int flush_mmu_updates(int xc_hand
 
     mmu->idx = 0;
 
-    safe_munlock(mmu->updates, sizeof(mmu->updates));
+    unlock_pages(mmu->updates, sizeof(mmu->updates));
 
  out:
     return err;
@@ -149,62 +165,62 @@ int xc_memory_op(int xc_handle,
     case XENMEM_increase_reservation:
     case XENMEM_decrease_reservation:
     case XENMEM_populate_physmap:
-        if ( mlock(reservation, sizeof(*reservation)) != 0 )
-        {
-            PERROR("Could not mlock");
+        if ( lock_pages(reservation, sizeof(*reservation)) != 0 )
+        {
+            PERROR("Could not lock");
             goto out1;
         }
         get_xen_guest_handle(extent_start, reservation->extent_start);
         if ( (extent_start != NULL) &&
-             (mlock(extent_start,
+             (lock_pages(extent_start,
                     reservation->nr_extents * sizeof(xen_pfn_t)) != 0) )
         {
-            PERROR("Could not mlock");
-            safe_munlock(reservation, sizeof(*reservation));
+            PERROR("Could not lock");
+            unlock_pages(reservation, sizeof(*reservation));
             goto out1;
         }
         break;
     case XENMEM_machphys_mfn_list:
-        if ( mlock(xmml, sizeof(*xmml)) != 0 )
-        {
-            PERROR("Could not mlock");
+        if ( lock_pages(xmml, sizeof(*xmml)) != 0 )
+        {
+            PERROR("Could not lock");
             goto out1;
         }
         get_xen_guest_handle(extent_start, xmml->extent_start);
-        if ( mlock(extent_start,
+        if ( lock_pages(extent_start,
                    xmml->max_extents * sizeof(xen_pfn_t)) != 0 )
         {
-            PERROR("Could not mlock");
-            safe_munlock(xmml, sizeof(*xmml));
+            PERROR("Could not lock");
+            unlock_pages(xmml, sizeof(*xmml));
             goto out1;
         }
         break;
     case XENMEM_add_to_physmap:
-        if ( mlock(arg, sizeof(struct xen_add_to_physmap)) )
-        {
-            PERROR("Could not mlock");
+        if ( lock_pages(arg, sizeof(struct xen_add_to_physmap)) )
+        {
+            PERROR("Could not lock");
             goto out1;
         }
         break;
     case XENMEM_translate_gpfn_list:
-        if ( mlock(trans, sizeof(*trans)) != 0 )
-        {
-            PERROR("Could not mlock");
+        if ( lock_pages(trans, sizeof(*trans)) != 0 )
+        {
+            PERROR("Could not lock");
             goto out1;
         }
         get_xen_guest_handle(gpfn_list, trans->gpfn_list);
-        if ( mlock(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t)) != 0 )
-        {
-            PERROR("Could not mlock");
-            safe_munlock(trans, sizeof(*trans));
+        if ( lock_pages(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t)) != 0 )
+        {
+            PERROR("Could not lock");
+            unlock_pages(trans, sizeof(*trans));
             goto out1;
         }
         get_xen_guest_handle(mfn_list, trans->mfn_list);
-        if ( mlock(mfn_list, trans->nr_gpfns * sizeof(xen_pfn_t)) != 0 )
-        {
-            PERROR("Could not mlock");
-            safe_munlock(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
-            safe_munlock(trans, sizeof(*trans));
+        if ( lock_pages(mfn_list, trans->nr_gpfns * sizeof(xen_pfn_t)) != 0 )
+        {
+            PERROR("Could not lock");
+            unlock_pages(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
+            unlock_pages(trans, sizeof(*trans));
             goto out1;
         }
         break;
@@ -217,27 +233,27 @@ int xc_memory_op(int xc_handle,
     case XENMEM_increase_reservation:
     case XENMEM_decrease_reservation:
     case XENMEM_populate_physmap:
-        safe_munlock(reservation, sizeof(*reservation));
+        unlock_pages(reservation, sizeof(*reservation));
         get_xen_guest_handle(extent_start, reservation->extent_start);
         if ( extent_start != NULL )
-            safe_munlock(extent_start,
+            unlock_pages(extent_start,
                          reservation->nr_extents * sizeof(xen_pfn_t));
         break;
     case XENMEM_machphys_mfn_list:
-        safe_munlock(xmml, sizeof(*xmml));
+        unlock_pages(xmml, sizeof(*xmml));
         get_xen_guest_handle(extent_start, xmml->extent_start);
-        safe_munlock(extent_start,
+        unlock_pages(extent_start,
                      xmml->max_extents * sizeof(xen_pfn_t));
         break;
     case XENMEM_add_to_physmap:
-        safe_munlock(arg, sizeof(struct xen_add_to_physmap));
+        unlock_pages(arg, sizeof(struct xen_add_to_physmap));
         break;
     case XENMEM_translate_gpfn_list:
             get_xen_guest_handle(mfn_list, trans->mfn_list);
-            safe_munlock(mfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
+            unlock_pages(mfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
             get_xen_guest_handle(gpfn_list, trans->gpfn_list);
-            safe_munlock(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
-            safe_munlock(trans, sizeof(*trans));
+            unlock_pages(gpfn_list, trans->nr_gpfns * sizeof(xen_pfn_t));
+            unlock_pages(trans, sizeof(*trans));
         break;
     }
 
@@ -279,15 +295,15 @@ int xc_get_pfn_list(int xc_handle,
     memset(pfn_buf, 0, max_pfns * sizeof(xen_pfn_t));
 #endif
 
-    if ( mlock(pfn_buf, max_pfns * sizeof(xen_pfn_t)) != 0 )
-    {
-        PERROR("xc_get_pfn_list: pfn_buf mlock failed");
+    if ( lock_pages(pfn_buf, max_pfns * sizeof(xen_pfn_t)) != 0 )
+    {
+        PERROR("xc_get_pfn_list: pfn_buf lock failed");
         return -1;
     }
 
     ret = do_domctl(xc_handle, &domctl);
 
-    safe_munlock(pfn_buf, max_pfns * sizeof(xen_pfn_t));
+    unlock_pages(pfn_buf, max_pfns * sizeof(xen_pfn_t));
 
 #if 0
 #ifdef DEBUG
@@ -419,7 +435,7 @@ int xc_version(int xc_handle, int cmd, v
         break;
     }
 
-    if ( (argsize != 0) && (mlock(arg, argsize) != 0) )
+    if ( (argsize != 0) && (lock_pages(arg, argsize) != 0) )
     {
         PERROR("Could not lock memory for version hypercall");
         return -ENOMEM;
@@ -433,7 +449,7 @@ int xc_version(int xc_handle, int cmd, v
     rc = do_xen_version(xc_handle, cmd, arg);
 
     if ( argsize != 0 )
-        safe_munlock(arg, argsize);
+        unlock_pages(arg, argsize);
 
     return rc;
 }
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_private.h
--- a/tools/libxc/xc_private.h  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_private.h  Tue Oct 24 11:21:48 2006 -0600
@@ -66,6 +66,9 @@ do {                                    
     errno = __saved_errno;                      \
 } while (0)
 
+int lock_pages(void *addr, size_t len);
+void unlock_pages(void *addr, size_t len);
+
 #define PERROR(_m, _a...)                               \
 do {                                                    \
     int __saved_errno = errno;                          \
@@ -104,7 +107,7 @@ static inline int do_domctl(int xc_handl
     hypercall.op     = __HYPERVISOR_domctl;
     hypercall.arg[0] = (unsigned long)domctl;
 
-    if ( mlock(domctl, sizeof(*domctl)) != 0 )
+    if ( lock_pages(domctl, sizeof(*domctl)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out1;
@@ -117,7 +120,7 @@ static inline int do_domctl(int xc_handl
                     " rebuild the user-space tool set?\n");
     }
 
-    safe_munlock(domctl, sizeof(*domctl));
+    unlock_pages(domctl, sizeof(*domctl));
 
  out1:
     return ret;
@@ -133,7 +136,7 @@ static inline int do_sysctl(int xc_handl
     hypercall.op     = __HYPERVISOR_sysctl;
     hypercall.arg[0] = (unsigned long)sysctl;
 
-    if ( mlock(sysctl, sizeof(*sysctl)) != 0 )
+    if ( lock_pages(sysctl, sizeof(*sysctl)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out1;
@@ -146,7 +149,7 @@ static inline int do_sysctl(int xc_handl
                     " rebuild the user-space tool set?\n");
     }
 
-    safe_munlock(sysctl, sizeof(*sysctl));
+    unlock_pages(sysctl, sizeof(*sysctl));
 
  out1:
     return ret;
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xc_tbuf.c
--- a/tools/libxc/xc_tbuf.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xc_tbuf.c     Tue Oct 24 11:21:48 2006 -0600
@@ -104,7 +104,7 @@ int xc_tbuf_set_cpu_mask(int xc_handle, 
     set_xen_guest_handle(sysctl.u.tbuf_op.cpu_mask.bitmap, (uint8_t *)&mask);
     sysctl.u.tbuf_op.cpu_mask.nr_cpus = sizeof(mask) * 8;
 
-    if ( mlock(&mask, sizeof(mask)) != 0 )
+    if ( lock_pages(&mask, sizeof(mask)) != 0 )
     {
         PERROR("Could not lock memory for Xen hypercall");
         goto out;
@@ -112,7 +112,7 @@ int xc_tbuf_set_cpu_mask(int xc_handle, 
 
     ret = do_sysctl(xc_handle, &sysctl);
 
-    safe_munlock(&mask, sizeof(mask));
+    unlock_pages(&mask, sizeof(mask));
 
  out:
     return ret;
diff -r aa8ca06d209e -r d246b79986d1 tools/libxc/xg_private.c
--- a/tools/libxc/xg_private.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/libxc/xg_private.c  Tue Oct 24 11:21:48 2006 -0600
@@ -10,6 +10,22 @@
 #include <strings.h>
 
 #include "xg_private.h"
+
+int lock_pages(void *addr, size_t len)
+{
+    int e = 0;
+#ifndef __sun__
+    e = mlock(addr, len);
+#endif
+    return (e);
+}
+
+void unlock_pages(void *addr, size_t len)
+{
+#ifndef __sun__
+    safe_munlock(addr, len);
+#endif
+}
 
 char *xc_read_image(const char *filename, unsigned long *size)
 {
diff -r aa8ca06d209e -r d246b79986d1 tools/misc/xenperf.c
--- a/tools/misc/xenperf.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/misc/xenperf.c      Tue Oct 24 11:21:48 2006 -0600
@@ -17,6 +17,22 @@
 #include <sys/mman.h>
 #include <errno.h>
 #include <string.h>
+
+int lock_pages(void *addr, size_t len)
+{
+    int e = 0;
+#ifndef __sun__
+    e = mlock(addr, len);
+#endif
+    return (e);
+}
+
+void unlock_pages(void *addr, size_t len)
+{
+#ifndef __sun__
+       munlock(addr, len);
+#endif
+}
 
 int main(int argc, char *argv[])
 {
@@ -87,11 +103,11 @@ int main(int argc, char *argv[])
        pcv = malloc(sizeof(*pcv) * num_val);
 
     if ( pcd == NULL
-                || mlock(pcd, sizeof(*pcd) * num_desc) != 0
+                || lock_pages(pcd, sizeof(*pcd) * num_desc) != 0
                 || pcv == NULL
-                || mlock(pcd, sizeof(*pcv) * num_val) != 0)
+                || lock_pages(pcd, sizeof(*pcv) * num_val) != 0)
     {
-        fprintf(stderr, "Could not alloc or mlock buffers: %d (%s)\n",
+        fprintf(stderr, "Could not alloc or lock buffers: %d (%s)\n",
                 errno, strerror(errno));
         exit(-1);
     }
@@ -104,8 +120,8 @@ int main(int argc, char *argv[])
         return 1;
     }
 
-    munlock(pcd, sizeof(*pcd) * num_desc);
-    munlock(pcv, sizeof(*pcv) * num_val);
+    unlock_pages(pcd, sizeof(*pcd) * num_desc);
+    unlock_pages(pcv, sizeof(*pcv) * num_val);
 
        val = pcv;
     for ( i = 0; i < num_desc; i++ )
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/lowlevel/acm/acm.c
--- a/tools/python/xen/lowlevel/acm/acm.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/lowlevel/acm/acm.c       Tue Oct 24 11:21:48 2006 -0600
@@ -147,9 +147,10 @@ static PyObject *getdecision(PyObject * 
 {
     char *arg1_name, *arg1, *arg2_name, *arg2, *decision = NULL;
     struct acm_getdecision getdecision;
-    int xc_handle;
-
-    if (!PyArg_ParseTuple(args, "ssss", &arg1_name, &arg1, &arg2_name, &arg2)) 
{
+    int xc_handle, rc;
+
+    if (!PyArg_ParseTuple(args, "ssss", &arg1_name,
+                          &arg1, &arg2_name, &arg2)) {
         return NULL;
     }
 
@@ -179,12 +180,16 @@ static PyObject *getdecision(PyObject * 
         getdecision.id2.ssidref = atol(arg2);
     }
 
-    if (xc_acm_op(xc_handle, ACMOP_getdecision, &getdecision, 
sizeof(getdecision)) < 0) {
+    rc = xc_acm_op(xc_handle, ACMOP_getdecision,
+                   &getdecision, sizeof(getdecision));
+
+    xc_interface_close(xc_handle);
+
+    if (rc < 0) {
         if (errno == EACCES)
             PERROR("ACM operation failed.");
-    }
-
-    xc_interface_close(xc_handle);
+        return NULL;
+    }
 
     if (getdecision.acm_decision == ACM_ACCESS_PERMITTED)
         decision = "PERMITTED";
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/util/security.py
--- a/tools/python/xen/util/security.py Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/util/security.py Tue Oct 24 11:21:48 2006 -0600
@@ -601,8 +601,15 @@ def unify_resname(resource):
     """Makes all resource locations absolute. In case of physical
     resources, '/dev/' is added to local file names"""
 
+    if not resource:
+        return resource
+
     # sanity check on resource name
-    (type, resfile) = resource.split(":")
+    try:
+        (type, resfile) = resource.split(":")
+    except:
+        err("Resource spec '%s' contains no ':' delimiter" % resource)
+
     if type == "phy":
         if not resfile.startswith("/"):
             resfile = "/dev/" + resfile
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/xend/XendDomain.py       Tue Oct 24 11:21:48 2006 -0600
@@ -227,6 +227,9 @@ class XendDomain:
         try:
             dominfo = XendDomainInfo.create(config)
             self._add_domain(dominfo)
+            self.domain_sched_credit_set(dominfo.getDomid(),
+                                         dominfo.getWeight(),
+                                         dominfo.getCap())
             return dominfo
         finally:
             self.domains_lock.release()
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/xend/XendDomainInfo.py   Tue Oct 24 11:21:48 2006 -0600
@@ -131,7 +131,8 @@ ROUNDTRIPPING_CONFIG_ENTRIES = [
     ('uuid',            str),
     ('vcpus',           int),
     ('vcpu_avail',      int),
-    ('cpu_weight',      float),
+    ('cpu_cap',         int),
+    ('cpu_weight',      int),
     ('memory',          int),
     ('shadow_memory',   int),
     ('maxmem',          int),
@@ -562,7 +563,8 @@ class XendDomainInfo:
             defaultInfo('features',     lambda: "")
             defaultInfo('cpu',          lambda: None)
             defaultInfo('cpus',         lambda: [])
-            defaultInfo('cpu_weight',   lambda: 1.0)
+            defaultInfo('cpu_cap',      lambda: 0)
+            defaultInfo('cpu_weight',   lambda: 256)
 
             # some domains don't have a config file (e.g. dom0 )
             # to set number of vcpus so we derive available cpus
@@ -825,6 +827,12 @@ class XendDomainInfo:
 
     def getResume(self):
         return "%s" % self.info['resume']
+
+    def getCap(self):
+        return self.info['cpu_cap']
+
+    def getWeight(self):
+        return self.info['cpu_weight']
 
     def endRestore(self):
         self.setResume(False)
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/xm/create.py     Tue Oct 24 11:21:48 2006 -0600
@@ -189,10 +189,14 @@ gopts.var('vcpus', val='VCPUS',
           fn=set_int, default=1,
           use="# of Virtual CPUS in domain.")
 
+gopts.var('cpu_cap', val='CAP',
+          fn=set_int, default=None,
+          use="""Set the maximum amount of cpu.
+          CAP is a percentage that fixes the maximum amount of cpu.""")
+
 gopts.var('cpu_weight', val='WEIGHT',
-          fn=set_float, default=None,
-          use="""Set the new domain's cpu weight.
-          WEIGHT is a float that controls the domain's share of the cpu.""")
+          fn=set_int, default=None,
+          use="""Set the cpu time ratio to be allocated to the domain.""")
 
 gopts.var('restart', val='onreboot|always|never',
           fn=set_value, default=None,
@@ -687,6 +691,8 @@ def make_config(vals):
         config.append(['cpu', vals.cpu])
     if vals.cpus is not None:
         config.append(['cpus', vals.cpus])
+    if vals.cpu_cap is not None:
+        config.append(['cpu_cap', vals.cpu_cap])
     if vals.cpu_weight is not None:
         config.append(['cpu_weight', vals.cpu_weight])
     if vals.blkif:
@@ -1143,6 +1149,8 @@ def config_security_check(config, verbos
         except security.ACMError:
             print "   %s: DENIED" % (resource)
             (res_label, res_policy) = security.get_res_label(resource)
+            if not res_label:
+                res_label = ""
             print "   --> res:"+res_label+" ("+res_policy+")"
             print "   --> dom:"+domain_label+" ("+domain_policy+")"
             answer = 0
@@ -1181,7 +1189,7 @@ def main(argv):
         PrettyPrint.prettyprint(config)
     else:
         if not create_security_check(config):
-            raise OptionError('Security Configuration prevents domain from 
starting')
+            raise security.ACMError('Security Configuration prevents domain 
from starting')
         else:
             dom = make_domain(opts, config)
             if opts.vals.console_autoconnect:
diff -r aa8ca06d209e -r d246b79986d1 tools/python/xen/xm/opts.py
--- a/tools/python/xen/xm/opts.py       Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/python/xen/xm/opts.py       Tue Oct 24 11:21:48 2006 -0600
@@ -488,6 +488,8 @@ class Opts:
                 p = os.path.join(x, self.vals.defconfig)
             else:
                 p = self.vals.defconfig
+            if not p.startswith('/'):
+                p = os.path.join(os.path.curdir, p)
             if os.path.exists(p):
                 self.info('Using config file "%s".' % p)
                 self.load(p, help)
@@ -518,6 +520,10 @@ class Opts:
         exec cmd in globs, locs
         try:
             execfile(defconfig, globs, locs)
+        except SyntaxError,e:
+                raise SyntaxError, \
+                "Errors were found at line %d while processing %s:\n\t%s"\
+                %(e.lineno,defconfig,e.text)
         except:
             if not help: raise
         if help:
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/README
--- a/tools/xm-test/README      Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/README      Tue Oct 24 11:21:48 2006 -0600
@@ -45,7 +45,7 @@ NB: If you have the initrd.img from anot
 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-X.Y.img file into ramdisk/ and then run:
+Simply copy the initrd-X.Y-ARCH.img file into ramdisk/ and then run:
 
    # make existing
 
@@ -53,7 +53,7 @@ Or, you can run:
    # INITRD="http://url.of.initrd.repo/"; make existing
 
 You do not need to include the name of the image itself in the url, 
-however, an initrd with the right name (initrd.X.Y.img) and version 
+however, an initrd with the right name (initrd.X.Y-ARCH.img) and version 
 number must exist at that location.  The script will determine which 
 version of the initrd it needs and try to download the right file from 
 that location.
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/configure.ac
--- a/tools/xm-test/configure.ac        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/configure.ac        Tue Oct 24 11:21:48 2006 -0600
@@ -1,8 +1,10 @@
 # xm-test configure.ac input script
 
 # Basic header information
-AC_INIT([xm-test], [0.8.0])
+AC_INIT([xm-test], [1.0.0])
 AM_INIT_AUTOMAKE([1.7 foreign])
+
+MK=''; AC_SUBST(MK)
 
 # Check for dependencies
 AC_PROG_CC
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestLib/Console.py
--- a/tools/xm-test/lib/XmTestLib/Console.py    Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/lib/XmTestLib/Console.py    Tue Oct 24 11:21:48 2006 -0600
@@ -31,6 +31,7 @@ import fcntl
 import fcntl
 import select
 
+import arch
 from Test import *
 
 TIMEDOUT = 1
@@ -120,6 +121,7 @@ class XmConsole:
     def __getprompt(self, fd):
         timeout = 0
         bytes = 0
+        buffer = ""
         while timeout < 180:
             # eat anything while total bytes less than limit else raise RUNAWAY
             while (not self.limit) or (bytes < self.limit):
@@ -130,6 +132,7 @@ class XmConsole:
                         if self.debugMe:
                             sys.stdout.write(foo)
                         bytes += 1
+                        buffer += foo
                     except Exception, exn:
                         raise ConsoleError(str(exn))
                 else:
@@ -137,6 +140,8 @@ class XmConsole:
             else:
                 raise ConsoleError("Console run-away (exceeded %i bytes)"
                                    % self.limit, RUNAWAY)
+            # Check to see if the buffer contains anything interetsing
+            arch.checkBuffer(buffer)
             # press enter
             os.write(self.consoleFd, "\n")
             # look for prompt
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestLib/XenDomain.py
--- a/tools/xm-test/lib/XmTestLib/XenDomain.py  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/lib/XmTestLib/XenDomain.py  Tue Oct 24 11:21:48 2006 -0600
@@ -20,34 +20,23 @@
 
 import sys
 import commands
-import os
 import re
 import time
 
 from Xm import *
+from arch import *
 from Test import *
 from config import *
 from Console import *
 from XenDevice import *
 from acm import *
 
-BLOCK_ROOT_DEV = "hda"
-
-def getDeviceModel():
-    """Get the path to the device model based on
-    the architecture reported in uname"""
-    arch = os.uname()[4]
-    if re.search("64", arch):
-        return "/usr/lib64/xen/bin/qemu-dm"
-    else:
-        return "/usr/lib/xen/bin/qemu-dm"
 
 def getDefaultKernel():
-    """Get the path to the default DomU kernel"""
-    dom0Ver = commands.getoutput("uname -r");
-    domUVer = dom0Ver.replace("xen0", "xenU");
-    
-    return "/boot/vmlinuz-" + domUVer;
+    return arch.getDefaultKernel()
+
+def getRdPath():
+    return arch.getRdPath()
 
 def getUniqueName():
     """Get a uniqueish name for use in a domain"""
@@ -56,43 +45,8 @@ def getUniqueName():
     test_name = re.sub("\.test", "", test_name)
     test_name = re.sub("[\/\.]", "", test_name)
     name = "%s-%i" % (test_name, unixtime)
-    
+
     return name
-
-def getRdPath():
-    rdpath = os.environ.get("RD_PATH")
-    if not rdpath:
-        rdpath = "../../ramdisk"
-    rdpath = os.path.abspath(rdpath)
-
-    return rdpath
-
-ParavirtDefaults = {"memory"       : 64,
-                    "vcpus"        : 1,
-                    "kernel"       : getDefaultKernel(),
-                    "root"         : "/dev/ram0",
-                    "ramdisk"      : getRdPath() + "/initrd.img"
-                    }
-HVMDefaults =      {"memory"       : 64,
-                    "vcpus"        : 1,
-                    "acpi"         : 0,
-                    "apic"         : 0,
-                    "disk"         : ["file:%s/disk.img,ioemu:%s,w!" %
-                                   (getRdPath(), BLOCK_ROOT_DEV)],
-                    "kernel"       : "/usr/lib/xen/boot/hvmloader",
-                    "builder"      : "hvm",
-                    "sdl"          : 0,
-                    "vnc"          : 0,
-                    "vncviewer"    : 0,
-                    "nographic"    : 1,
-                    "serial"       : "pty",
-                    "device_model" : getDeviceModel()
-                    }
-
-if ENABLE_HVM_SUPPORT:
-    configDefaults = HVMDefaults
-else:
-    configDefaults = ParavirtDefaults
 
 class XenConfig:
     """An object to help create a xen-compliant config file"""
@@ -145,8 +99,12 @@ class XenConfig:
 
     def setOpt(self, name, value):
         """Set an option in the config"""
-        if name in self.opts.keys() and isinstance(self.opts[name], list) and 
not isinstance(value, list):
+        if name in self.opts.keys() and isinstance(self.opts[name] ,
+                                        list) and not isinstance(value, list):
                 self.opts[name] = [value]
+        # "extra" is special so append to it.
+        elif name == "extra" and name in self.opts.keys():
+            self.opts[name] += " %s" % (value)
         else:
             self.opts[name] = value
 
@@ -182,7 +140,7 @@ class DomainError(Exception):
             self.errorcode = int(errorcode)
         except Exception, e:
             self.errorcode = -1
-            
+
     def __str__(self):
         return str(self.msg)
 
@@ -204,7 +162,7 @@ class XenDomain:
         self.devices = {}
         self.netEnv = "bridge"
 
-        # Set domain type, either PV for ParaVirt domU or HVM for 
+        # Set domain type, either PV for ParaVirt domU or HVM for
         # FullVirt domain
         if ENABLE_HVM_SUPPORT:
             self.type = "HVM"
@@ -337,7 +295,8 @@ class XenDomain:
 
 class XmTestDomain(XenDomain):
 
-    def __init__(self, name=None, extraConfig=None, baseConfig=configDefaults):
+    def __init__(self, name=None, extraConfig=None,
+                 baseConfig=arch.configDefaults):
         """Create a new xm-test domain
         @param name: The requested domain name
         @param extraConfig: Additional configuration options
@@ -356,11 +315,12 @@ class XmTestDomain(XenDomain):
         XenDomain.__init__(self, config.getOpt("name"), config=config)
 
     def minSafeMem(self):
-        return 32
+        return arch.minSafeMem
 
 class XmTestNetDomain(XmTestDomain):
 
-    def __init__(self, name=None, extraConfig=None, baseConfig=configDefaults):
+    def __init__(self, name=None, extraConfig=None,
+                 baseConfig=arch.configDefaults):
         """Create a new xm-test domain with one network device
         @param name: The requested domain name
         @param extraConfig: Additional configuration options
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestLib/acm.py
--- a/tools/xm-test/lib/XmTestLib/acm.py        Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/lib/XmTestLib/acm.py        Tue Oct 24 11:21:48 2006 -0600
@@ -26,7 +26,7 @@ except:
     ACM_LABEL_RESOURCES = False
 
 labeled_resources = {}
-acm_verbose = True
+acm_verbose = False
 
 def isACMEnabled():
     return security.on()
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestReport/OSReport.py
--- a/tools/xm-test/lib/XmTestReport/OSReport.py        Tue Oct 24 10:08:30 
2006 -0600
+++ b/tools/xm-test/lib/XmTestReport/OSReport.py        Tue Oct 24 11:21:48 
2006 -0600
@@ -29,6 +29,7 @@ import os
 import os
 import commands
 import sys
+import arch
 
 class Machine:
 
@@ -89,8 +90,6 @@ class Machine:
         self.values = {}
         self.errors = 0
 
-        cpuValues = {"model_name"       : "Unknown",
-                     "flags"            : "Unknown"}
         xenValues = {"nr_cpus"          : "Unknown",
                      "nr_nodes"         : "Unknown",
                      "sockets_per_node" : "Unknown",
@@ -100,12 +99,7 @@ class Machine:
                      "total_memory"     : "Unknown"}
 
         xen = self.__getXenInfo(xenValues)
-        cpu = self.__getCpuInfo(cpuValues)
-
-        if cpu["model_name"] == "Unknown":   
-            cpuValues={"arch"  : "Unknown",
-                       "features": "Unknown"}
-            cpu=self.__getCpuInfo(cpuValues)
+        cpu = self.__getCpuInfo(arch.cpuValues)
 
         for k in xen.keys():
             self.values[k] = xen[k]
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/ramdisk/Makefile.am
--- a/tools/xm-test/ramdisk/Makefile.am Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/ramdisk/Makefile.am Tue Oct 24 11:21:48 2006 -0600
@@ -1,19 +1,39 @@ INITRD ?= http://xm-test.xensource.com/r
+#
+# make existing:
+#
+#   Download a pre-built ramdisk.
+#     INITRD = <Directory to download ramdisk from>
+#
+# make initrd:
+#
+#   Make a ramdisk from scratch.
+#     BR_URL = <The URL of the Buildroot source code>
+#     BR_SNAPSHOT = 1  Set BR_URL to the upstream Buildroot daily snapshot.
+#     BR_ARCH = <The build architecture for the initrd>
+#
+
 INITRD ?= http://xm-test.xensource.com/ramdisks
 
+BR_ARCH ?= $(shell uname -m | sed -e s/i.86/i386/ -e 's/ppc\(64\)*/powerpc/')
+
+@MK@ifdef BR_SNAPSHOT
+  BR_URL = 
http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
+@MK@else
+  BR_URL ?= http://xm-test.xensource.com/ramdisks/buildroot-20061023.tar.bz2
+@MK@endif
+BR_TAR = $(notdir $(BR_URL))
+
+BR_SRC = buildroot
+BR_IMG = $(BR_SRC)/rootfs.$(BR_ARCH).ext2
+
+BR_ROOT = build_$(BR_ARCH)/root
+
 EXTRA_DIST = skel configs patches
-
-BR_TAR = buildroot-20060606.tar.bz2
-BR_URL = http://buildroot.uclibc.org/downloads/snapshots/$(BR_TAR)
-#BR_URL = 
http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
-BR_SRC = buildroot
-BR_IMG = $(BR_SRC)/rootfs.i386.ext2
-
-BR_ROOT = build_i386/root
 
 HVM_SCRIPT = bin/create_disk_image
 
 XMTEST_MAJ_VER = $(shell echo @PACKAGE_VERSION@ | perl -pe 
's/(\d+)\.(\d+)\.\d+/\1.\2/')
-XMTEST_VER_IMG = initrd-$(XMTEST_MAJ_VER).img
+XMTEST_VER_IMG = initrd-$(XMTEST_MAJ_VER)-$(BR_ARCH).img
 
 EXTRA_ROOT_DIRS = sys
 
@@ -30,7 +50,7 @@ endif
        tar xjf $(BR_TAR)
 
 $(BR_IMG): $(BR_SRC)
-       cp configs/buildroot $(BR_SRC)/.config
+       cp configs/buildroot-$(BR_ARCH) $(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 \
@@ -42,7 +62,7 @@ endif
        (cd skel; mkdir -p $(EXTRA_ROOT_DIRS); tar cf - .) \
                | (cd $(BR_SRC)/$(BR_ROOT); tar xvf -)
        cd $(BR_SRC) && make
-       cp $(BR_IMG) initrd-$(XMTEST_MAJ_VER).img
+       cp $(BR_IMG) $(XMTEST_VER_IMG)
 
 initrd.img: $(XMTEST_VER_IMG)
        ln -sf $(XMTEST_VER_IMG) initrd.img
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/runtest.sh
--- a/tools/xm-test/runtest.sh  Tue Oct 24 10:08:30 2006 -0600
+++ b/tools/xm-test/runtest.sh  Tue Oct 24 11:21:48 2006 -0600
@@ -76,9 +76,11 @@ runnable_tests() {
     # using the right version
     realrd=$(readlink ramdisk/initrd.img)
     eval $(./lib/XmTestReport/xmtest.py)
-    rrdver="initrd-${XM_TEST_MAJ}.${XM_TEST_MIN}.img"
+    ARCH=$(uname -m | sed -e s/i.86/i386/ -e 's/ppc\(64\)*/powerpc/')
+    rrdver="initrd-${XM_TEST_MAJ}.${XM_TEST_MIN}-${ARCH}.img"
     if [ "$realrd" != "$rrdver" ]; then
-       echo "Error: ramdisk/initrd.img is from an old version"
+       echo "Error: ramdisk/initrd.img is from an old version, or is not for 
this "
+        echo "architecture ($ARCH)."
        echo "You need to build a ramdisk from at least 
${XM_TEST_MAJ}.${XM_TEST_MIN}"
        exit 1
     fi
@@ -197,7 +199,10 @@ unsafe=no
 unsafe=no
 GROUPENTERED=default
 
-cp -f tests/security-acm/xm-test-security_policy.xml 
/etc/xen/acm-security/policies
+if [ -d /etc/xen/acm-security/policies ]; then
+       cp -f tests/security-acm/xm-test-security_policy.xml \
+             /etc/xen/acm-security/policies
+fi
 
 # Resolve options
 while [ $# -gt 0 ]
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/tests/create/11_create_concurrent_pos.py
--- a/tools/xm-test/tests/create/11_create_concurrent_pos.py    Tue Oct 24 
10:08:30 2006 -0600
+++ b/tools/xm-test/tests/create/11_create_concurrent_pos.py    Tue Oct 24 
11:21:48 2006 -0600
@@ -16,7 +16,7 @@ else:
     MAX_DOMS = 50
 
 MIN_DOMS    = 5
-MEM_PER_DOM = 24
+MEM_PER_DOM = minSafeMem()
 
 domains = []
 console = []
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/tests/create/12_create_concurrent_stress_pos.py
--- a/tools/xm-test/tests/create/12_create_concurrent_stress_pos.py     Tue Oct 
24 10:08:30 2006 -0600
+++ b/tools/xm-test/tests/create/12_create_concurrent_stress_pos.py     Tue Oct 
24 11:21:48 2006 -0600
@@ -8,10 +8,17 @@ import time
 import time
 
 DOMS=5
-MEM=32
+MEM=minSafeMem()
 DUR=60
 
 domains = []
+
+free_mem = int(getInfo("free_memory"))
+NUM_DOMS = int(free_mem / MEM)
+
+if NUM_DOMS < DOMS:
+    SKIP("Need %i MB of RAM to start %i@%iMB domains! (%i MB avail)" %
+         (DOMS * MEM, DOMS, MEM, free_mem))
 
 for i in range(0,DOMS):
     dom = XmTestDomain(extraConfig={"memory" : MEM})
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/tests/create/15_create_smallmem_pos.py
--- a/tools/xm-test/tests/create/15_create_smallmem_pos.py      Tue Oct 24 
10:08:30 2006 -0600
+++ b/tools/xm-test/tests/create/15_create_smallmem_pos.py      Tue Oct 24 
11:21:48 2006 -0600
@@ -5,8 +5,8 @@
 
 from XmTestLib import *
 
-# 32MBs is the default lower limit for creating domains, it should work
-MEM = 32
+# Create a domain with the minimum memory allocation
+MEM = minSafeMem()
 
 domain = XmTestDomain(extraConfig={"memory": MEM,
                                    "extra" :"mem=%iM" % MEM})
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/tests/create/16_create_smallmem_neg.py
--- a/tools/xm-test/tests/create/16_create_smallmem_neg.py      Tue Oct 24 
10:08:30 2006 -0600
+++ b/tools/xm-test/tests/create/16_create_smallmem_neg.py      Tue Oct 24 
11:21:48 2006 -0600
@@ -3,6 +3,7 @@
 # Copyright (C) International Business Machines Corp., 2005
 # Author: Dan Smith <danms@xxxxxxxxxx>
 
+import re
 from XmTestLib import *
 
 # This is under the default lower limit of 32 and we expect this test
@@ -16,13 +17,14 @@ try:
     console = domain.start()
     console.runCmd("ls")
 except DomainError, e:
-    FAIL("Unable to start a domain with %i MB" % MEM)
+    if not re.search('^Error: Domain memory must be at least \d+ KB', e.extra):
+        # PPC gracefully fails like this, rather than crashing.
+        FAIL("Unable to start a domain with %i MB" % MEM)
 except ConsoleError, e:
     if e.reason == RUNAWAY:
         print "Domain with %i MB has runaway console as expected" % MEM
-    else:
-        print "Starting a domain with %i MB failed as expected" % MEM
 else:
     FAIL("Starting a console with %i MB passed, expected test to fail" % MEM)
 
+print "Starting a domain with %i MB failed as expected" % MEM
 domain.destroy()
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/linux-xen/setup.c
--- a/xen/arch/ia64/linux-xen/setup.c   Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/linux-xen/setup.c   Tue Oct 24 11:21:48 2006 -0600
@@ -803,7 +803,7 @@ cpu_init (void)
        cpu_data = per_cpu_init();
 
 #ifdef XEN
-       printf ("cpu_init: current=%p\n", current);
+       printk("cpu_init: current=%p\n", current);
 #endif
 
        /*
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/vmx/mmio.c
--- a/xen/arch/ia64/vmx/mmio.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/vmx/mmio.c  Tue Oct 24 11:21:48 2006 -0600
@@ -80,7 +80,7 @@ static void pib_write(VCPU *vcpu, void *
             }
         }
         else {      // upper half
-            printf("IPI-UHF write %lx\n",pib_off);
+            printk("IPI-UHF write %lx\n",pib_off);
             panic_domain(NULL,"Not support yet for SM-VP\n");
         }
         break;
@@ -114,7 +114,7 @@ static void pib_read(VCPU *vcpu, uint64_
             }
             else {
 #ifdef  IPI_DEBUG
-                printf("IPI-LHF read %lx\n",pib_off);
+                printk("IPI-LHF read %lx\n",pib_off);
 #endif
                 *(uint64_t *)dest = 0;  // TODO for SM-VP
             }
@@ -125,7 +125,7 @@ static void pib_read(VCPU *vcpu, uint64_
             }
             else {
 #ifdef  IPI_DEBUG
-                printf("IPI-UHF read %lx\n",pib_off);
+                printk("IPI-UHF read %lx\n",pib_off);
 #endif
                 *(uint8_t *)dest = 0;   // TODO for SM-VP
             }
@@ -321,7 +321,7 @@ static void deliver_ipi (VCPU *vcpu, uin
 static void deliver_ipi (VCPU *vcpu, uint64_t dm, uint64_t vector)
 {
 #ifdef  IPI_DEBUG
-  printf ("deliver_ipi %lx %lx\n",dm,vector);
+  printk ("deliver_ipi %lx %lx\n",dm,vector);
 #endif
     switch ( dm ) {
     case 0:     // INT
@@ -387,7 +387,7 @@ static void write_ipi (VCPU *vcpu, uint6
         memset (&c, 0, sizeof (c));
 
         if (arch_set_info_guest (targ, &c) != 0) {
-            printf ("arch_boot_vcpu: failure\n");
+            printk ("arch_boot_vcpu: failure\n");
             return;
         }
         /* First or next rendez-vous: set registers.  */
@@ -397,11 +397,11 @@ static void write_ipi (VCPU *vcpu, uint6
 
         if (test_and_clear_bit(_VCPUF_down,&targ->vcpu_flags)) {
             vcpu_wake(targ);
-            printf ("arch_boot_vcpu: vcpu %d awaken %016lx!\n",
+            printk ("arch_boot_vcpu: vcpu %d awaken %016lx!\n",
                     targ->vcpu_id, targ_regs->cr_iip);
         }
         else
-            printf ("arch_boot_vcpu: huu, already awaken!");
+            printk ("arch_boot_vcpu: huu, already awaken!");
     }
     else {
         int running = test_bit(_VCPUF_running,&targ->vcpu_flags);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/vmx/vmx_phy_mode.c
--- a/xen/arch/ia64/vmx/vmx_phy_mode.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_phy_mode.c  Tue Oct 24 11:21:48 2006 -0600
@@ -246,7 +246,7 @@ switch_mm_mode(VCPU *vcpu, IA64_PSR old_
     perfc_incra(vmx_switch_mm_mode, act);
     switch (act) {
     case SW_V2P:
-//        printf("V -> P mode transition: (0x%lx -> 0x%lx)\n",
+//        printk("V -> P mode transition: (0x%lx -> 0x%lx)\n",
 //               old_psr.val, new_psr.val);
         vcpu->arch.old_rsc = regs->ar_rsc;
         switch_to_physical_rid(vcpu);
@@ -258,7 +258,7 @@ switch_mm_mode(VCPU *vcpu, IA64_PSR old_
         vcpu->arch.mode_flags |= GUEST_IN_PHY;
         break;
     case SW_P2V:
-//        printf("P -> V mode transition: (0x%lx -> 0x%lx)\n",
+//        printk("P -> V mode transition: (0x%lx -> 0x%lx)\n",
 //               old_psr.val, new_psr.val);
         switch_to_virtual_rid(vcpu);
         /*
@@ -269,11 +269,11 @@ switch_mm_mode(VCPU *vcpu, IA64_PSR old_
         vcpu->arch.mode_flags &= ~GUEST_IN_PHY;
         break;
     case SW_SELF:
-        printf("Switch to self-0x%lx!!! MM mode doesn't change...\n",
+        printk("Switch to self-0x%lx!!! MM mode doesn't change...\n",
             old_psr.val);
         break;
     case SW_NOP:
-//        printf("No action required for mode transition: (0x%lx -> 0x%lx)\n",
+//        printk("No action required for mode transition: (0x%lx -> 0x%lx)\n",
 //               old_psr.val, new_psr.val);
         break;
     default:
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/vmx/vmx_vcpu.c
--- a/xen/arch/ia64/vmx/vmx_vcpu.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_vcpu.c      Tue Oct 24 11:21:48 2006 -0600
@@ -274,7 +274,7 @@ check_entry(u64 va, u64 ps, char *str)
       va == 0x600000000000C000UL ) {
     stop();
      }
-     if (tlb_debug) printf("%s at %lx %lx\n", str, va, 1UL<<ps);
+     if (tlb_debug) printk("%s at %lx %lx\n", str, va, 1UL<<ps);
 }
 #endif
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/vmx/vmx_virt.c
--- a/xen/arch/ia64/vmx/vmx_virt.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_virt.c      Tue Oct 24 11:21:48 2006 -0600
@@ -1364,7 +1364,7 @@ vmx_emulate(VCPU *vcpu, REGS *regs)
 #endif
 #if 0
 if ( (cause == 0xff && opcode == 0x1e000000000) || cause == 0 ) {
-               printf ("VMAL decode error: cause - %lx; op - %lx\n", 
+               printk ("VMAL decode error: cause - %lx; op - %lx\n", 
                        cause, opcode );
                return;
 }
@@ -1381,7 +1381,7 @@ if ( (cause == 0xff && opcode == 0x1e000
     else if (slot == 1)
         inst.inst = bundle.slot1a + (bundle.slot1b<<18);
     else if (slot == 2) inst.inst = bundle.slot2;
-    else printf("priv_handle_op: illegal slot: %d\n", slot);
+    else printk("priv_handle_op: illegal slot: %d\n", slot);
     slot_type = slot_types[bundle.template][slot];
     ia64_priv_decoder(slot_type, inst, &cause);
     if(cause==0){
@@ -1554,7 +1554,7 @@ if ( (cause == 0xff && opcode == 0x1e000
         status=vmx_emul_mov_from_cpuid(vcpu, inst);
         break;
     case EVENT_VMSW:
-        printf ("Unimplemented instruction %ld\n", cause);
+        printk ("Unimplemented instruction %ld\n", cause);
        status=IA64_FAULT;
         break;
     default:
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/dom0_ops.c
--- a/xen/arch/ia64/xen/dom0_ops.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/dom0_ops.c      Tue Oct 24 11:21:48 2006 -0600
@@ -171,7 +171,7 @@ long arch_do_domctl(xen_domctl_t *op, XE
     }
     break;
     default:
-        printf("arch_do_domctl: unrecognized domctl: %d!!!\n",op->cmd);
+        printk("arch_do_domctl: unrecognized domctl: %d!!!\n",op->cmd);
         ret = -ENOSYS;
 
     }
@@ -211,7 +211,7 @@ long arch_do_sysctl(xen_sysctl_t *op, XE
     break;
 
     default:
-        printf("arch_do_sysctl: unrecognized sysctl: %d!!!\n",op->cmd);
+        printk("arch_do_sysctl: unrecognized sysctl: %d!!!\n",op->cmd);
         ret = -ENOSYS;
 
     }
@@ -278,7 +278,7 @@ do_dom0vp_op(unsigned long cmd,
         break;
     default:
         ret = -1;
-               printf("unknown dom0_vp_op 0x%lx\n", cmd);
+               printk("unknown dom0_vp_op 0x%lx\n", cmd);
         break;
     }
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/dom_fw.c
--- a/xen/arch/ia64/xen/dom_fw.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/dom_fw.c        Tue Oct 24 11:21:48 2006 -0600
@@ -204,9 +204,9 @@ print_md(efi_memory_desc_t *md)
 
        size = md->num_pages << EFI_PAGE_SHIFT;
        if (size > ONE_MB)
-               printf ("(%luMB)\n", size >> 20);
+               printk ("(%luMB)\n", size >> 20);
        else
-               printf ("(%luKB)\n", size >> 10);
+               printk ("(%luKB)\n", size >> 10);
 }
 
 static u32 lsapic_nbr;
@@ -574,7 +574,7 @@ complete_dom0_memmap(struct domain *d,
 
                default:
                        /* Print a warning but continue.  */
-                       printf("complete_dom0_memmap: warning: "
+                       printk("complete_dom0_memmap: warning: "
                               "unhandled MDT entry type %u\n", md->type);
                }
        }
@@ -734,47 +734,47 @@ dom_fw_init(struct domain *d,
                /* Write messages to the console.  */
                touch_acpi_table();
 
-               printf("Domain0 EFI passthrough:");
+               printk("Domain0 EFI passthrough:");
                if (efi.mps) {
                        tables->efi_tables[i].guid = MPS_TABLE_GUID;
                        tables->efi_tables[i].table = __pa(efi.mps);
-                       printf(" MPS=0x%lx",tables->efi_tables[i].table);
+                       printk(" MPS=0x%lx",tables->efi_tables[i].table);
                        i++;
                }
 
                if (efi.acpi20) {
                        tables->efi_tables[i].guid = ACPI_20_TABLE_GUID;
                        tables->efi_tables[i].table = __pa(efi.acpi20);
-                       printf(" ACPI 2.0=0x%lx",tables->efi_tables[i].table);
+                       printk(" ACPI 2.0=0x%lx",tables->efi_tables[i].table);
                        i++;
                }
                if (efi.acpi) {
                        tables->efi_tables[i].guid = ACPI_TABLE_GUID;
                        tables->efi_tables[i].table = __pa(efi.acpi);
-                       printf(" ACPI=0x%lx",tables->efi_tables[i].table);
+                       printk(" ACPI=0x%lx",tables->efi_tables[i].table);
                        i++;
                }
                if (efi.smbios) {
                        tables->efi_tables[i].guid = SMBIOS_TABLE_GUID;
                        tables->efi_tables[i].table = __pa(efi.smbios);
-                       printf(" SMBIOS=0x%lx",tables->efi_tables[i].table);
+                       printk(" SMBIOS=0x%lx",tables->efi_tables[i].table);
                        i++;
                }
                if (efi.hcdp) {
                        tables->efi_tables[i].guid = HCDP_TABLE_GUID;
                        tables->efi_tables[i].table = __pa(efi.hcdp);
-                       printf(" HCDP=0x%lx",tables->efi_tables[i].table);
+                       printk(" HCDP=0x%lx",tables->efi_tables[i].table);
                        i++;
                }
-               printf("\n");
+               printk("\n");
        } else {
-               printf("DomainU EFI build up:");
+               printk("DomainU EFI build up:");
 
                tables->efi_tables[i].guid = ACPI_20_TABLE_GUID;
                tables->efi_tables[i].table = FW_ACPI_BASE_PADDR;
-               printf(" ACPI 2.0=0x%lx",tables->efi_tables[i].table);
+               printk(" ACPI 2.0=0x%lx",tables->efi_tables[i].table);
                i++;
-               printf("\n");
+               printk("\n");
        }
 
        /* fill in the SAL system table: */
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/domain.c        Tue Oct 24 11:21:48 2006 -0600
@@ -441,7 +441,7 @@ int arch_domain_create(struct domain *d)
        d->arch.ioport_caps = rangeset_new(d, "I/O Ports",
                                           RANGESETF_prettyprint_hex);
 
-       printf ("arch_domain_create: domain=%p\n", d);
+       printk ("arch_domain_create: domain=%p\n", d);
        return 0;
 
 fail_nomem:
@@ -655,7 +655,7 @@ domain_set_shared_info_va (unsigned long
 
        /* Note: this doesn't work well if other cpus are already running.
           However this is part of the spec :-)  */
-       printf ("Domain set shared_info_va to 0x%016lx\n", va);
+       printk ("Domain set shared_info_va to 0x%016lx\n", va);
        d->arch.shared_info_va = va;
 
        for_each_vcpu (d, v1) {
@@ -955,7 +955,7 @@ int construct_dom0(struct domain *d,
        struct page_info *page = NULL;
 #endif
 
-//printf("construct_dom0: starting\n");
+//printk("construct_dom0: starting\n");
 
        /* Sanity! */
        BUG_ON(d != dom0);
@@ -1059,10 +1059,10 @@ int construct_dom0(struct domain *d,
        if (dom0_max_vcpus > MAX_VIRT_CPUS)
            dom0_max_vcpus = MAX_VIRT_CPUS;
        
-       printf ("Dom0 max_vcpus=%d\n", dom0_max_vcpus);
+       printk ("Dom0 max_vcpus=%d\n", dom0_max_vcpus);
        for ( i = 1; i < dom0_max_vcpus; i++ )
            if (alloc_vcpu(d, i, i) == NULL)
-               printf ("Cannot allocate dom0 vcpu %d\n", i);
+               printk ("Cannot allocate dom0 vcpu %d\n", i);
 
        /* Copy the OS image. */
        loaddomainelfimage(d,image_start);
@@ -1148,7 +1148,7 @@ void machine_restart(char * __unused)
 {
        console_start_sync();
        if (running_on_sim)
-               printf ("machine_restart called.  spinning...\n");
+               printk ("machine_restart called.  spinning...\n");
        else
                (*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
        while(1);
@@ -1160,7 +1160,7 @@ void machine_halt(void)
 {
        console_start_sync();
        if (running_on_sim)
-               printf ("machine_halt called.  spinning...\n");
+               printk ("machine_halt called.  spinning...\n");
        else
                cpu_halt();
        while(1);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/faults.c        Tue Oct 24 11:21:48 2006 -0600
@@ -105,11 +105,11 @@ void reflect_extint(struct pt_regs *regs
        static int first_extint = 1;
 
        if (first_extint) {
-               printf("Delivering first extint to domain: isr=0x%lx, 
iip=0x%lx\n", isr, regs->cr_iip);
+               printk("Delivering first extint to domain: isr=0x%lx, 
iip=0x%lx\n", isr, regs->cr_iip);
                first_extint = 0;
        }
        if (vcpu_timer_pending_early(v))
-printf("*#*#*#* about to deliver early timer to domain 
%d!!!\n",v->domain->domain_id);
+printk("*#*#*#* about to deliver early timer to domain 
%d!!!\n",v->domain->domain_id);
        PSCB(current,itir) = 0;
        reflect_interruption(isr,regs,IA64_EXTINT_VECTOR);
 }
@@ -129,7 +129,7 @@ void reflect_event(struct pt_regs *regs)
                return;
 
        if (!PSCB(v,interrupt_collection_enabled))
-               printf("psr.ic off, delivering event, 
ipsr=%lx,iip=%lx,isr=%lx,viip=0x%lx\n",
+               printk("psr.ic off, delivering event, 
ipsr=%lx,iip=%lx,isr=%lx,viip=0x%lx\n",
                       regs->cr_ipsr, regs->cr_iip, isr, PSCB(v, iip));
        PSCB(v,unat) = regs->ar_unat;  // not sure if this is really needed?
        PSCB(v,precover_ifs) = regs->cr_ifs;
@@ -245,7 +245,7 @@ void ia64_do_page_fault (unsigned long a
 
        if (!PSCB(current,interrupt_collection_enabled)) {
                check_bad_nested_interruption(isr,regs,fault);
-               //printf("Delivering NESTED DATA TLB fault\n");
+               //printk("Delivering NESTED DATA TLB fault\n");
                fault = IA64_DATA_NESTED_TLB_VECTOR;
                regs->cr_iip = ((unsigned long) PSCBX(current,iva) + fault) & 
~0xffUL;
                regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | 
DELIVER_PSR_SET;
@@ -374,7 +374,7 @@ ia64_fault (unsigned long vector, unsign
                "Unknown fault 13", "Unknown fault 14", "Unknown fault 15"
        };
 
-       printf("ia64_fault, vector=0x%lx, ifa=0x%016lx, iip=0x%016lx, 
ipsr=0x%016lx, isr=0x%016lx\n",
+       printk("ia64_fault, vector=0x%lx, ifa=0x%016lx, iip=0x%016lx, 
ipsr=0x%016lx, isr=0x%016lx\n",
               vector, ifa, regs->cr_iip, regs->cr_ipsr, isr);
 
 
@@ -384,7 +384,7 @@ ia64_fault (unsigned long vector, unsign
                 * the lfetch.
                 */
                ia64_psr(regs)->ed = 1;
-               printf("ia64_fault: handled lfetch.fault\n");
+               printk("ia64_fault: handled lfetch.fault\n");
                return;
        }
 
@@ -433,7 +433,7 @@ ia64_fault (unsigned long vector, unsign
                               regs->cr_iip + ia64_psr(regs)->ri,
                               regs->pr);
 # endif
-                       printf("ia64_fault: returning on hazard\n");
+                       printk("ia64_fault: returning on hazard\n");
                        return;
                }
                break;
@@ -592,7 +592,7 @@ ia64_handle_reflection (unsigned long if
                if (((isr >> 4L) & 0xfL) == 1) {
                        /* Fault is due to a register NaT consumption fault. */
                        //regs->eml_unat = 0;  FIXME: DO WE NEED THIS??
-                       printf("ia64_handle_reflection: handling regNaT 
fault\n");
+                       printk("ia64_handle_reflection: handling regNaT 
fault\n");
                        vector = IA64_NAT_CONSUMPTION_VECTOR; break;
                }
 #if 1
@@ -605,20 +605,20 @@ ia64_handle_reflection (unsigned long if
 #ifdef CONFIG_PRIVIFY
                /* Some privified operations are coded using reg+64 instead
                   of reg.  */
-               printf("*** NaT fault... attempting to handle as privop\n");
-               printf("isr=%016lx, ifa=%016lx, iip=%016lx, ipsr=%016lx\n",
+               printk("*** NaT fault... attempting to handle as privop\n");
+               printk("isr=%016lx, ifa=%016lx, iip=%016lx, ipsr=%016lx\n",
                       isr, ifa, regs->cr_iip, psr);
                //regs->eml_unat = 0;  FIXME: DO WE NEED THIS???
                // certain NaT faults are higher priority than privop faults
                vector = priv_emulate(v,regs,isr);
                if (vector == IA64_NO_FAULT) {
-                       printf("*** Handled privop masquerading as NaT 
fault\n");
+                       printk("*** Handled privop masquerading as NaT 
fault\n");
                        return;
                }
 #endif
                vector = IA64_NAT_CONSUMPTION_VECTOR; break;
            case 27:
-               //printf("*** Handled speculation vector, 
itc=%lx!\n",ia64_get_itc());
+               //printk("*** Handled speculation vector, 
itc=%lx!\n",ia64_get_itc());
                PSCB(current,iim) = iim;
                vector = IA64_SPECULATION_VECTOR; break;
            case 30:
@@ -633,7 +633,7 @@ ia64_handle_reflection (unsigned long if
                // fetch code fail
                if (IA64_RETRY == status)
                        return;
-               printf("ia64_handle_reflection: handling FP fault\n");
+               printk("ia64_handle_reflection: handling FP fault\n");
                vector = IA64_FP_FAULT_VECTOR; break;
            case 33:
                status = handle_fpu_swa(0, regs, isr);
@@ -642,20 +642,20 @@ ia64_handle_reflection (unsigned long if
                // fetch code fail
                if (IA64_RETRY == status)
                        return;
-               printf("ia64_handle_reflection: handling FP trap\n");
+               printk("ia64_handle_reflection: handling FP trap\n");
                vector = IA64_FP_TRAP_VECTOR; break;
            case 34:
-               printf("ia64_handle_reflection: handling lowerpriv trap\n");
+               printk("ia64_handle_reflection: handling lowerpriv trap\n");
                vector = IA64_LOWERPRIV_TRANSFER_TRAP_VECTOR; break;
            case 35:
-               printf("ia64_handle_reflection: handling taken branch trap\n");
+               printk("ia64_handle_reflection: handling taken branch trap\n");
                vector = IA64_TAKEN_BRANCH_TRAP_VECTOR; break;
            case 36:
-               printf("ia64_handle_reflection: handling single step trap\n");
+               printk("ia64_handle_reflection: handling single step trap\n");
                vector = IA64_SINGLE_STEP_TRAP_VECTOR; break;
 
            default:
-               printf("ia64_handle_reflection: unhandled 
vector=0x%lx\n",vector);
+               printk("ia64_handle_reflection: unhandled 
vector=0x%lx\n",vector);
                while(vector);
                return;
        }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/fw_emul.c
--- a/xen/arch/ia64/xen/fw_emul.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/fw_emul.c       Tue Oct 24 11:21:48 2006 -0600
@@ -75,20 +75,20 @@ sal_emulator (long index, unsigned long 
                        r9 = value;
                }
                else
-                    printf("NON-PRIV DOMAIN CALLED SAL_PCI_CONFIG_READ\n");
+                    printk("NON-PRIV DOMAIN CALLED SAL_PCI_CONFIG_READ\n");
                break;
            case SAL_PCI_CONFIG_WRITE:
                if (current->domain == dom0) {
                        if (((in1 & ~0xffffffffUL) && (in4 == 0)) ||
                            (in4 > 1) ||
                            (in2 > 8) || (in2 & (in2-1)))
-                               printf("*** 
SAL_PCI_CONF_WRITE?!?(adr=0x%lx,typ=0x%lx,sz=0x%lx,val=0x%lx)\n",
+                               printk("*** 
SAL_PCI_CONF_WRITE?!?(adr=0x%lx,typ=0x%lx,sz=0x%lx,val=0x%lx)\n",
                                        in1,in4,in2,in3);
                        // note that args are in a different order!!
                        status = ia64_sal_pci_config_write(in1,in4,in2,in3);
                }
                else
-                    printf("NON-PRIV DOMAIN CALLED SAL_PCI_CONFIG_WRITE\n");
+                    printk("NON-PRIV DOMAIN CALLED SAL_PCI_CONFIG_WRITE\n");
                break;
            case SAL_SET_VECTORS:
                if (in1 == SAL_VECTOR_OS_BOOT_RENDEZ) {
@@ -104,7 +104,7 @@ sal_emulator (long index, unsigned long 
                        }
                }
                else
-                       printf("*** CALLED SAL_SET_VECTORS %lu.  IGNORED...\n",
+                       printk("*** CALLED SAL_SET_VECTORS %lu.  IGNORED...\n",
                               in1);
                break;
            case SAL_GET_STATE_INFO:
@@ -121,10 +121,10 @@ sal_emulator (long index, unsigned long 
                /* Noop.  */
                break;
            case SAL_MC_RENDEZ:
-               printf("*** CALLED SAL_MC_RENDEZ.  IGNORED...\n");
+               printk("*** CALLED SAL_MC_RENDEZ.  IGNORED...\n");
                break;
            case SAL_MC_SET_PARAMS:
-               printf("*** CALLED SAL_MC_SET_PARAMS.  IGNORED...\n");
+               printk("*** CALLED SAL_MC_SET_PARAMS.  IGNORED...\n");
                break;
            case SAL_CACHE_FLUSH:
                if (1) {
@@ -141,13 +141,13 @@ sal_emulator (long index, unsigned long 
                }
                break;
            case SAL_CACHE_INIT:
-               printf("*** CALLED SAL_CACHE_INIT.  IGNORED...\n");
+               printk("*** CALLED SAL_CACHE_INIT.  IGNORED...\n");
                break;
            case SAL_UPDATE_PAL:
-               printf("*** CALLED SAL_UPDATE_PAL.  IGNORED...\n");
+               printk("*** CALLED SAL_UPDATE_PAL.  IGNORED...\n");
                break;
            default:
-               printf("*** CALLED SAL_ WITH UNKNOWN INDEX.  IGNORED...\n");
+               printk("*** CALLED SAL_ WITH UNKNOWN INDEX.  IGNORED...\n");
                status = -1;
                break;
        }
@@ -362,7 +362,7 @@ xen_pal_emulator(unsigned long index, u6
                break;
            case PAL_HALT:
                if (current->domain == dom0) {
-                       printf ("Domain0 halts the machine\n");
+                       printk ("Domain0 halts the machine\n");
                        console_start_sync();
                        (*efi.reset_system)(EFI_RESET_SHUTDOWN,0,0,NULL);
                }
@@ -429,7 +429,7 @@ efi_emulate_get_time(
        struct page_info *tc_page = NULL;
        efi_status_t status = 0;
 
-       //printf("efi_get_time(%016lx,%016lx) called\n", tv_addr, tc_addr);
+       //printk("efi_get_time(%016lx,%016lx) called\n", tv_addr, tc_addr);
        tv = efi_translate_domain_addr(tv_addr, fault, &tv_page);
        if (*fault != IA64_NO_FAULT)
                goto errout;
@@ -439,9 +439,9 @@ efi_emulate_get_time(
                        goto errout;
        }
 
-       //printf("efi_get_time(%016lx,%016lx) translated to xen virtual 
address\n", tv, tc);
+       //printk("efi_get_time(%016lx,%016lx) translated to xen virtual 
address\n", tv, tc);
        status = (*efi.get_time)((efi_time_t *) tv, (efi_time_cap_t *) tc);
-       //printf("efi_get_time returns %lx\n", status);
+       //printk("efi_get_time returns %lx\n", status);
 
 errout:
        if (tc_page != NULL)
@@ -695,14 +695,14 @@ efi_emulate_set_virtual_address_map(
        fpswa_interface_t *fpswa_inf = d->arch.fpswa_inf;
 
        if (descriptor_version != EFI_MEMDESC_VERSION) {
-               printf ("efi_emulate_set_virtual_address_map: memory "
+               printk ("efi_emulate_set_virtual_address_map: memory "
                        "descriptor version unmatched (%d vs %d)\n",
                        (int)descriptor_version, EFI_MEMDESC_VERSION);
                return EFI_INVALID_PARAMETER;
        }
 
        if (descriptor_size != sizeof(efi_memory_desc_t)) {
-               printf ("efi_emulate_set_virtual_address_map: memory descriptor 
size unmatched\n");
+               printk ("efi_emulate_set_virtual_address_map: memory descriptor 
size unmatched\n");
                return EFI_INVALID_PARAMETER;
        }
 
@@ -715,7 +715,7 @@ efi_emulate_set_virtual_address_map(
 
        for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
                if (copy_from_user(&entry, p, sizeof(efi_memory_desc_t))) {
-                       printf ("efi_emulate_set_virtual_address_map: 
copy_from_user() fault. addr=0x%p\n", p);
+                       printk ("efi_emulate_set_virtual_address_map: 
copy_from_user() fault. addr=0x%p\n", p);
                        return EFI_UNSUPPORTED;
                }
 
@@ -843,7 +843,7 @@ efi_emulator (struct pt_regs *regs, IA64
                status = EFI_UNSUPPORTED;
                break;
            default:
-               printf("unknown ia64 fw hypercall %lx\n", regs->r2);
+               printk("unknown ia64 fw hypercall %lx\n", regs->r2);
                status = EFI_UNSUPPORTED;
        }
 
@@ -864,7 +864,7 @@ do_ssc(unsigned long ssc, struct pt_regs
            case SSC_PUTCHAR:
                buf[0] = arg0;
                buf[1] = '\0';
-               printf(buf);
+               printk(buf);
                break;
            case SSC_GETCHAR:
                retval = ia64_ssc(0,0,0,0,ssc);
@@ -877,7 +877,7 @@ do_ssc(unsigned long ssc, struct pt_regs
 /**/                   stat = (struct ssc_disk_stat *)__va(arg0);
 ///**/                 if (stat->fd == last_fd) stat->count = last_count;
 /**/                   stat->count = last_count;
-//if (last_count >= PAGE_SIZE) printf("ssc_wait: 
stat->fd=%d,last_fd=%d,last_count=%d\n",stat->fd,last_fd,last_count);
+//if (last_count >= PAGE_SIZE) printk("ssc_wait: 
stat->fd=%d,last_fd=%d,last_count=%d\n",stat->fd,last_fd,last_count);
 ///**/                 retval = ia64_ssc(arg0,0,0,0,ssc);
 /**/                   retval = 0;
                }
@@ -886,7 +886,7 @@ do_ssc(unsigned long ssc, struct pt_regs
                break;
            case SSC_OPEN:
                arg1 = vcpu_get_gr(current,33); // access rights
-if (!running_on_sim) { printf("SSC_OPEN, not implemented on hardware.  
(ignoring...)\n"); arg0 = 0; }
+if (!running_on_sim) { printk("SSC_OPEN, not implemented on hardware.  
(ignoring...)\n"); arg0 = 0; }
                if (arg0) {     // metaphysical address
                        arg0 = translate_domain_mpaddr(arg0, NULL);
                        retval = ia64_ssc(arg0,arg1,0,0,ssc);
@@ -896,7 +896,7 @@ if (!running_on_sim) { printf("SSC_OPEN,
                break;
            case SSC_WRITE:
            case SSC_READ:
-//if (ssc == SSC_WRITE) printf("DOING AN SSC_WRITE\n");
+//if (ssc == SSC_WRITE) printk("DOING AN SSC_WRITE\n");
                arg1 = vcpu_get_gr(current,33);
                arg2 = vcpu_get_gr(current,34);
                arg3 = vcpu_get_gr(current,35);
@@ -912,7 +912,7 @@ if (!running_on_sim) { printf("SSC_OPEN,
 /**/                   last_fd = arg1;
 /**/                   last_count = len;
                        mpaddr = req->addr;
-//if (last_count >= PAGE_SIZE) printf("do_ssc: read fd=%d, addr=%p, len=%lx 
",last_fd,mpaddr,len);
+//if (last_count >= PAGE_SIZE) printk("do_ssc: read fd=%d, addr=%p, len=%lx 
",last_fd,mpaddr,len);
                        retval = 0;
                        if ((mpaddr & PAGE_MASK) != ((mpaddr+len-1) & 
PAGE_MASK)) {
                                // do partial page first
@@ -923,7 +923,7 @@ if (!running_on_sim) { printf("SSC_OPEN,
                                arg3 += req->len; // file offset
 /**/                           last_stat.fd = last_fd;
 /**/                           
(void)ia64_ssc(__pa(&last_stat),0,0,0,SSC_WAIT_COMPLETION);
-//if (last_count >= PAGE_SIZE) printf("ssc(%p,%lx)[part]=%x 
",req->addr,req->len,retval);
+//if (last_count >= PAGE_SIZE) printk("ssc(%p,%lx)[part]=%x 
",req->addr,req->len,retval);
                        }
                        if (retval >= 0) while (len > 0) {
                                req->addr = translate_domain_mpaddr(mpaddr, 
NULL);
@@ -934,27 +934,27 @@ if (!running_on_sim) { printf("SSC_OPEN,
 // TEMP REMOVED AGAIN                          arg3 += req->len; // file offset
 /**/                           last_stat.fd = last_fd;
 /**/                           
(void)ia64_ssc(__pa(&last_stat),0,0,0,SSC_WAIT_COMPLETION);
-//if (last_count >= PAGE_SIZE) printf("ssc(%p,%lx)=%x 
",req->addr,req->len,retval);
+//if (last_count >= PAGE_SIZE) printk("ssc(%p,%lx)=%x 
",req->addr,req->len,retval);
                        }
                        // set it back to the original value
                        req->len = last_count;
                }
                else retval = -1L;
                vcpu_set_gr(current,8,retval,0);
-//if (last_count >= PAGE_SIZE) printf("retval=%x\n",retval);
+//if (last_count >= PAGE_SIZE) printk("retval=%x\n",retval);
                break;
            case SSC_CONNECT_INTERRUPT:
                arg1 = vcpu_get_gr(current,33);
                arg2 = vcpu_get_gr(current,34);
                arg3 = vcpu_get_gr(current,35);
-               if (!running_on_sim) { printf("SSC_CONNECT_INTERRUPT, not 
implemented on hardware.  (ignoring...)\n"); break; }
+               if (!running_on_sim) { printk("SSC_CONNECT_INTERRUPT, not 
implemented on hardware.  (ignoring...)\n"); break; }
                (void)ia64_ssc(arg0,arg1,arg2,arg3,ssc);
                break;
            case SSC_NETDEV_PROBE:
                vcpu_set_gr(current,8,-1L,0);
                break;
            default:
-               printf("ia64_handle_break: bad ssc code %lx, iip=0x%lx, 
b0=0x%lx... spinning\n",
+               printk("ia64_handle_break: bad ssc code %lx, iip=0x%lx, 
b0=0x%lx... spinning\n",
                        ssc, regs->cr_iip, regs->b0);
                while(1);
                break;
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/hypercall.c     Tue Oct 24 11:21:48 2006 -0600
@@ -163,7 +163,7 @@ fw_hypercall_ipi (struct pt_regs *regs)
                        memset (&c, 0, sizeof (c));
 
                        if (arch_set_info_guest (targ, &c) != 0) {
-                               printf ("arch_boot_vcpu: failure\n");
+                               printk ("arch_boot_vcpu: failure\n");
                                return;
                        }
                }
@@ -177,11 +177,11 @@ fw_hypercall_ipi (struct pt_regs *regs)
                if (test_and_clear_bit(_VCPUF_down,
                                       &targ->vcpu_flags)) {
                        vcpu_wake(targ);
-                       printf ("arch_boot_vcpu: vcpu %d awaken\n",
+                       printk ("arch_boot_vcpu: vcpu %d awaken\n",
                                targ->vcpu_id);
                }
                else
-                       printf ("arch_boot_vcpu: huu, already awaken!\n");
+                       printk ("arch_boot_vcpu: huu, already awaken!\n");
        }
        else {
                int running = test_bit(_VCPUF_running,
@@ -220,7 +220,7 @@ ia64_hypercall(struct pt_regs *regs)
                return xen_fast_hypercall(regs);
 
        case FW_HYPERCALL_PAL_CALL:
-               //printf("*** PAL hypercall: index=%d\n",regs->r28);
+               //printk("*** PAL hypercall: index=%d\n",regs->r28);
                //FIXME: This should call a C routine
 #if 0
                // This is very conservative, but avoids a possible
@@ -235,7 +235,7 @@ ia64_hypercall(struct pt_regs *regs)
                                event_pending(v)) {
                                perfc_incrc(idle_when_pending);
                                vcpu_pend_unspecified_interrupt(v);
-//printf("idle w/int#%d pending!\n",pi);
+//printk("idle w/int#%d pending!\n",pi);
 //this shouldn't happen, but it apparently does quite a bit!  so don't
 //allow it to happen... i.e. if a domain has an interrupt pending and
 //it tries to halt itself because it thinks it is idle, just return here
@@ -301,7 +301,7 @@ ia64_hypercall(struct pt_regs *regs)
                regs->r11 = fpswa_ret.err2;
                break;
        default:
-               printf("unknown ia64 fw hypercall %lx\n", regs->r2);
+               printk("unknown ia64 fw hypercall %lx\n", regs->r2);
                regs->r8 = do_ni_hypercall();
        }
        return IA64_NO_FAULT;
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S   Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/hyperprivop.S   Tue Oct 24 11:21:48 2006 -0600
@@ -203,7 +203,7 @@ END(fast_hyperprivop)
 
 // give up for now if: ipsr.be==1, ipsr.pp==1
 // from reflect_interruption, don't need to:
-//  - printf first extint (debug only)
+//  - printk first extint (debug only)
 //  - check for interrupt collection enabled (routine will force on)
 //  - set ifa (not valid for extint)
 //  - set iha (not valid for extint)
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/irq.c
--- a/xen/arch/ia64/xen/irq.c   Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/irq.c   Tue Oct 24 11:21:48 2006 -0600
@@ -481,7 +481,7 @@ xen_debug_irq(unsigned long vector, stru
                firstirq = 0;
        }
        if (firsttime[vector]) {
-               printf("**** (entry) First received int on 
vector=%lu,itc=%lx\n",
+               printk("**** (entry) First received int on 
vector=%lu,itc=%lx\n",
                        (unsigned long) vector, ia64_get_itc());
                firsttime[vector] = 0;
        }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/mm.c    Tue Oct 24 11:21:48 2006 -0600
@@ -469,7 +469,7 @@ u64 translate_domain_pte(u64 pteval, u64
                           This can happen when domU tries to touch i/o
                           port space.  Also prevents possible address
                           aliasing issues.  */
-                       printf("Warning: UC to WB for mpaddr=%lx\n", mpaddr);
+                       printk("Warning: UC to WB for mpaddr=%lx\n", mpaddr);
                        pteval = (pteval & ~_PAGE_MA_MASK) | _PAGE_MA_WB;
                }
                break;
@@ -720,7 +720,7 @@ xencomm_paddr_to_maddr(unsigned long pad
 
     pa = ____lookup_domain_mpa(d, paddr);
     if (pa == INVALID_MFN) {
-        printf("%s: called with bad memory address: 0x%lx - iip=%lx\n",
+        printk("%s: called with bad memory address: 0x%lx - iip=%lx\n",
                __func__, paddr, vcpu_regs(v)->cr_iip);
         return 0;
     }
@@ -740,7 +740,7 @@ __assign_new_domain_page(struct domain *
 
     p = alloc_domheap_page(d);
     if (unlikely(!p)) {
-        printf("assign_new_domain_page: Can't alloc!!!! Aaaargh!\n");
+        printk("assign_new_domain_page: Can't alloc!!!! Aaaargh!\n");
         return(p);
     }
 
@@ -751,7 +751,7 @@ __assign_new_domain_page(struct domain *
                  && maddr < __get_cpu_var(vhpt_pend))) {
         /* FIXME: how can this happen ?
            vhpt is allocated by alloc_domheap_page.  */
-        printf("assign_new_domain_page: reassigned vhpt page %lx!!\n",
+        printk("assign_new_domain_page: reassigned vhpt page %lx!!\n",
                maddr);
     }
 
@@ -1749,7 +1749,7 @@ void domain_cache_flush (struct domain *
             }
         }
     }
-    //printf ("domain_cache_flush: %d %d pages\n", d->domain_id, nbr_page);
+    //printk ("domain_cache_flush: %d %d pages\n", d->domain_id, nbr_page);
 }
 
 #ifdef VERBOSE
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/privop.c
--- a/xen/arch/ia64/xen/privop.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/privop.c        Tue Oct 24 11:21:48 2006 -0600
@@ -594,16 +594,16 @@ static IA64FAULT priv_handle_op(VCPU * v
        if (iip == 0xa000000100001820) {
                static int firstpagefault = 1;
                if (firstpagefault) {
-                       printf("*** First time to domain page fault!\n");
+                       printk("*** First time to domain page fault!\n");
                        firstpagefault = 0;
                }
        }
 #endif
        if (privop_trace) {
                static long i = 400;
-               //if (i > 0) printf("priv_handle_op: at 0x%lx\n",iip);
+               //if (i > 0) printk("priv_handle_op: at 0x%lx\n",iip);
                if (i > 0)
-                       printf("priv_handle_op: privop trace at 0x%lx, "
+                       printk("priv_handle_op: privop trace at 0x%lx, "
                               "itc=%lx, itm=%lx\n",
                               iip, ia64_get_itc(), ia64_get_itm());
                i--;
@@ -617,11 +617,11 @@ static IA64FAULT priv_handle_op(VCPU * v
        else if (slot == 2)
                inst.inst = (bundle.i64[1] >> 23) & MASK_41;
        else
-               printf("priv_handle_op: illegal slot: %d\n", slot);
+               printk("priv_handle_op: illegal slot: %d\n", slot);
 
        slot_type = slot_types[bundle.template][slot];
        if (priv_verbose) {
-               printf("priv_handle_op: checking bundle at 0x%lx "
+               printk("priv_handle_op: checking bundle at 0x%lx "
                       "(op=0x%016lx) slot %d (type=%d)\n",
                       iip, (u64) inst.inst, slot, slot_type);
        }
@@ -734,11 +734,11 @@ static IA64FAULT priv_handle_op(VCPU * v
        default:
                break;
        }
-       //printf("We who are about do die salute you\n");
-       printf("priv_handle_op: can't handle privop at 0x%lx (op=0x%016lx) "
+       //printk("We who are about do die salute you\n");
+       printk("priv_handle_op: can't handle privop at 0x%lx (op=0x%016lx) "
               "slot %d (type=%d), ipsr=0x%lx\n",
               iip, (u64) inst.inst, slot, slot_type, ipsr);
-       //printf("vtop(0x%lx)==0x%lx\n", iip, tr_vtop(iip));
+       //printk("vtop(0x%lx)==0x%lx\n", iip, tr_vtop(iip));
        //thread_mozambique("privop fault\n");
        return IA64_ILLOP_FAULT;
 }
@@ -762,8 +762,8 @@ IA64FAULT priv_emulate(VCPU * vcpu, REGS
 
        // handle privops masked as illops? and breaks (6)
        if (isrcode != 1 && isrcode != 2 && isrcode != 0 && isrcode != 6) {
-               printf("priv_emulate: isrcode != 0 or 1 or 2\n");
-               printf("priv_emulate: returning ILLOP, not implemented!\n");
+               printk("priv_emulate: isrcode != 0 or 1 or 2\n");
+               printk("priv_emulate: returning ILLOP, not implemented!\n");
                while (1) ;
                return IA64_ILLOP_FAULT;
        }
@@ -777,7 +777,7 @@ IA64FAULT priv_emulate(VCPU * vcpu, REGS
                (void)vcpu_increment_iip(vcpu);
        }
        if (fault == IA64_ILLOP_FAULT)
-               printf("priv_emulate: priv_handle_op fails, "
+               printk("priv_emulate: priv_handle_op fails, "
                       "isr=0x%lx iip=%lx\n", isr, regs->cr_iip);
        return fault;
 }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/regionreg.c
--- a/xen/arch/ia64/xen/regionreg.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/regionreg.c     Tue Oct 24 11:21:48 2006 -0600
@@ -106,7 +106,7 @@ void init_rid_allocator (void)
        /* Due to RID mangling, we expect 24 RID bits!
           This test should be removed if RID mangling is removed/modified.  */
        if (implemented_rid_bits != 24) {
-               printf ("RID mangling expected 24 RID bits, got only %d!\n",
+               printk ("RID mangling expected 24 RID bits, got only %d!\n",
                        implemented_rid_bits);
                BUG();
        }
@@ -117,14 +117,14 @@ void init_rid_allocator (void)
 
        /* Check for too small values.  */
        if (domain_rid_bits_default < IA64_MIN_IMPL_RID_BITS) {
-               printf ("Default domain rid bits %d is too small, use %d\n",
+               printk ("Default domain rid bits %d is too small, use %d\n",
                        domain_rid_bits_default, IA64_MIN_IMPL_RID_BITS);
                domain_rid_bits_default = IA64_MIN_IMPL_RID_BITS;
        }
 
        log_blocks = (implemented_rid_bits - IA64_MIN_IMPL_RID_BITS);
 
-       printf ("Maximum number of domains: %d; %d RID bits per domain\n",
+       printk ("Maximum number of domains: %d; %d RID bits per domain\n",
                (1 << (implemented_rid_bits - domain_rid_bits_default)) - 1,
                domain_rid_bits_default);
        
@@ -185,7 +185,7 @@ int allocate_rid_range(struct domain *d,
        d->arch.metaphysical_rr0 = allocate_metaphysical_rr(d, 0);
        d->arch.metaphysical_rr4 = allocate_metaphysical_rr(d, 1);
 
-       printf("### domain %p: rid=%x-%x mp_rid=%x\n",
+       printk("### domain %p: rid=%x-%x mp_rid=%x\n",
               d, d->arch.starting_rid, d->arch.ending_rid,
               d->arch.starting_mp_rid);
        
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/tlb_track.c
--- a/xen/arch/ia64/xen/tlb_track.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/tlb_track.c     Tue Oct 24 11:21:48 2006 -0600
@@ -29,7 +29,7 @@
 #define CONFIG_TLB_TRACK_DEBUG
 #ifdef CONFIG_TLB_TRACK_DEBUG
 # define tlb_track_printd(fmt, ...)     \
-    printf("%s:%d " fmt, __func__, __LINE__, ##__VA_ARGS__)
+    printk("%s:%d " fmt, __func__, __LINE__, ##__VA_ARGS__)
 #else
 # define tlb_track_printd(fmt, ...)     do { } while (0)
 #endif
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/vcpu.c  Tue Oct 24 11:21:48 2006 -0600
@@ -199,7 +199,7 @@ IA64FAULT vcpu_set_ar(VCPU * vcpu, u64 r
        else if (reg == 27)
                return IA64_ILLOP_FAULT;
        else if (reg == 24)
-               printf("warning: setting ar.eflg is a no-op; no IA-32 "
+               printk("warning: setting ar.eflg is a no-op; no IA-32 "
                       "support\n");
        else if (reg > 7)
                return IA64_ILLOP_FAULT;
@@ -213,7 +213,7 @@ IA64FAULT vcpu_get_ar(VCPU * vcpu, u64 r
 IA64FAULT vcpu_get_ar(VCPU * vcpu, u64 reg, u64 * val)
 {
        if (reg == 24)
-               printf("warning: getting ar.eflg is a no-op; no IA-32 "
+               printk("warning: getting ar.eflg is a no-op; no IA-32 "
                       "support\n");
        else if (reg > 7)
                return IA64_ILLOP_FAULT;
@@ -337,7 +337,7 @@ IA64FAULT vcpu_set_psr_sm(VCPU * vcpu, u
        }
        if (imm.i) {
                if (vcpu->vcpu_info->evtchn_upcall_mask) {
-//printf("vcpu_set_psr_sm: psr.ic 0->1\n");
+//printk("vcpu_set_psr_sm: psr.ic 0->1\n");
                        enabling_interrupts = 1;
                }
                vcpu->vcpu_info->evtchn_upcall_mask = 0;
@@ -362,7 +362,7 @@ IA64FAULT vcpu_set_psr_sm(VCPU * vcpu, u
                psr.up = 1;
        }
        if (imm.be) {
-               printf("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
+               printk("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
                return IA64_ILLOP_FAULT;
        }
        if (imm.dt)
@@ -437,7 +437,7 @@ IA64FAULT vcpu_set_psr_l(VCPU * vcpu, u6
        else
                vcpu_set_metaphysical_mode(vcpu, TRUE);
        if (newpsr.be) {
-               printf("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
+               printk("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
                return IA64_ILLOP_FAULT;
        }
        if (enabling_interrupts &&
@@ -489,7 +489,7 @@ u64 vcpu_get_ipsr_int_state(VCPU * vcpu,
        u64 dcr = PSCBX(vcpu, dcr);
        PSR psr;
 
-       //printf("*** vcpu_get_ipsr_int_state (0x%016lx)...\n",prevpsr);
+       //printk("*** vcpu_get_ipsr_int_state (0x%016lx)...\n",prevpsr);
        psr.i64 = prevpsr;
        psr.ia64_psr.be = 0;
        if (dcr & IA64_DCR_BE)
@@ -506,7 +506,7 @@ u64 vcpu_get_ipsr_int_state(VCPU * vcpu,
        if (psr.ia64_psr.cpl == 2)
                psr.ia64_psr.cpl = 0;   // !!!! fool domain
        // psr.pk = 1;
-       //printf("returns 0x%016lx...\n",psr.i64);
+       //printk("returns 0x%016lx...\n",psr.i64);
        return psr.i64;
 }
 
@@ -606,7 +606,7 @@ IA64FAULT vcpu_get_iipa(VCPU * vcpu, u64
        u64 val = PSCB(vcpu, iipa);
        // SP entry code does not save iipa yet nor does it get
        //  properly delivered in the pscb
-//     printf("*** vcpu_get_iipa: cr.iipa not fully implemented yet!!\n");
+//     printk("*** vcpu_get_iipa: cr.iipa not fully implemented yet!!\n");
        *pval = val;
        return IA64_NO_FAULT;
 }
@@ -657,7 +657,7 @@ IA64FAULT vcpu_set_pta(VCPU * vcpu, u64 
 IA64FAULT vcpu_set_pta(VCPU * vcpu, u64 val)
 {
        if (val & IA64_PTA_LFMT) {
-               printf("*** No support for VHPT long format yet!!\n");
+               printk("*** No support for VHPT long format yet!!\n");
                return IA64_ILLOP_FAULT;
        }
        if (val & (0x3f << 9))  /* reserved fields */
@@ -714,7 +714,7 @@ IA64FAULT vcpu_set_iipa(VCPU * vcpu, u64
 {
        // SP entry code does not save iipa yet nor does it get
        //  properly delivered in the pscb
-//     printf("*** vcpu_set_iipa: cr.iipa not fully implemented yet!!\n");
+//     printk("*** vcpu_set_iipa: cr.iipa not fully implemented yet!!\n");
        PSCB(vcpu, iipa) = val;
        return IA64_NO_FAULT;
 }
@@ -750,12 +750,12 @@ void vcpu_pend_interrupt(VCPU * vcpu, u6
 void vcpu_pend_interrupt(VCPU * vcpu, u64 vector)
 {
        if (vector & ~0xff) {
-               printf("vcpu_pend_interrupt: bad vector\n");
+               printk("vcpu_pend_interrupt: bad vector\n");
                return;
        }
 
        if (vcpu->arch.event_callback_ip) {
-               printf("Deprecated interface. Move to new event based "
+               printk("Deprecated interface. Move to new event based "
                       "solution\n");
                return;
        }
@@ -814,7 +814,7 @@ u64 vcpu_check_pending_interrupts(VCPU *
        }
        // have a pending,deliverable interrupt... see if it is masked
        bitnum = ia64_fls(bits);
-//printf("XXXXXXX vcpu_check_pending_interrupts: got bitnum=%p...\n",bitnum);
+//printk("XXXXXXX vcpu_check_pending_interrupts: got bitnum=%p...\n",bitnum);
        vector = bitnum + (i * 64);
        mask = 1L << bitnum;
        /* sanity check for guest timer interrupt */
@@ -826,23 +826,23 @@ u64 vcpu_check_pending_interrupts(VCPU *
                        goto check_start;
                }
        }
-//printf("XXXXXXX vcpu_check_pending_interrupts: got vector=%p...\n",vector);
+//printk("XXXXXXX vcpu_check_pending_interrupts: got vector=%p...\n",vector);
        if (*r >= mask) {
                // masked by equal inservice
-//printf("but masked by equal inservice\n");
+//printk("but masked by equal inservice\n");
                return SPURIOUS_VECTOR;
        }
        if (PSCB(vcpu, tpr) & IA64_TPR_MMI) {
                // tpr.mmi is set
-//printf("but masked by tpr.mmi\n");
+//printk("but masked by tpr.mmi\n");
                return SPURIOUS_VECTOR;
        }
        if (((PSCB(vcpu, tpr) & IA64_TPR_MIC) + 15) >= vector) {
                //tpr.mic masks class
-//printf("but masked by tpr.mic\n");
+//printk("but masked by tpr.mic\n");
                return SPURIOUS_VECTOR;
        }
-//printf("returned to caller\n");
+//printk("returned to caller\n");
        return vector;
 }
 
@@ -902,7 +902,7 @@ IA64FAULT vcpu_get_ivr(VCPU * vcpu, u64 
 #if 0
        if (vector == (PSCB(vcpu, itv) & 0xff)) {
                if (!(++count[domid] & ((HEARTBEAT_FREQ * 1024) - 1))) {
-                       printf("Dom%d heartbeat... ticks=%lx,nonticks=%lx\n",
+                       printk("Dom%d heartbeat... ticks=%lx,nonticks=%lx\n",
                               domid, count[domid], nonclockcount[domid]);
                        //count[domid] = 0;
                        //dump_runq();
@@ -916,7 +916,7 @@ IA64FAULT vcpu_get_ivr(VCPU * vcpu, u64 
        // getting ivr has "side effects"
 #ifdef IRQ_DEBUG
        if (firsttime[vector]) {
-               printf("*** First get_ivr on vector=%lu,itc=%lx\n",
+               printk("*** First get_ivr on vector=%lu,itc=%lx\n",
                       vector, ia64_get_itc());
                firsttime[vector] = 0;
        }
@@ -930,7 +930,7 @@ IA64FAULT vcpu_get_ivr(VCPU * vcpu, u64 
 
        i = vector >> 6;
        mask = 1L << (vector & 0x3f);
-//printf("ZZZZZZ vcpu_get_ivr: setting insvc mask for vector %lu\n",vector);
+//printk("ZZZZZZ vcpu_get_ivr: setting insvc mask for vector %lu\n",vector);
        PSCBX(vcpu, insvc[i]) |= mask;
        PSCBX(vcpu, irr[i]) &= ~mask;
        //PSCB(vcpu,pending_interruption)--;
@@ -995,7 +995,7 @@ IA64FAULT vcpu_get_lrr0(VCPU * vcpu, u64
 IA64FAULT vcpu_get_lrr0(VCPU * vcpu, u64 * pval)
 {
        // fix this when setting values other than m-bit is supported
-       printf("vcpu_get_lrr0: Unmasked interrupts unsupported\n");
+       printk("vcpu_get_lrr0: Unmasked interrupts unsupported\n");
        *pval = (1L << 16);
        return IA64_NO_FAULT;
 }
@@ -1003,14 +1003,14 @@ IA64FAULT vcpu_get_lrr1(VCPU * vcpu, u64
 IA64FAULT vcpu_get_lrr1(VCPU * vcpu, u64 * pval)
 {
        // fix this when setting values other than m-bit is supported
-       printf("vcpu_get_lrr1: Unmasked interrupts unsupported\n");
+       printk("vcpu_get_lrr1: Unmasked interrupts unsupported\n");
        *pval = (1L << 16);
        return IA64_NO_FAULT;
 }
 
 IA64FAULT vcpu_set_lid(VCPU * vcpu, u64 val)
 {
-       printf("vcpu_set_lid: Setting cr.lid is unsupported\n");
+       printk("vcpu_set_lid: Setting cr.lid is unsupported\n");
        return IA64_ILLOP_FAULT;
 }
 
@@ -1034,7 +1034,7 @@ IA64FAULT vcpu_set_eoi(VCPU * vcpu, u64 
        for (i = 3; (i >= 0) && !(bits = *p); i--, p--)
                ;
        if (i < 0) {
-               printf("Trying to EOI interrupt when none are in-service.\n");
+               printk("Trying to EOI interrupt when none are in-service.\n");
                return IA64_NO_FAULT;
        }
        bitnum = ia64_fls(bits);
@@ -1046,18 +1046,18 @@ IA64FAULT vcpu_set_eoi(VCPU * vcpu, u64 
        if (!vcpu->vcpu_info->evtchn_upcall_mask) {     // but only if 
enabled...
                // worry about this later... Linux only calls eoi
                // with interrupts disabled
-               printf("Trying to EOI interrupt with interrupts enabled\n");
+               printk("Trying to EOI interrupt with interrupts enabled\n");
        }
        if (vcpu_check_pending_interrupts(vcpu) != SPURIOUS_VECTOR)
                PSCB(vcpu, pending_interruption) = 1;
-//printf("YYYYY vcpu_set_eoi: Successful\n");
+//printk("YYYYY vcpu_set_eoi: Successful\n");
        return IA64_NO_FAULT;
 }
 
 IA64FAULT vcpu_set_lrr0(VCPU * vcpu, u64 val)
 {
        if (!(val & (1L << 16))) {
-               printf("vcpu_set_lrr0: Unmasked interrupts unsupported\n");
+               printk("vcpu_set_lrr0: Unmasked interrupts unsupported\n");
                return IA64_ILLOP_FAULT;
        }
        // no place to save this state but nothing to do anyway
@@ -1067,7 +1067,7 @@ IA64FAULT vcpu_set_lrr1(VCPU * vcpu, u64
 IA64FAULT vcpu_set_lrr1(VCPU * vcpu, u64 val)
 {
        if (!(val & (1L << 16))) {
-               printf("vcpu_set_lrr0: Unmasked interrupts unsupported\n");
+               printk("vcpu_set_lrr0: Unmasked interrupts unsupported\n");
                return IA64_ILLOP_FAULT;
        }
        // no place to save this state but nothing to do anyway
@@ -1158,7 +1158,7 @@ void vcpu_safe_set_itm(unsigned long val
 
        local_irq_save(flags);
        while (1) {
-//printf("*** vcpu_safe_set_itm: Setting itm to %lx, itc=%lx\n",val,now);
+//printk("*** vcpu_safe_set_itm: Setting itm to %lx, itc=%lx\n",val,now);
                ia64_set_itm(val);
                if (val > (now = ia64_get_itc()))
                        break;
@@ -1179,7 +1179,7 @@ void vcpu_set_next_timer(VCPU * vcpu)
         * but it doesn't matter right now */
 
        if (is_idle_domain(vcpu->domain)) {
-//             printf("****** vcpu_set_next_timer called during idle!!\n");
+//             printk("****** vcpu_set_next_timer called during idle!!\n");
                vcpu_safe_set_itm(s);
                return;
        }
@@ -1198,7 +1198,7 @@ IA64FAULT vcpu_set_itm(VCPU * vcpu, u64 
        //UINT now = ia64_get_itc();
 
        //if (val < now) val = now + 1000;
-//printf("*** vcpu_set_itm: called with %lx\n",val);
+//printk("*** vcpu_set_itm: called with %lx\n",val);
        PSCBX(vcpu, domain_itm) = val;
        vcpu_set_next_timer(vcpu);
        return IA64_NO_FAULT;
@@ -1210,8 +1210,8 @@ IA64FAULT vcpu_set_itc(VCPU * vcpu, u64 
 #ifdef DISALLOW_SETTING_ITC_FOR_NOW
        static int did_print;
        if (!did_print) {
-               printf("vcpu_set_itc: Setting ar.itc is currently disabled\n");
-               printf("(this message is only displayed one)\n");
+               printk("vcpu_set_itc: Setting ar.itc is currently disabled\n");
+               printk("(this message is only displayed one)\n");
                did_print = 1;
        }
 #else
@@ -1224,7 +1224,7 @@ IA64FAULT vcpu_set_itc(VCPU * vcpu, u64 
 
        local_irq_disable();
        if (olditm) {
-               printf("**** vcpu_set_itc(%lx): vitm changed to %lx\n", val,
+               printk("**** vcpu_set_itc(%lx): vitm changed to %lx\n", val,
                       newnow + d);
                PSCBX(vcpu, domain_itm) = newnow + d;
        }
@@ -1248,7 +1248,7 @@ IA64FAULT vcpu_get_itm(VCPU * vcpu, u64 
 IA64FAULT vcpu_get_itm(VCPU * vcpu, u64 * pval)
 {
        //FIXME: Implement this
-       printf("vcpu_get_itm: Getting cr.itm is unsupported... continuing\n");
+       printk("vcpu_get_itm: Getting cr.itm is unsupported... continuing\n");
        return IA64_NO_FAULT;
        //return IA64_ILLOP_FAULT;
 }
@@ -1256,7 +1256,7 @@ IA64FAULT vcpu_get_itc(VCPU * vcpu, u64 
 IA64FAULT vcpu_get_itc(VCPU * vcpu, u64 * pval)
 {
        //TODO: Implement this
-       printf("vcpu_get_itc: Getting ar.itc is unsupported\n");
+       printk("vcpu_get_itc: Getting ar.itc is unsupported\n");
        return IA64_ILLOP_FAULT;
 }
 
@@ -1349,7 +1349,7 @@ IA64FAULT vcpu_rfi(VCPU * vcpu)
        psr.ia64_psr.bn = 1;
        //psr.pk = 1;  // checking pkeys shouldn't be a problem but seems broken
        if (psr.ia64_psr.be) {
-               printf("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
+               printk("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
                return IA64_ILLOP_FAULT;
        }
        PSCB(vcpu, incomplete_regframe) = 0;    // is this necessary?
@@ -1416,7 +1416,7 @@ IA64FAULT vcpu_thash(VCPU * vcpu, u64 va
 
 IA64FAULT vcpu_ttag(VCPU * vcpu, u64 vadr, u64 * padr)
 {
-       printf("vcpu_ttag: ttag instruction unsupported\n");
+       printk("vcpu_ttag: ttag instruction unsupported\n");
        return IA64_ILLOP_FAULT;
 }
 
@@ -1730,7 +1730,7 @@ IA64FAULT vcpu_tpa(VCPU * vcpu, u64 vadr
 
 IA64FAULT vcpu_tak(VCPU * vcpu, u64 vadr, u64 * key)
 {
-       printf("vcpu_tak: tak instruction unsupported\n");
+       printk("vcpu_tak: tak instruction unsupported\n");
        return IA64_ILLOP_FAULT;
        // HACK ALERT: tak does a thash for now
        //return vcpu_thash(vcpu,vadr,key);
@@ -1781,7 +1781,7 @@ IA64FAULT vcpu_set_pmc(VCPU * vcpu, u64 
        // TODO: Should set Logical CPU state, not just physical
        // NOTE: Writes to unimplemented PMC registers are discarded
 #ifdef DEBUG_PFMON
-       printf("vcpu_set_pmc(%x,%lx)\n", reg, val);
+       printk("vcpu_set_pmc(%x,%lx)\n", reg, val);
 #endif
        ia64_set_pmc(reg, val);
        return IA64_NO_FAULT;
@@ -1792,7 +1792,7 @@ IA64FAULT vcpu_set_pmd(VCPU * vcpu, u64 
        // TODO: Should set Logical CPU state, not just physical
        // NOTE: Writes to unimplemented PMD registers are discarded
 #ifdef DEBUG_PFMON
-       printf("vcpu_set_pmd(%x,%lx)\n", reg, val);
+       printk("vcpu_set_pmd(%x,%lx)\n", reg, val);
 #endif
        ia64_set_pmd(reg, val);
        return IA64_NO_FAULT;
@@ -1803,7 +1803,7 @@ IA64FAULT vcpu_get_pmc(VCPU * vcpu, u64 
        // NOTE: Reads from unimplemented PMC registers return zero
        u64 val = (u64) ia64_get_pmc(reg);
 #ifdef DEBUG_PFMON
-       printf("%lx=vcpu_get_pmc(%x)\n", val, reg);
+       printk("%lx=vcpu_get_pmc(%x)\n", val, reg);
 #endif
        *pval = val;
        return IA64_NO_FAULT;
@@ -1814,7 +1814,7 @@ IA64FAULT vcpu_get_pmd(VCPU * vcpu, u64 
        // NOTE: Reads from unimplemented PMD registers return zero
        u64 val = (u64) ia64_get_pmd(reg);
 #ifdef DEBUG_PFMON
-       printf("%lx=vcpu_get_pmd(%x)\n", val, reg);
+       printk("%lx=vcpu_get_pmd(%x)\n", val, reg);
 #endif
        *pval = val;
        return IA64_NO_FAULT;
@@ -2061,7 +2061,7 @@ IA64FAULT vcpu_itr_d(VCPU * vcpu, u64 sl
        vcpu_purge_tr_entry(&PSCBX(vcpu, dtlb));
 
        trp = &PSCBX(vcpu, dtrs[slot]);
-//printf("***** itr.d: setting slot %d: ifa=%p\n",slot,ifa);
+//printk("***** itr.d: setting slot %d: ifa=%p\n",slot,ifa);
        vcpu_set_tr_entry(trp, pte, itir, ifa);
        vcpu_quick_region_set(PSCBX(vcpu, dtr_regions), ifa);
 
@@ -2088,7 +2088,7 @@ IA64FAULT vcpu_itr_i(VCPU * vcpu, u64 sl
        vcpu_purge_tr_entry(&PSCBX(vcpu, itlb));
 
        trp = &PSCBX(vcpu, itrs[slot]);
-//printf("***** itr.i: setting slot %d: ifa=%p\n",slot,ifa);
+//printk("***** itr.i: setting slot %d: ifa=%p\n",slot,ifa);
        vcpu_set_tr_entry(trp, pte, itir, ifa);
        vcpu_quick_region_set(PSCBX(vcpu, itr_regions), ifa);
 
@@ -2171,7 +2171,7 @@ vcpu_itc_no_srlz(VCPU * vcpu, u64 IorD, 
                // FIXME: this is dangerous... vhpt_flush_address ensures these
                // addresses never get flushed.  More work needed if this
                // ever happens.
-//printf("vhpt_insert(%p,%p,%p)\n",vaddr,pte,1L<<logps);
+//printk("vhpt_insert(%p,%p,%p)\n",vaddr,pte,1L<<logps);
                if (logps > PAGE_SHIFT)
                        vhpt_multiple_insert(vaddr, pte, logps);
                else
@@ -2307,7 +2307,7 @@ IA64FAULT vcpu_ptc_ga(VCPU * vcpu, u64 v
        // FIXME: validate not flushing Xen addresses
        // if (Xen address) return(IA64_ILLOP_FAULT);
        // FIXME: ??breaks if domain PAGE_SIZE < Xen PAGE_SIZE
-//printf("######## vcpu_ptc_ga(%p,%p) ##############\n",vadr,addr_range);
+//printk("######## vcpu_ptc_ga(%p,%p) ##############\n",vadr,addr_range);
 
        check_xen_space_overlap("ptc_ga", vadr, addr_range);
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/vhpt.c
--- a/xen/arch/ia64/xen/vhpt.c  Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/vhpt.c  Tue Oct 24 11:21:48 2006 -0600
@@ -109,7 +109,7 @@ void vhpt_multiple_insert(unsigned long 
                //  only a few times/second, so OK for now.
                //  An alternate solution would be to just insert the one
                //  16KB in the vhpt (but with the full mapping)?
-               //printf("vhpt_multiple_insert: logps-PAGE_SHIFT==%d,"
+               //printk("vhpt_multiple_insert: logps-PAGE_SHIFT==%d,"
                        //"va=%p, pa=%p, pa-masked=%p\n",
                        //logps-PAGE_SHIFT,vaddr,pte&_PFN_MASK,
                        //(pte&_PFN_MASK)&~mask);
@@ -142,7 +142,7 @@ void vhpt_init(void)
                panic("vhpt_init: bad VHPT alignment!\n");
        __get_cpu_var(vhpt_paddr) = paddr;
        __get_cpu_var(vhpt_pend) = paddr + (1 << VHPT_SIZE_LOG2) - 1;
-       printf("vhpt_init: vhpt paddr=0x%lx, end=0x%lx\n",
+       printk("vhpt_init: vhpt paddr=0x%lx, end=0x%lx\n",
                paddr, __get_cpu_var(vhpt_pend));
        vhpt_erase(paddr);
        // we don't enable VHPT here.
@@ -336,7 +336,7 @@ void domain_flush_vtlb_range (struct dom
 #if 0
        // this only seems to occur at shutdown, but it does occur
        if ((!addr_range) || addr_range & (addr_range - 1)) {
-               printf("vhpt_flush_address: weird range, spinning...\n");
+               printk("vhpt_flush_address: weird range, spinning...\n");
                while(1);
        }
 #endif
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/xencomm.c
--- a/xen/arch/ia64/xen/xencomm.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/xencomm.c       Tue Oct 24 11:21:48 2006 -0600
@@ -92,7 +92,7 @@ xencomm_copy_from_guest(
     unsigned int i = 0;
 
     if (xencomm_debug)
-        printf("xencomm_copy_from_guest: from=%lx+%u n=%u\n",
+        printk("xencomm_copy_from_guest: from=%lx+%u n=%u\n",
                (unsigned long)from, skip, n);
 
     if (XENCOMM_IS_INLINE(from)) {
@@ -158,7 +158,7 @@ xencomm_copy_from_guest(
            int res;
 
             if (xencomm_debug > 1)
-                printf ("src_paddr=%lx i=%d, skip=%d\n",
+                printk ("src_paddr=%lx i=%d, skip=%d\n",
                         src_paddr, i, chunk_skip);
 
             res = xencomm_copy_chunk_from((unsigned long)to + to_pos,
@@ -233,7 +233,7 @@ xencomm_copy_to_guest(
     unsigned int i = 0;
 
     if (xencomm_debug)
-        printf ("xencomm_copy_to_guest: to=%lx+%u n=%u\n",
+        printk ("xencomm_copy_to_guest: to=%lx+%u n=%u\n",
                 (unsigned long)to, skip, n);
 
     if (XENCOMM_IS_INLINE(to)) {
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/xenmisc.c
--- a/xen/arch/ia64/xen/xenmisc.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/xenmisc.c       Tue Oct 24 11:21:48 2006 -0600
@@ -179,13 +179,13 @@ void panic_domain(struct pt_regs *regs, 
        char buf[256];
        struct vcpu *v = current;
 
-       printf("$$$$$ PANIC in domain %d (k6=0x%lx): ",
+       printk("$$$$$ PANIC in domain %d (k6=0x%lx): ",
                v->domain->domain_id,
                __get_cpu_var(cpu_kr)._kr[IA64_KR_CURRENT]);
        va_start(args, fmt);
        (void)vsnprintf(buf, sizeof(buf), fmt, args);
        va_end(args);
-       printf(buf);
+       printk(buf);
        if (regs) show_registers(regs);
        if (regs) {
                debugger_trap_fatal(0 /* don't care */, regs);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/xensetup.c      Tue Oct 24 11:21:48 2006 -0600
@@ -389,13 +389,13 @@ void start_kernel(void)
     /* first find highest page frame number */
     max_page = 0;
     efi_memmap_walk(find_max_pfn, &max_page);
-    printf("find_memory: efi_memmap_walk returns max_page=%lx\n",max_page);
+    printk("find_memory: efi_memmap_walk returns max_page=%lx\n",max_page);
     efi_print();
 
     xen_heap_start = memguard_init(ia64_imva(&_end));
-    printf("Before xen_heap_start: %p\n", xen_heap_start);
+    printk("Before xen_heap_start: %p\n", xen_heap_start);
     xen_heap_start = __va(init_boot_allocator(__pa(xen_heap_start)));
-    printf("After xen_heap_start: %p\n", xen_heap_start);
+    printk("After xen_heap_start: %p\n", xen_heap_start);
 
     efi_memmap_walk(filter_rsvd_memory, init_boot_pages);
     efi_memmap_walk(xen_count_pages, &nr_pages);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/ia64/xen/xentime.c
--- a/xen/arch/ia64/xen/xentime.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/ia64/xen/xentime.c       Tue Oct 24 11:21:48 2006 -0600
@@ -115,7 +115,7 @@ xen_timer_interrupt (int irq, void *dev_
 #ifdef HEARTBEAT_FREQ
        static long count = 0;
        if (!(++count & ((HEARTBEAT_FREQ*1024)-1))) {
-               printf("Heartbeat... iip=%p\n", /*",psr.i=%d,pend=%d\n", */
+               printk("Heartbeat... iip=%p\n", /*",psr.i=%d,pend=%d\n", */
                        regs->cr_iip /*,
                        !current->vcpu_info->evtchn_upcall_mask,
                        VCPU(current,pending_interruption) */);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/powerpc/backtrace.c
--- a/xen/arch/powerpc/backtrace.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/powerpc/backtrace.c      Tue Oct 24 11:21:48 2006 -0600
@@ -93,13 +93,13 @@ static void xmon_print_symbol(unsigned l
        const char *name = NULL;
        unsigned long offset, size;
 
-       printf(REG, address);
+       printk(REG, address);
 
     name = symbols_lookup(address, &size, &offset, namebuf);
        if (name) {
-               printf("%s%s+%#lx/%#lx", mid, name, offset, size);
+               printk("%s%s+%#lx/%#lx", mid, name, offset, size);
        }
-       printf("%s", after);
+       printk("%s", after);
 }
 
 static void backtrace(
@@ -114,13 +114,13 @@ static void backtrace(
        do {
                if (sp > xenheap_phys_end) {
                        if (sp != 0)
-                               printf("SP (%lx) is not in xen space\n", sp);
+                               printk("SP (%lx) is not in xen space\n", sp);
                        break;
                }
 
                if (!mread(sp + LRSAVE_OFFSET, &ip, sizeof(unsigned long))
                    || !mread(sp, &newsp, sizeof(unsigned long))) {
-                       printf("Couldn't read stack frame at %lx\n", sp);
+                       printk("Couldn't read stack frame at %lx\n", sp);
                        break;
                }
 
@@ -147,17 +147,17 @@ static void backtrace(
                                printip = 0;
                        } else if (lr < xenheap_phys_end
                        && !(fnstart <= lr && lr < fnend)) {
-                               printf("[link register   ] ");
+                               printk("[link register   ] ");
                                xmon_print_symbol(lr, " ", "\n");
                        }
                        if (printip) {
-                               printf("["REG"] ", sp);
+                               printk("["REG"] ", sp);
                                xmon_print_symbol(ip, " ", " (unreliable)\n");
                        }
                        pc = lr = 0;
 
                } else {
-                       printf("["REG"] ", sp);
+                       printk("["REG"] ", sp);
                        xmon_print_symbol(ip, " ", "\n");
                }
 
@@ -167,11 +167,11 @@ static void backtrace(
                    && marker == REG_FRAME_MARKER) {
                        if (mread(sp + REGS_OFFSET, &regs, sizeof(regs))
                            != sizeof(regs)) {
-                               printf("Couldn't read registers at %lx\n",
+                               printk("Couldn't read registers at %lx\n",
                                       sp + REGS_OFFSET);
                                break;
                        }
-            printf("--- Exception: %x %s at ", regs.entry_vector,
+            printk("--- Exception: %x %s at ", regs.entry_vector,
                               getvecname(TRAP(&regs)));
                        pc = regs.pc;
                        lr = regs.lr;
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/powerpc/domain.c
--- a/xen/arch/powerpc/domain.c Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/powerpc/domain.c Tue Oct 24 11:21:48 2006 -0600
@@ -97,14 +97,14 @@ void arch_domain_destroy(struct domain *
 
 void machine_halt(void)
 {
-    printf("machine_halt called: spinning....\n");
+    printk("machine_halt called: spinning....\n");
     console_start_sync();
     while(1);
 }
 
 void machine_restart(char * __unused)
 {
-    printf("machine_restart called: spinning....\n");
+    printk("machine_restart called: spinning....\n");
     console_start_sync();
     while(1);
 }
@@ -134,7 +134,7 @@ int arch_set_info_guest(struct vcpu *v, 
 { 
     memcpy(&v->arch.ctxt, &c->user_regs, sizeof(c->user_regs));
 
-    printf("Domain[%d].%d: initializing\n",
+    printk("Domain[%d].%d: initializing\n",
            v->domain->domain_id, v->vcpu_id);
 
     if (v->domain->arch.htab.order == 0)
@@ -186,7 +186,7 @@ void context_switch(struct vcpu *prev, s
     unsigned int cpu = smp_processor_id();
 
 #if 0
-    printf("%s: dom %x to dom %x\n", __func__, prev->domain->domain_id,
+    printk("%s: dom %x to dom %x\n", __func__, prev->domain->domain_id,
             next->domain->domain_id);
 #endif
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/powerpc/of-devwalk.c
--- a/xen/arch/powerpc/of-devwalk.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/powerpc/of-devwalk.c     Tue Oct 24 11:21:48 2006 -0600
@@ -35,7 +35,7 @@ void ofd_prop_print(
     if ( path[0] == '/' && path[1] == '\0' ) {
         path = "";
     }
-    printf("%s: %s/%s: 0x%lx\n", head, path,  name, sz);
+    printk("%s: %s/%s: 0x%lx\n", head, path,  name, sz);
 
 #define DEBUG_PROP
 #ifdef DEBUG_PROP
@@ -56,24 +56,24 @@ void ofd_prop_print(
     }
 
     if ( isstr > 0 ) {
-        printf("%s: \t%s\n", head, b);
+        printk("%s: \t%s\n", head, b);
     } else if ( sz != 0 ) {
-        printf("%s: \t0x", head);
+        printk("%s: \t0x", head);
 
         for ( i = 0; i < sz; i++ ) {
             if ( (i % 4) == 0 && i != 0 ) {
                 if ( (i % 16) == 0 && i != 0 ) {
-                    printf("\n%s: \t0x", head);
+                    printk("\n%s: \t0x", head);
                 } else {
-                    printf(" 0x");
+                    printk(" 0x");
                 }
             }
             if (b[i] < 0x10) {
-                printf("0");
+                printk("0");
             }
-            printf("%x", b[i]);
+            printk("%x", b[i]);
         }
-        printf("\n");
+        printk("\n");
     }
 #else
     (void)prop;
@@ -95,7 +95,7 @@ void ofd_dump_props(void *mem, ofdn_t n,
     }
 
     if (dump & OFD_DUMP_NAMES) {
-        printf("of_walk: %s: phandle 0x%x\n", path, n);
+        printk("of_walk: %s: phandle 0x%x\n", path, n);
     }
 
     p = ofd_nextprop(mem, n, NULL, name);
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/powerpc/powerpc64/domain.c
--- a/xen/arch/powerpc/powerpc64/domain.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/powerpc/powerpc64/domain.c       Tue Oct 24 11:21:48 2006 -0600
@@ -112,7 +112,7 @@ void save_segments(struct vcpu *v)
         slb_entry[i].slb_esid = esid;
 #ifdef SLB_DEBUG
         if (vsid != 0) {
-            printf("%s: DOM[0x%x]: S%02d: 0x%016lx 0x%016lx\n",
+            printk("%s: DOM[0x%x]: S%02d: 0x%016lx 0x%016lx\n",
                     __func__, v->domain->domain_id, i, vsid, esid);
         }
 #endif
@@ -146,7 +146,7 @@ void load_segments(struct vcpu *v)
 
 #ifdef SLB_DEBUG
         if (vsid != 0) {
-            printf("%s: DOM[0x%x]: R%02d: 0x%016lx 0x%016lx\n",
+            printk("%s: DOM[0x%x]: R%02d: 0x%016lx 0x%016lx\n",
                     __func__, v->domain->domain_id, i, vsid, esid);
         }
 #endif
@@ -173,6 +173,6 @@ void dump_segments(int valid)
 
         if (valid && !(esid & SLB_ESID_VALID))
             continue;
-        printf("S%02d: 0x%016lx 0x%016lx\n", i, vsid, esid);
+        printk("S%02d: 0x%016lx 0x%016lx\n", i, vsid, esid);
     }
 }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/boot/x86_32.S
--- a/xen/arch/x86/boot/x86_32.S        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/boot/x86_32.S        Tue Oct 24 11:21:48 2006 -0600
@@ -185,7 +185,7 @@ ignore_int:
         mov     %eax,%ds
         mov     %eax,%es
         pushl   $int_msg
-        call    printf
+        call    printk
 1:      jmp     1b
 
 /*** STACK LOCATION ***/
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/boot/x86_64.S
--- a/xen/arch/x86/boot/x86_64.S        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/boot/x86_64.S        Tue Oct 24 11:21:48 2006 -0600
@@ -186,7 +186,7 @@ ignore_int:
         cld
         leaq    int_msg(%rip),%rdi
         xorl    %eax,%eax
-        call    printf
+        call    printk
 1:      jmp     1b
 
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/domain.c     Tue Oct 24 11:21:48 2006 -0600
@@ -378,6 +378,7 @@ arch_do_vcpu_op(
     case VCPUOP_register_runstate_memory_area:
     {
         struct vcpu_register_runstate_memory_area area;
+        struct vcpu_runstate_info runstate;
 
         rc = -EFAULT;
         if ( copy_from_guest(&area, arg, 1) )
@@ -390,8 +391,15 @@ arch_do_vcpu_op(
         v->runstate_guest = area.addr.v;
 
         if ( v == current )
+        {
             __copy_to_user(v->runstate_guest, &v->runstate,
                            sizeof(v->runstate));
+        }
+        else
+        {
+            vcpu_runstate_get(v, &runstate);
+            __copy_to_user(v->runstate_guest, &runstate, sizeof(runstate));
+        }
 
         break;
     }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/hvm.c    Tue Oct 24 11:21:48 2006 -0600
@@ -237,13 +237,18 @@ void hvm_do_resume(struct vcpu *v)
     }
 
     p = &get_vio(v->domain, v->vcpu_id)->vp_ioreq;
-    wait_on_xen_event_channel(v->arch.hvm.xen_port,
+    wait_on_xen_event_channel(v->arch.hvm_vcpu.xen_port,
                               p->state != STATE_IOREQ_READY &&
                               p->state != STATE_IOREQ_INPROCESS);
-    if ( p->state == STATE_IORESP_READY )
+    switch ( p->state )
+    {
+    case STATE_IORESP_READY:
         hvm_io_assist(v);
-    if ( p->state != STATE_INVALID ) {
-        printf("Weird HVM iorequest state %d.\n", p->state);
+        break;
+    case STATE_INVALID:
+        break;
+    default:
+        printk("Weird HVM iorequest state %d.\n", p->state);
         domain_crash(v->domain);
     }
 }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/io.c
--- a/xen/arch/x86/hvm/io.c     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/io.c     Tue Oct 24 11:21:48 2006 -0600
@@ -723,7 +723,7 @@ void hvm_io_assist(struct vcpu *v)
     vio = get_vio(v->domain, v->vcpu_id);
 
     if ( vio == 0 ) {
-        printf("bad shared page: %lx\n", (unsigned long)vio);
+        printk("bad shared page: %lx\n", (unsigned long)vio);
         domain_crash_synchronous();
     }
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/platform.c
--- a/xen/arch/x86/hvm/platform.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/platform.c       Tue Oct 24 11:21:48 2006 -0600
@@ -727,7 +727,8 @@ static void hvm_send_assist_req(struct v
         domain_crash(v->domain);
         return;
     }
-    wmb();
+
+    prepare_wait_on_xen_event_channel(v->arch.hvm_vcpu.xen_port);
     p->state = STATE_IOREQ_READY;
     notify_via_xen_event_channel(v->arch.hvm_vcpu.xen_port);
 }
@@ -740,7 +741,8 @@ void send_pio_req(unsigned long port, un
     ioreq_t *p;
 
     if ( size == 0 || count == 0 ) {
-        printf("null pio request? port %lx, count %lx, size %d, value %lx, dir 
%d, pvalid %d.\n",
+        printk("null pio request? port %lx, count %lx, "
+               "size %d, value %lx, dir %d, pvalid %d.\n",
                port, count, size, value, dir, pvalid);
     }
 
@@ -793,7 +795,8 @@ static void send_mmio_req(unsigned char 
     ioreq_t *p;
 
     if ( size == 0 || count == 0 ) {
-        printf("null mmio request? type %d, gpa %lx, count %lx, size %d, value 
%lx, dir %d, pvalid %d.\n",
+        printk("null mmio request? type %d, gpa %lx, "
+               "count %lx, size %d, value %lx, dir %d, pvalid %d.\n",
                type, gpa, count, size, value, dir, pvalid);
     }
 
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/svm/intr.c
--- a/xen/arch/x86/hvm/svm/intr.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/svm/intr.c       Tue Oct 24 11:21:48 2006 -0600
@@ -59,7 +59,7 @@ static inline int svm_inject_extint(stru
     intr.fields.prio = 0xF;
     intr.fields.ign_tpr = 1;
     vmcb->vintr = intr;
-//  printf( "IRQ = %d\n", trap );
+
     return 0;
 }
     
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/svm/svm.c        Tue Oct 24 11:21:48 2006 -0600
@@ -1021,7 +1021,7 @@ static void svm_do_general_protection_fa
     error_code = vmcb->exitinfo1;
 
     if (vmcb->idtr.limit == 0) {
-        printf("Huh? We got a GP Fault with an invalid IDTR!\n");
+        printk("Huh? We got a GP Fault with an invalid IDTR!\n");
         svm_dump_vmcb(__func__, vmcb);
         svm_dump_regs(__func__, regs);
         svm_dump_inst(vmcb->rip);
@@ -2295,7 +2295,7 @@ static int svm_do_vmmcall(struct vcpu *v
         /* VMMCALL sanity check */
         if ( vmcb->cpl > get_vmmcall_cpl(regs->edi) )
         {
-            printf("VMMCALL CPL check failed\n");
+            printk("VMMCALL CPL check failed\n");
             return -1;
         }
 
@@ -2305,7 +2305,7 @@ static int svm_do_vmmcall(struct vcpu *v
         case VMMCALL_RESET_TO_REALMODE:
             if ( svm_do_vmmcall_reset_to_realmode(v, regs) )
             {
-                printf("svm_do_vmmcall_reset_to_realmode() failed\n");
+                printk("svm_do_vmmcall_reset_to_realmode() failed\n");
                 return -1;
             }
             /* since we just reset the VMCB, return without adjusting
@@ -2313,7 +2313,7 @@ static int svm_do_vmmcall(struct vcpu *v
             return 0;
 
         case VMMCALL_DEBUG:
-            printf("DEBUG features not implemented yet\n");
+            printk("DEBUG features not implemented yet\n");
             break;
         default:
             break;
@@ -2344,16 +2344,16 @@ void svm_dump_inst(unsigned long eip)
     if (hvm_copy_from_guest_virt(opcode, ptr, sizeof(opcode)) == 0)
         len = sizeof(opcode);
 
-    printf("Code bytes around(len=%d) %lx:", len, eip);
+    printk("Code bytes around(len=%d) %lx:", len, eip);
     for (i = 0; i < len; i++)
     {
         if ((i & 0x0f) == 0)
-            printf("\n%08lx:", ptr+i);
-
-        printf("%02x ", opcode[i]);
-    }
-
-    printf("\n");
+            printk("\n%08lx:", ptr+i);
+
+        printk("%02x ", opcode[i]);
+    }
+
+    printk("\n");
 }
 
 
@@ -2363,7 +2363,7 @@ void svm_dump_regs(const char *from, str
     struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb;
     unsigned long pt = v->arch.hvm_vcpu.hw_cr3;
 
-    printf("%s: guest registers from %s:\n", __func__, from);
+    printk("%s: guest registers from %s:\n", __func__, from);
 #if defined (__x86_64__)
     printk("rax: %016lx   rbx: %016lx   rcx: %016lx\n",
            regs->rax, regs->rbx, regs->rcx);
@@ -2378,15 +2378,15 @@ void svm_dump_regs(const char *from, str
     printk("r15: %016lx   cr0: %016lx   cr3: %016lx\n",
            regs->r15, v->arch.hvm_svm.cpu_shadow_cr0, vmcb->cr3);
 #else
-    printf("eax: %08x, ebx: %08x, ecx: %08x, edx: %08x\n", 
+    printk("eax: %08x, ebx: %08x, ecx: %08x, edx: %08x\n", 
            regs->eax, regs->ebx, regs->ecx, regs->edx);
-    printf("edi: %08x, esi: %08x, ebp: %08x, esp: %08x\n", 
+    printk("edi: %08x, esi: %08x, ebp: %08x, esp: %08x\n", 
            regs->edi, regs->esi, regs->ebp, regs->esp);
-    printf("%s: guest cr0: %lx\n", __func__, 
+    printk("%s: guest cr0: %lx\n", __func__, 
            v->arch.hvm_svm.cpu_shadow_cr0);
-    printf("guest CR3 = %llx\n", vmcb->cr3);
+    printk("guest CR3 = %llx\n", vmcb->cr3);
 #endif
-    printf("%s: pt = %lx\n", __func__, pt);
+    printk("%s: pt = %lx\n", __func__, pt);
 }
 
 
@@ -2395,12 +2395,12 @@ void svm_dump_host_regs(const char *from
     struct vcpu *v = current;
     unsigned long pt = pt = pagetable_get_paddr(v->arch.monitor_table);
     unsigned long cr3, cr0;
-    printf("Host registers at %s\n", from);
+    printk("Host registers at %s\n", from);
 
     __asm__ __volatile__ ("\tmov %%cr0,%0\n"
                           "\tmov %%cr3,%1\n"
                           : "=r" (cr0), "=r"(cr3));
-    printf("%s: pt = %lx, cr3 = %lx, cr0 = %lx\n", __func__, pt, cr3, cr0);
+    printk("%s: pt = %lx, cr3 = %lx, cr0 = %lx\n", __func__, pt, cr3, cr0);
 }
 
 #ifdef SVM_EXTRA_DEBUG
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/svm/vmcb.c
--- a/xen/arch/x86/hvm/svm/vmcb.c       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/svm/vmcb.c       Tue Oct 24 11:21:48 2006 -0600
@@ -408,7 +408,7 @@ void svm_do_launch(struct vcpu *v)
 
 static void svm_dump_sel(char *name, segment_selector_t *s)
 {
-    printf("%s: sel=0x%04x, attr=0x%04x, limit=0x%08x, base=0x%016llx\n", 
+    printk("%s: sel=0x%04x, attr=0x%04x, limit=0x%08x, base=0x%016llx\n", 
            name, s->sel, s->attributes.bytes, s->limit,
            (unsigned long long)s->base);
 }
@@ -416,50 +416,50 @@ static void svm_dump_sel(char *name, seg
 
 void svm_dump_vmcb(const char *from, struct vmcb_struct *vmcb)
 {
-    printf("Dumping guest's current state at %s...\n", from);
-    printf("Size of VMCB = %d, address = %p\n", 
+    printk("Dumping guest's current state at %s...\n", from);
+    printk("Size of VMCB = %d, address = %p\n", 
             (int) sizeof(struct vmcb_struct), vmcb);
 
-    printf("cr_intercepts = 0x%08x dr_intercepts = 0x%08x "
+    printk("cr_intercepts = 0x%08x dr_intercepts = 0x%08x "
            "exception_intercepts = 0x%08x\n", 
            vmcb->cr_intercepts, vmcb->dr_intercepts, 
            vmcb->exception_intercepts);
-    printf("general1_intercepts = 0x%08x general2_intercepts = 0x%08x\n", 
+    printk("general1_intercepts = 0x%08x general2_intercepts = 0x%08x\n", 
            vmcb->general1_intercepts, vmcb->general2_intercepts);
-    printf("iopm_base_pa = %016llx msrpm_base_pa = 0x%016llx tsc_offset = "
+    printk("iopm_base_pa = %016llx msrpm_base_pa = 0x%016llx tsc_offset = "
             "0x%016llx\n", 
            (unsigned long long) vmcb->iopm_base_pa,
            (unsigned long long) vmcb->msrpm_base_pa,
            (unsigned long long) vmcb->tsc_offset);
-    printf("tlb_control = 0x%08x vintr = 0x%016llx interrupt_shadow = "
+    printk("tlb_control = 0x%08x vintr = 0x%016llx interrupt_shadow = "
             "0x%016llx\n", vmcb->tlb_control,
            (unsigned long long) vmcb->vintr.bytes,
            (unsigned long long) vmcb->interrupt_shadow);
-    printf("exitcode = 0x%016llx exitintinfo = 0x%016llx\n", 
+    printk("exitcode = 0x%016llx exitintinfo = 0x%016llx\n", 
            (unsigned long long) vmcb->exitcode,
            (unsigned long long) vmcb->exitintinfo.bytes);
-    printf("exitinfo1 = 0x%016llx exitinfo2 = 0x%016llx \n",
+    printk("exitinfo1 = 0x%016llx exitinfo2 = 0x%016llx \n",
            (unsigned long long) vmcb->exitinfo1,
            (unsigned long long) vmcb->exitinfo2);
-    printf("np_enable = 0x%016llx guest_asid = 0x%03x\n", 
+    printk("np_enable = 0x%016llx guest_asid = 0x%03x\n", 
            (unsigned long long) vmcb->np_enable, vmcb->guest_asid);
-    printf("cpl = %d efer = 0x%016llx star = 0x%016llx lstar = 0x%016llx\n", 
+    printk("cpl = %d efer = 0x%016llx star = 0x%016llx lstar = 0x%016llx\n", 
            vmcb->cpl, (unsigned long long) vmcb->efer,
            (unsigned long long) vmcb->star, (unsigned long long) vmcb->lstar);
-    printf("CR0 = 0x%016llx CR2 = 0x%016llx\n",
+    printk("CR0 = 0x%016llx CR2 = 0x%016llx\n",
            (unsigned long long) vmcb->cr0, (unsigned long long) vmcb->cr2);
-    printf("CR3 = 0x%016llx CR4 = 0x%016llx\n", 
+    printk("CR3 = 0x%016llx CR4 = 0x%016llx\n", 
            (unsigned long long) vmcb->cr3, (unsigned long long) vmcb->cr4);
-    printf("RSP = 0x%016llx  RIP = 0x%016llx\n", 
+    printk("RSP = 0x%016llx  RIP = 0x%016llx\n", 
            (unsigned long long) vmcb->rsp, (unsigned long long) vmcb->rip);
-    printf("RAX = 0x%016llx  RFLAGS=0x%016llx\n",
+    printk("RAX = 0x%016llx  RFLAGS=0x%016llx\n",
            (unsigned long long) vmcb->rax, (unsigned long long) vmcb->rflags);
-    printf("DR6 = 0x%016llx, DR7 = 0x%016llx\n", 
+    printk("DR6 = 0x%016llx, DR7 = 0x%016llx\n", 
            (unsigned long long) vmcb->dr6, (unsigned long long) vmcb->dr7);
-    printf("CSTAR = 0x%016llx SFMask = 0x%016llx\n",
+    printk("CSTAR = 0x%016llx SFMask = 0x%016llx\n",
            (unsigned long long) vmcb->cstar, 
            (unsigned long long) vmcb->sfmask);
-    printf("KernGSBase = 0x%016llx PAT = 0x%016llx \n", 
+    printk("KernGSBase = 0x%016llx PAT = 0x%016llx \n", 
            (unsigned long long) vmcb->kerngsbase,
            (unsigned long long) vmcb->g_pat);
     
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/svm/x86_32/exits.S
--- a/xen/arch/x86/hvm/svm/x86_32/exits.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/svm/x86_32/exits.S       Tue Oct 24 11:21:48 2006 -0600
@@ -139,9 +139,6 @@ ENTRY(svm_asm_do_resume)
 ENTRY(svm_asm_do_resume)
 svm_test_all_events:
         GET_CURRENT(%ebx)
-        pushl %ebx
-        call hvm_do_resume
-        addl $4, %esp
 /*test_all_events:*/
         xorl %ecx,%ecx
         notl %ecx
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/svm/x86_64/exits.S
--- a/xen/arch/x86/hvm/svm/x86_64/exits.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/svm/x86_64/exits.S       Tue Oct 24 11:21:48 2006 -0600
@@ -153,8 +153,6 @@ ENTRY(svm_asm_do_resume)
 ENTRY(svm_asm_do_resume)
 svm_test_all_events:
         GET_CURRENT(%rbx)
-        movq %rbx, %rdi
-        call hvm_do_resume
 /*test_all_events:*/
         cli                             # tests must not race interrupts
 /*test_softirqs:*/
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Tue Oct 24 11:21:48 2006 -0600
@@ -1087,7 +1087,7 @@ static int check_for_null_selector(unsig
     memset(inst, 0, MAX_INST_LEN);
     if ( inst_copy_from_guest(inst, eip, inst_len) != inst_len )
     {
-        printf("check_for_null_selector: get guest instruction failed\n");
+        printk("check_for_null_selector: get guest instruction failed\n");
         domain_crash_synchronous();
     }
 
@@ -1470,7 +1470,7 @@ static int vmx_assist(struct vcpu *v, in
     }
 
  error:
-    printf("Failed to transfer to vmxassist\n");
+    printk("Failed to transfer to vmxassist\n");
     domain_crash_synchronous();
     return 0;
 }
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/vmx/x86_32/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_32/exits.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/vmx/x86_32/exits.S       Tue Oct 24 11:21:48 2006 -0600
@@ -97,9 +97,6 @@ vmx_process_softirqs:
         ALIGN
 ENTRY(vmx_asm_do_vmentry)
         GET_CURRENT(%ebx)
-        pushl %ebx
-        call hvm_do_resume
-        addl $4, %esp
         cli                             # tests must not race interrupts
 
         movl VCPU_processor(%ebx),%eax
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/hvm/vmx/x86_64/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_64/exits.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/hvm/vmx/x86_64/exits.S       Tue Oct 24 11:21:48 2006 -0600
@@ -106,8 +106,6 @@ vmx_process_softirqs:
         ALIGN
 ENTRY(vmx_asm_do_vmentry)
         GET_CURRENT(%rbx)
-        movq %rbx, %rdi
-        call hvm_do_resume
         cli                             # tests must not race interrupts
 
         movl  VCPU_processor(%rbx),%eax
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/setup.c      Tue Oct 24 11:21:48 2006 -0600
@@ -296,7 +296,7 @@ void __init __start_xen(multiboot_info_t
 
     init_console();
 
-    printf("Command line: %s\n", cmdline);
+    printk("Command line: %s\n", cmdline);
 
     /* Check that we have at least one Multiboot module. */
     if ( !(mbi->flags & MBI_MODULES) || (mbi->mods_count == 0) )
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/x86_32/entry.S
--- a/xen/arch/x86/x86_32/entry.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/x86_32/entry.S       Tue Oct 24 11:21:48 2006 -0600
@@ -398,7 +398,7 @@ domain_crash_synchronous_string:
 
 domain_crash_synchronous:
         pushl $domain_crash_synchronous_string
-        call  printf
+        call  printk
         jmp   __domain_crash_synchronous
 
         ALIGN
diff -r aa8ca06d209e -r d246b79986d1 
xen/arch/x86/x86_32/supervisor_mode_kernel.S
--- a/xen/arch/x86/x86_32/supervisor_mode_kernel.S      Tue Oct 24 10:08:30 
2006 -0600
+++ b/xen/arch/x86/x86_32/supervisor_mode_kernel.S      Tue Oct 24 11:21:48 
2006 -0600
@@ -141,5 +141,5 @@ domain_crash_synchronous_string:
 
 domain_crash_synchronous:
         pushl $domain_crash_synchronous_string
-        call  printf
+        call  printk
         jmp   __domain_crash_synchronous
diff -r aa8ca06d209e -r d246b79986d1 xen/arch/x86/x86_64/entry.S
--- a/xen/arch/x86/x86_64/entry.S       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/arch/x86/x86_64/entry.S       Tue Oct 24 11:21:48 2006 -0600
@@ -328,7 +328,7 @@ domain_crash_synchronous:
         # printk(domain_crash_synchronous_string)
         leaq  domain_crash_synchronous_string(%rip),%rdi
         xorl  %eax,%eax
-        call  printf
+        call  printk
         jmp  __domain_crash_synchronous
 
         ALIGN
diff -r aa8ca06d209e -r d246b79986d1 xen/common/sched_sedf.c
--- a/xen/common/sched_sedf.c   Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/common/sched_sedf.c   Tue Oct 24 11:21:48 2006 -0600
@@ -1190,10 +1190,10 @@ static void sedf_dump_domain(struct vcpu
     
 #ifdef SEDF_STATS
     if ( EDOM_INFO(d)->block_time_tot != 0 )
-        printf(" pen=%"PRIu64"%%", (EDOM_INFO(d)->penalty_time_tot * 100) /
+        printk(" pen=%"PRIu64"%%", (EDOM_INFO(d)->penalty_time_tot * 100) /
                EDOM_INFO(d)->block_time_tot);
     if ( EDOM_INFO(d)->block_tot != 0 )
-        printf("\n   blks=%u sh=%u (%u%%) (shc=%u (%u%%) shex=%i "\
+        printk("\n   blks=%u sh=%u (%u%%) (shc=%u (%u%%) shex=%i "\
                "shexsl=%i) l=%u (%u%%) avg: b=%"PRIu64" p=%"PRIu64"",
                EDOM_INFO(d)->block_tot, EDOM_INFO(d)->short_block_tot,
                (EDOM_INFO(d)->short_block_tot * 100) 
@@ -1206,7 +1206,7 @@ static void sedf_dump_domain(struct vcpu
                (EDOM_INFO(d)->block_time_tot) / EDOM_INFO(d)->block_tot,
                (EDOM_INFO(d)->penalty_time_tot) / EDOM_INFO(d)->block_tot);
 #endif
-    printf("\n");
+    printk("\n");
 }
 
 
diff -r aa8ca06d209e -r d246b79986d1 xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/drivers/char/console.c        Tue Oct 24 11:21:48 2006 -0600
@@ -294,7 +294,7 @@ static inline void __putstr(const char *
     }
 }
 
-void printf(const char *fmt, ...)
+void printk(const char *fmt, ...)
 {
     static char   buf[1024];
     static int    start_of_line = 1;
diff -r aa8ca06d209e -r d246b79986d1 xen/include/asm-ia64/config.h
--- a/xen/include/asm-ia64/config.h     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/include/asm-ia64/config.h     Tue Oct 24 11:21:48 2006 -0600
@@ -232,7 +232,7 @@ extern unsigned long loops_per_jiffy;
 extern unsigned long loops_per_jiffy;
 extern char saved_command_line[];
 struct screen_info { };
-#define seq_printf(a,b...) printf(b)
+#define seq_printf(a,b...) printk(b)
 //#define CONFIG_BLK_DEV_INITRD // needed to reserve memory for domain0
 
 #define CONFIG_SHADOW  1
diff -r aa8ca06d209e -r d246b79986d1 xen/include/asm-ia64/vcpu.h
--- a/xen/include/asm-ia64/vcpu.h       Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/include/asm-ia64/vcpu.h       Tue Oct 24 11:21:48 2006 -0600
@@ -200,7 +200,7 @@ static inline s64 vcpu_get_next_timer_ns
        return vcpu_get_next_timer_ns;
 }
 
-#define verbose(a...) do {if (vcpu_verbose) printf(a);} while(0)
+#define verbose(a...) do {if (vcpu_verbose) printk(a);} while(0)
 
 //#define vcpu_quick_region_check(_tr_regions,_ifa) 1
 #define vcpu_quick_region_check(_tr_regions,_ifa)           \
diff -r aa8ca06d209e -r d246b79986d1 xen/include/xen/event.h
--- a/xen/include/xen/event.h   Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/include/xen/event.h   Tue Oct 24 11:21:48 2006 -0600
@@ -70,4 +70,11 @@ void notify_via_xen_event_channel(int lp
         do_softirq();                                                   \
     } while ( 0 )
 
+#define prepare_wait_on_xen_event_channel(port)                         \
+    do {                                                                \
+        set_bit(_VCPUF_blocked_in_xen, &current->vcpu_flags);           \
+        raise_softirq(SCHEDULE_SOFTIRQ);                                \
+        mb(); /* set blocked status /then/ caller does his work */      \
+    } while ( 0 )
+
 #endif /* __XEN_EVENT_H__ */
diff -r aa8ca06d209e -r d246b79986d1 xen/include/xen/lib.h
--- a/xen/include/xen/lib.h     Tue Oct 24 10:08:30 2006 -0600
+++ b/xen/include/xen/lib.h     Tue Oct 24 11:21:48 2006 -0600
@@ -51,8 +51,7 @@ extern void debugtrace_printk(const char
 
 /* Allows us to use '%p' as general-purpose machine-word format char. */
 #define _p(_x) ((void *)(unsigned long)(_x))
-#define printk(_f , _a...) printf( _f , ## _a )
-extern void printf(const char *format, ...)
+extern void printk(const char *format, ...)
     __attribute__ ((format (printf, 1, 2)));
 extern void panic(const char *format, ...)
     __attribute__ ((format (printf, 1, 2)));
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/balloon/common.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/common.h Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,58 @@
+/******************************************************************************
+ * balloon/common.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef __XEN_BALLOON_COMMON_H__
+#define __XEN_BALLOON_COMMON_H__
+
+#define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10))
+
+struct balloon_stats {
+       /* We aim for 'current allocation' == 'target allocation'. */
+       unsigned long current_pages;
+       unsigned long target_pages;
+       /* We may hit the hard limit in Xen. If we do then we remember it. */
+       unsigned long hard_limit;
+       /*
+        * Drivers may alter the memory reservation independently, but they
+        * must inform the balloon driver so we avoid hitting the hard limit.
+        */
+       unsigned long driver_pages;
+       /* Number of pages in high- and low-memory balloons. */
+       unsigned long balloon_low;
+       unsigned long balloon_high;
+};
+
+extern struct balloon_stats balloon_stats;
+#define bs balloon_stats
+
+int balloon_sysfs_init(void);
+void balloon_sysfs_exit(void);
+
+void balloon_set_new_target(unsigned long target);
+
+#endif /* __XEN_BALLOON_COMMON_H__ */
diff -r aa8ca06d209e -r d246b79986d1 
linux-2.6-xen-sparse/drivers/xen/balloon/sysfs.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/sysfs.c  Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,165 @@
+/******************************************************************************
+ * balloon/sysfs.c
+ *
+ * Xen balloon driver - sysfs interfaces.
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation; or, when distributed
+ * separately from the Linux kernel or incorporated into other
+ * software packages, subject to the following license:
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this source file (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy, modify,
+ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <linux/config.h>
+#include <linux/capability.h>
+#include <linux/stat.h>
+#include <linux/sysdev.h>
+#include "common.h"
+
+#define BALLOON_CLASS_NAME "memory"
+
+#define BALLOON_SHOW(name, format, args...)                    \
+       static ssize_t show_##name(struct sys_device *dev,      \
+                                  char *buf)                   \
+       {                                                       \
+               return sprintf(buf, format, ##args);            \
+       }                                                       \
+       static SYSDEV_ATTR(name, S_IRUGO, show_##name, NULL)
+
+BALLOON_SHOW(current_kb, "%lu\n", PAGES2KB(bs.current_pages));
+BALLOON_SHOW(low_kb, "%lu\n", PAGES2KB(bs.balloon_low));
+BALLOON_SHOW(high_kb, "%lu\n", PAGES2KB(bs.balloon_high));
+BALLOON_SHOW(hard_limit_kb,
+            (bs.hard_limit!=~0UL) ? "%lu\n" : "???\n",
+            (bs.hard_limit!=~0UL) ? PAGES2KB(bs.hard_limit) : 0);
+BALLOON_SHOW(driver_kb, "%lu\n", PAGES2KB(bs.driver_pages));
+
+static ssize_t show_target_kb(struct sys_device *dev, char *buf)
+{
+       return sprintf(buf, "%lu\n", PAGES2KB(bs.target_pages));
+}
+
+static ssize_t store_target_kb(struct sys_device *dev,
+                              const char *buf,
+                              size_t count)
+{
+       char memstring[64], *endchar;
+       unsigned long long target_bytes;
+
+       if (!capable(CAP_SYS_ADMIN))
+               return -EPERM;
+       
+       if (count <= 1)
+               return -EBADMSG; /* runt */
+       if (count > sizeof(memstring))
+               return -EFBIG;   /* too long */
+       strcpy(memstring, buf);
+       
+       target_bytes = memparse(memstring, &endchar);
+       balloon_set_new_target(target_bytes >> PAGE_SHIFT);
+       
+       return count;
+}
+
+static SYSDEV_ATTR(target_kb, S_IRUGO | S_IWUSR,
+                  show_target_kb, store_target_kb);
+
+static struct sysdev_attribute *balloon_attrs[] = {
+       &attr_target_kb,
+};
+
+static struct attribute *balloon_info_attrs[] = {
+       &attr_current_kb.attr,
+       &attr_low_kb.attr,
+       &attr_high_kb.attr,
+       &attr_hard_limit_kb.attr,
+       &attr_driver_kb.attr,
+       NULL
+};
+
+static struct attribute_group balloon_info_group = {
+       .name = "info",
+       .attrs = balloon_info_attrs,
+};
+
+static struct sysdev_class balloon_sysdev_class = {
+       set_kset_name(BALLOON_CLASS_NAME),
+};
+
+static struct sys_device balloon_sysdev;
+
+static int register_balloon(struct sys_device *sysdev)
+{
+       int i, error;
+
+       error = sysdev_class_register(&balloon_sysdev_class);
+       if (error)
+               return error;
+
+       sysdev->id = 0;
+       sysdev->cls = &balloon_sysdev_class;
+
+       error = sysdev_register(sysdev);
+       if (error) {
+               sysdev_class_unregister(&balloon_sysdev_class);
+               return error;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(balloon_attrs); i++) {
+               error = sysdev_create_file(sysdev, balloon_attrs[i]);
+               if (error)
+                       goto fail;
+       }
+
+       error = sysfs_create_group(&sysdev->kobj, &balloon_info_group);
+       if (error)
+               goto fail;
+       
+       return 0;
+
+ fail:
+       while (--i >= 0)
+               sysdev_remove_file(sysdev, balloon_attrs[i]);
+       sysdev_unregister(sysdev);
+       sysdev_class_unregister(&balloon_sysdev_class);
+       return error;
+}
+
+static void unregister_balloon(struct sys_device *sysdev)
+{
+       int i;
+
+       sysfs_remove_group(&sysdev->kobj, &balloon_info_group);
+       for (i = 0; i < ARRAY_SIZE(balloon_attrs); i++)
+               sysdev_remove_file(sysdev, balloon_attrs[i]);
+       sysdev_unregister(sysdev);
+       sysdev_class_unregister(&balloon_sysdev_class);
+}
+
+int balloon_sysfs_init(void)
+{
+       return register_balloon(&balloon_sysdev);
+}
+
+void balloon_sysfs_exit(void)
+{
+       unregister_balloon(&balloon_sysdev);
+}
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/hypervisor-rtc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/hypervisor-rtc        Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,143 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 71e2a165aa7f81602c569430b18ba1ea705f0b70
+# Parent  da66691687dfd90c55420cfdf27f55d18cca7810
+[HVM] Move RTC emulation into the hypervisor.
+Signed-off-by: Xiaowei Yang <xiaowei.yang@xxxxxxxxx>
+
+--- ioemu/Makefile.target      Wed Oct 18 18:13:57 2006 +0100
++++ ioemu/Makefile.target      Wed Oct 18 18:35:21 2006 +0100
+@@ -294,7 +294,11 @@ endif
+ endif
+ 
+ # qemu-dm objects
++ifeq ($(ARCH),ia64)
+ LIBOBJS=helper2.o exec-dm.o i8259-dm.o
++else
++LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o
++endif
+ 
+ all: $(PROGS)
+ 
+@@ -354,7 +358,11 @@ ifeq ($(TARGET_BASE_ARCH), i386)
+ ifeq ($(TARGET_BASE_ARCH), i386)
+ # Hardware support
+ VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
++ifeq ($(ARCH),ia64)
+ VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o
++else
++VL_OBJS+= fdc.o serial.o pc.o
++endif
+ VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
+ VL_OBJS+= usb-uhci.o
+ VL_OBJS+= piix4acpi.o
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/target-i386-dm/rtc-dm.c      Wed Oct 18 18:35:21 2006 +0100
+@@ -0,0 +1,107 @@
++/*
++ * QEMU MC146818 RTC emulation
++ * 
++ * Copyright (c) 2003-2004 Fabrice Bellard
++ * 
++ * Permission is hereby granted, free of charge, to any person obtaining a 
copy
++ * of this software and associated documentation files (the "Software"), to 
deal
++ * in the Software without restriction, including without limitation the 
rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
++#include "vl.h"
++
++//#define DEBUG_CMOS
++
++struct RTCState {
++    uint8_t cmos_data[128];
++    uint8_t cmos_index;
++};
++
++void rtc_set_memory(RTCState *s, int addr, int val)
++{
++    if (addr >= 0 && addr <= 127)
++        s->cmos_data[addr] = val;
++}
++
++static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)
++{
++    RTCState *s = opaque;
++
++    if ((addr & 1) == 0) {
++        s->cmos_index = data & 0x7f;
++    } else {
++#ifdef DEBUG_CMOS
++        printf("cmos: write index=0x%02x val=0x%02x\n",
++               s->cmos_index, data);
++#endif        
++        s->cmos_data[s->cmos_index] = data;
++    }
++}
++
++static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
++{
++    RTCState *s = opaque;
++    int ret;
++    if ((addr & 1) == 0) {
++        return 0xff;
++    } else {
++        ret = s->cmos_data[s->cmos_index];
++#ifdef DEBUG_CMOS
++        printf("cmos: read index=0x%02x val=0x%02x\n",
++               s->cmos_index, ret);
++#endif
++        return ret;
++    }
++}
++
++static void rtc_save(QEMUFile *f, void *opaque)
++{
++    RTCState *s = opaque;
++
++    qemu_put_buffer(f, s->cmos_data, 128);
++    qemu_put_8s(f, &s->cmos_index);
++}
++
++static int rtc_load(QEMUFile *f, void *opaque, int version_id)
++{
++    RTCState *s = opaque;
++
++    if (version_id != 1)
++        return -EINVAL;
++
++    qemu_get_buffer(f, s->cmos_data, 128);
++    qemu_get_8s(f, &s->cmos_index);
++
++    return 0;
++}
++
++RTCState *rtc_init(int base, int irq)
++{
++    RTCState *s;
++
++    s = qemu_mallocz(sizeof(RTCState));
++    if (!s)
++        return NULL;
++
++    register_ioport_write(base, 2, 1, cmos_ioport_write, s);
++    register_ioport_read(base, 2, 1, cmos_ioport_read, s);
++
++    register_savevm("mc146818rtc", base, 1, rtc_save, rtc_load, s);
++    return s;
++}
++
++void rtc_set_date(RTCState *s, const struct tm *tm) {}
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/ide-cd-dma
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/ide-cd-dma    Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,21 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 1e8ba8d2117548d4f13b7b438d1e992b1815f580
+# Parent  f247e0b52dda257c0000c9da5a0cdff507b3ced8
+[HVM] Enable DMA mode for CD-ROM IDE ATAPI interface.
+Signed-off-by: Winston Wang <winston.l.wang@xxxxxxxxx
+
+--- ioemu/hw/ide.c     Wed Oct 18 18:37:18 2006 +0100
++++ ioemu/hw/ide.c     Wed Oct 18 18:41:47 2006 +0100
+@@ -557,9 +557,9 @@ static void ide_atapi_identify(IDEState 
+     padstr((uint8_t *)(p + 23), QEMU_VERSION, 8); /* firmware version */
+     padstr((uint8_t *)(p + 27), "QEMU CD-ROM", 40); /* model */
+     put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
+-    put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
++    put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA 
supported */
+     put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
+-    put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
++    put_le16(p + 63, 0x07); /* mdma0-2 supported */
+     put_le16(p + 64, 1); /* PIO modes */
+     put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
+     put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/serial-port-rate-limit
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/serial-port-rate-limit        Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,116 @@
+# HG changeset patch
+# User Steven Smith <ssmith@xxxxxxxxxxxxx>
+# Node ID 1d3f52eb256e3522edc12daca91039b319dbbbe5
+# Parent  b7b653e36d20811831f26bb951ea66dca5854b17
+[HVM] Rate limit guest accesses to the qemu virtual serial port.  This stops
+grub's boot menu from hammering dom0.
+
+Signed-off-by: Steven Smith <sos22@xxxxxxxxx>
+
+--- ioemu/hw/serial.c  Mon Sep 25 16:31:02 2006 +0100
++++ ioemu/hw/serial.c  Mon Sep 25 17:27:18 2006 +0100
+@@ -22,6 +22,9 @@
+  * THE SOFTWARE.
+  */
+ #include "vl.h"
++#include <sys/time.h>
++#include <time.h>
++#include <assert.h>
+ 
+ //#define DEBUG_SERIAL
+ 
+@@ -138,6 +141,67 @@ static void serial_update_parameters(Ser
+     printf("speed=%d parity=%c data=%d stop=%d\n", 
+            speed, parity, data_bits, stop_bits);
+ #endif
++}
++
++/* Rate limit serial requests so that e.g. grub on a serial console
++   doesn't kill dom0.  Simple token bucket.  If we get some actual
++   data from the user, instantly refil the bucket. */
++
++/* How long it takes to generate a token, in microseconds. */
++#define TOKEN_PERIOD 1000
++/* Maximum and initial size of token bucket */
++#define TOKENS_MAX 100000
++
++static int tokens_avail;
++
++static void serial_get_token(void)
++{
++    static struct timeval last_refil_time;
++    static int started;
++
++    assert(tokens_avail >= 0);
++    if (!tokens_avail) {
++      struct timeval delta, now;
++      int generated;
++
++      if (!started) {
++          gettimeofday(&last_refil_time, NULL);
++          tokens_avail = TOKENS_MAX;
++          started = 1;
++          return;
++      }
++    retry:
++      gettimeofday(&now, NULL);
++      delta.tv_sec = now.tv_sec - last_refil_time.tv_sec;
++      delta.tv_usec = now.tv_usec - last_refil_time.tv_usec;
++      if (delta.tv_usec < 0) {
++          delta.tv_usec += 1000000;
++          delta.tv_sec--;
++      }
++      assert(delta.tv_usec >= 0 && delta.tv_sec >= 0);
++      if (delta.tv_usec < TOKEN_PERIOD) {
++          struct timespec ts;
++          /* Wait until at least one token is available. */
++          ts.tv_sec = TOKEN_PERIOD / 1000000;
++          ts.tv_nsec = (TOKEN_PERIOD % 1000000) * 1000;
++          while (nanosleep(&ts, &ts) < 0 && errno == EINTR)
++              ;
++          goto retry;
++      }
++      generated = (delta.tv_sec * 1000000) / TOKEN_PERIOD;
++      generated +=
++          ((delta.tv_sec * 1000000) % TOKEN_PERIOD + delta.tv_usec) / 
TOKEN_PERIOD;
++      assert(generated > 0);
++
++      last_refil_time.tv_usec += (generated * TOKEN_PERIOD) % 1000000;
++      last_refil_time.tv_sec  += last_refil_time.tv_usec / 1000000;
++      last_refil_time.tv_usec %= 1000000;
++      last_refil_time.tv_sec  += (generated * TOKEN_PERIOD) / 1000000;
++      if (generated > TOKENS_MAX)
++          generated = TOKENS_MAX;
++      tokens_avail = generated;
++    }
++    tokens_avail--;
+ }
+ 
+ static void serial_ioport_write(void *opaque, uint32_t addr, uint32_t val)
+@@ -245,9 +309,11 @@ static uint32_t serial_ioport_read(void 
+         ret = s->mcr;
+         break;
+     case 5:
++      serial_get_token();
+         ret = s->lsr;
+         break;
+     case 6:
++      serial_get_token();
+         if (s->mcr & UART_MCR_LOOP) {
+             /* in loopback, the modem output pins are connected to the
+                inputs */
+@@ -296,12 +362,14 @@ static void serial_receive1(void *opaque
+ static void serial_receive1(void *opaque, const uint8_t *buf, int size)
+ {
+     SerialState *s = opaque;
++    tokens_avail = TOKENS_MAX;
+     serial_receive_byte(s, buf[0]);
+ }
+ 
+ static void serial_event(void *opaque, int event)
+ {
+     SerialState *s = opaque;
++    tokens_avail = TOKENS_MAX;
+     if (event == CHR_EVENT_BREAK)
+         serial_receive_break(s);
+ }
diff -r aa8ca06d209e -r d246b79986d1 
tools/ioemu/patches/vnc-listen-specific-interface
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-listen-specific-interface Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,177 @@
+# HG changeset patch
+# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
+# Node ID a95dfbc8dca8ecddcb9be51d78f446b0fa461892
+# Parent  8959876abbe319963974fab21dda7185e0ad84e6
+[HVM/vncserver] Implement a 'vnclisten' option to limit the interface
+that the VNC server from qemu listens on. 
+
+Defaults to only listen on 127.0.0.1
+
+The old behaviour (listen on all interfaces) can be restored, by
+- changing the system-wide default in /etc/xen/xend-config.sxp by adding:
+(vnc-listen '0.0.0.0')
+- changing individual domain config files by adding:
+vnclisten="0.0.0.0"
+
+Also allows specifying the hostname associated with an interface to limit
+to that interface.
+
+Signed-off-by:  Daniel P. Berrange <berrange@xxxxxxxxxx>
+
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c    2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.c 2006-10-24 14:34:28.000000000 +0100
+@@ -122,6 +122,7 @@
+ int nographic;
+ int vncviewer;
+ int vncunused;
++struct sockaddr_in vnclisten_addr;
+ const char* keyboard_layout = NULL;
+ int64_t ticks_per_sec;
+ int boot_device = 'c';
+@@ -2777,10 +2778,22 @@
+     return -1;
+ }
+ 
++int parse_host(struct sockaddr_in *saddr, const char *buf)
++{
++    struct hostent *he;
++
++    if ((he = gethostbyname(buf)) != NULL) {
++        saddr->sin_addr = *(struct in_addr *)he->h_addr;
++    } else {
++        if (!inet_aton(buf, &saddr->sin_addr))
++            return -1;
++    }
++    return 0;
++}
++
+ int parse_host_port(struct sockaddr_in *saddr, const char *str)
+ {
+     char buf[512];
+-    struct hostent *he;
+     const char *p, *r;
+     int port;
+ 
+@@ -2791,14 +2804,8 @@
+     if (buf[0] == '\0') {
+         saddr->sin_addr.s_addr = 0;
+     } else {
+-        if (isdigit(buf[0])) {
+-            if (!inet_aton(buf, &saddr->sin_addr))
+-                return -1;
+-        } else {
+-            if ((he = gethostbyname(buf)) == NULL)
+-                return - 1;
+-            saddr->sin_addr = *(struct in_addr *)he->h_addr;
+-        }
++        if (parse_host(saddr, buf) == -1)
++            return -1;
+     }
+     port = strtol(p, (char **)&r, 0);
+     if (r == p)
+@@ -5344,6 +5351,7 @@
+          "-vnc display    start a VNC server on display\n"
+            "-vncviewer      start a vncviewer process for this domain\n"
+            "-vncunused      bind the VNC server to an unused port\n"
++           "-vnclisten      bind the VNC server to this address\n"
+            "-timeoffset     time offset (in seconds) from local time\n"
+            "-acpi           disable or enable ACPI of HVM domain \n"
+            "\n"
+@@ -5434,6 +5442,7 @@
+     QEMU_OPTION_acpi,
+     QEMU_OPTION_vncviewer,
+     QEMU_OPTION_vncunused,
++    QEMU_OPTION_vnclisten,
+ };
+ 
+ typedef struct QEMUOption {
+@@ -5510,6 +5519,7 @@
+     { "vnc", HAS_ARG, QEMU_OPTION_vnc },
+     { "vncviewer", 0, QEMU_OPTION_vncviewer },
+     { "vncunused", 0, QEMU_OPTION_vncunused },
++    { "vnclisten", HAS_ARG, QEMU_OPTION_vnclisten },
+     
+     /* temporary options */
+     { "usb", 0, QEMU_OPTION_usb },
+@@ -5905,6 +5915,8 @@
+ 
+     nb_nics = 0;
+     /* default mac address of the first network interface */
++
++    memset(&vnclisten_addr.sin_addr, 0, sizeof(vnclisten_addr.sin_addr));
+     
+     /* init debug */
+     sprintf(qemu_dm_logfilename, "/var/log/xen/qemu-dm.%d.log", getpid());
+@@ -6280,6 +6292,9 @@
+                 if (vnc_display == -1)
+                     vnc_display = 0;
+                 break;
++            case QEMU_OPTION_vnclisten:
++                parse_host(&vnclisten_addr, optarg);
++                break;
+             }
+         }
+     }
+@@ -6493,7 +6508,7 @@
+     if (nographic) {
+         dumb_display_init(ds);
+     } else if (vnc_display != -1) {
+-      vnc_display = vnc_display_init(ds, vnc_display, vncunused);
++      vnc_display = vnc_display_init(ds, vnc_display, vncunused, 
&vnclisten_addr);
+       if (vncviewer)
+           vnc_start_viewer(vnc_display);
+     } else {
+Index: ioemu/vl.h
+===================================================================
+--- ioemu.orig/vl.h    2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vl.h 2006-10-24 14:34:22.000000000 +0100
+@@ -37,6 +37,8 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
++#include <sys/socket.h>
++#include <sys/types.h>
+ #include "xenctrl.h"
+ #include "xs.h"
+ #include <xen/hvm/e820.h>
+@@ -785,7 +787,7 @@
+ void cocoa_display_init(DisplayState *ds, int full_screen);
+ 
+ /* vnc.c */
+-int vnc_display_init(DisplayState *ds, int display, int find_unused);
++int vnc_display_init(DisplayState *ds, int display, int find_unused, struct 
sockaddr_in *addr);
+ int vnc_start_viewer(int port);
+ 
+ /* ide.c */
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c   2006-10-24 14:33:46.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:34:22.000000000 +0100
+@@ -1195,9 +1195,8 @@
+     }
+ }
+ 
+-int vnc_display_init(DisplayState *ds, int display, int find_unused)
++int vnc_display_init(DisplayState *ds, int display, int find_unused, struct 
sockaddr_in *addr)
+ {
+-    struct sockaddr_in addr;
+     int reuse_addr, ret;
+     VncState *vs;
+ 
+@@ -1235,11 +1234,10 @@
+     }
+ 
+  retry:
+-    addr.sin_family = AF_INET;
+-    addr.sin_port = htons(5900 + display);
+-    memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
++    addr->sin_family = AF_INET;
++    addr->sin_port = htons(5900 + display);
+ 
+-    if (bind(vs->lsock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
++    if (bind(vs->lsock, (struct sockaddr *)addr, sizeof(struct sockaddr_in)) 
== -1) {
+       if (find_unused && errno == EADDRINUSE) {
+           display++;
+           goto retry;
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-password
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-password  Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,785 @@
+# HG changeset patch
+# User kfraser@xxxxxxxxxxxxxxxxxxxxx
+# Node ID 02506a7443155611d6bbf03e49fbf193e96d24db
+# Parent  328606e0705f0341bebda14cdd17962e463868e8
+[HVM] Implement password authentication of VNC connections.
+
+The specification is as mentioned at
+http://lists.xensource.com/archives/html/xen-devel/2006-09/msg00666.html
+(However, password came to describe plain text)
+
+The difference is follows.
+- protocol_authtype() without the necessity was deleted.
+- The check on the protocol version was added.
+- And, some small modification.
+
+Signed-off-by: Masami Watanabe <masami.watanabe@xxxxxxxxxxxxxx>
+
+--- ioemu/Makefile.target      Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/Makefile.target      Fri Oct 20 09:50:09 2006 +0100
+@@ -406,6 +406,7 @@ VL_OBJS+=sdl.o
+ VL_OBJS+=sdl.o
+ endif
+ VL_OBJS+=vnc.o
++VL_OBJS+=d3des.o
+ ifdef CONFIG_COCOA
+ VL_OBJS+=cocoa.o
+ COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa -framework IOKit
+@@ -464,6 +465,9 @@ sdl.o: sdl.c keymaps.c sdl_keysym.h
+       $(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+ 
+ vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h
++      $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
++
++d3des.o: d3des.c d3des.h
+       $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
+ 
+ sdlaudio.o: sdlaudio.c
+--- ioemu/vl.c Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vl.c Fri Oct 20 09:50:09 2006 +0100
+@@ -170,6 +170,9 @@ time_t timeoffset = 0;
+ 
+ char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
+ extern int domid;
++
++char vncpasswd[64];
++unsigned char challenge[AUTHCHALLENGESIZE];
+ 
+ /***********************************************************/
+ /* x86 ISA bus support */
+@@ -5911,6 +5914,7 @@ int main(int argc, char **argv)
+     vncunused = 0;
+     kernel_filename = NULL;
+     kernel_cmdline = "";
++    *vncpasswd = '\0';
+ #ifndef CONFIG_DM
+ #ifdef TARGET_PPC
+     cdrom_index = 1;
+@@ -6559,6 +6563,10 @@ int main(int argc, char **argv)
+ 
+     init_ioports();
+ 
++    /* read vncpasswd from xenstore */
++    if (0 > xenstore_read_vncpasswd(domid))
++        exit(1);
++
+     /* terminal init */
+     if (nographic) {
+         dumb_display_init(ds);
+--- ioemu/vl.h Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vl.h Fri Oct 20 09:50:09 2006 +0100
+@@ -1211,6 +1211,7 @@ void xenstore_process_event(void *opaque
+ void xenstore_process_event(void *opaque);
+ void xenstore_check_new_media_present(int timeout);
+ void xenstore_write_vncport(int vnc_display);
++int xenstore_read_vncpasswd(int domid);
+ 
+ /* xen_platform.c */
+ void pci_xen_platform_init(PCIBus *bus);
+@@ -1222,4 +1223,7 @@ extern char domain_name[];
+ 
+ void destroy_hvm_domain(void);
+ 
++/* VNC Authentication */
++#define AUTHCHALLENGESIZE 16
++
+ #endif /* VL_H */
+--- ioemu/vnc.c        Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/vnc.c        Fri Oct 20 09:50:09 2006 +0100
+@@ -44,6 +44,7 @@
+ 
+ #include "vnc_keysym.h"
+ #include "keymaps.c"
++#include "d3des.h"
+ 
+ #define XK_MISCELLANY
+ #define XK_LATIN1
+@@ -137,6 +138,9 @@ static void vnc_update_client(void *opaq
+ static void vnc_update_client(void *opaque);
+ static void vnc_client_read(void *opaque);
+ static void framebuffer_set_updated(VncState *vs, int x, int y, int w, int h);
++static int make_challenge(char *random, int size);
++static void set_seed(unsigned int *seedp);
++static void get_random(int len, unsigned char *buf);
+ 
+ #if 0
+ static inline void vnc_set_bit(uint32_t *d, int k)
+@@ -1208,23 +1212,92 @@ static int protocol_client_init(VncState
+     return 0;
+ }
+ 
++static int protocol_response(VncState *vs, char *client_response, size_t len)
++{
++    extern char vncpasswd[64];
++    extern unsigned char challenge[AUTHCHALLENGESIZE];
++    unsigned char cryptchallenge[AUTHCHALLENGESIZE];
++    unsigned char key[8];
++    int passwdlen, i, j;
++
++    memcpy(cryptchallenge, challenge, AUTHCHALLENGESIZE);
++
++    /* Calculate the sent challenge */
++    passwdlen = strlen(vncpasswd);
++    for (i=0; i<8; i++)
++      key[i] = i<passwdlen ? vncpasswd[i] : 0;
++    deskey(key, EN0);
++    for (j = 0; j < AUTHCHALLENGESIZE; j += 8)
++      des(cryptchallenge+j, cryptchallenge+j);
++
++    /* Check the actual response */
++    if (memcmp(cryptchallenge, client_response, AUTHCHALLENGESIZE) != 0) {
++      /* password error */
++      vnc_write_u32(vs, 1);
++      vnc_write_u32(vs, 22);
++      vnc_write(vs, "Authentication failure", 22);
++      vnc_flush(vs);
++      fprintf(stderr, "VNC Password error.\n");
++      vnc_client_error(vs);
++      return 0;
++    }
++
++    vnc_write_u32(vs, 0);
++    vnc_flush(vs);
++
++    vnc_read_when(vs, protocol_client_init, 1);
++
++    return 0;
++}
++
+ static int protocol_version(VncState *vs, char *version, size_t len)
+ {
++    extern char vncpasswd[64];
++    extern unsigned char challenge[AUTHCHALLENGESIZE];
+     char local[13];
+-    int maj, min;
++    int  support, maj, min;
+ 
+     memcpy(local, version, 12);
+     local[12] = 0;
+ 
++    /* protocol version check */
+     if (sscanf(local, "RFB %03d.%03d\n", &maj, &min) != 2) {
++      fprintf(stderr, "Protocol version error.\n");
+       vnc_client_error(vs);
+       return 0;
+     }
+ 
+-    vnc_write_u32(vs, 1); /* None */
+-    vnc_flush(vs);
+-
+-    vnc_read_when(vs, protocol_client_init, 1);
++
++    support = 0;
++    if (maj = 3) {
++      if (min == 3 || min ==4) {
++          support = 1;
++      }
++    }
++
++    if (! support) {
++      fprintf(stderr, "Client uses unsupported protocol version %d.%d.\n",
++              maj, min);
++      vnc_client_error(vs);
++      return 0;
++    }
++
++    if (*vncpasswd == '\0') {
++      /* AuthType is None */
++      vnc_write_u32(vs, 1);
++      vnc_flush(vs);
++      vnc_read_when(vs, protocol_client_init, 1);
++    } else {
++      /* AuthType is VncAuth */
++      vnc_write_u32(vs, 2);
++
++      /* Challenge-Responce authentication */
++      /* Send Challenge */
++      make_challenge(challenge, AUTHCHALLENGESIZE);
++      vnc_write(vs, challenge, AUTHCHALLENGESIZE);
++      vnc_flush(vs);
++      vnc_read_when(vs, protocol_response, AUTHCHALLENGESIZE);
++    }
+ 
+     return 0;
+ }
+@@ -1342,3 +1415,32 @@ int vnc_start_viewer(int port)
+       return pid;
+     }
+ }
++
++unsigned int seed;
++
++static int make_challenge(char *random, int size)
++{
++ 
++    set_seed(&seed);
++    get_random(size, random);
++
++    return 0;
++}
++
++static void set_seed(unsigned int *seedp)
++{
++    *seedp += (unsigned int)(time(NULL)+getpid()+getpid()*987654+rand());
++    srand(*seedp);
++
++    return;
++}
++
++static void get_random(int len, unsigned char *buf)
++{
++    int i;
++
++    for (i=0; i<len; i++)
++      buf[i] = (int) (256.0*rand()/(RAND_MAX+1.0));
++
++    return;
++}
+--- ioemu/xenstore.c   Fri Oct 20 09:32:16 2006 +0100
++++ ioemu/xenstore.c   Fri Oct 20 09:50:09 2006 +0100
+@@ -213,3 +213,54 @@ void xenstore_write_vncport(int display)
+     free(portstr);
+     free(buf);
+ }
++
++int xenstore_read_vncpasswd(int domid)
++{
++    extern char vncpasswd[64];
++    char *buf = NULL, *path, *uuid = NULL, *passwd = NULL;
++    unsigned int i, len, rc = 0;
++
++    if (xsh == NULL) {
++      return -1;
++    }
++
++    path = xs_get_domain_path(xsh, domid);
++    if (path == NULL) {
++      fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid);
++      return -1;
++    }
++
++    pasprintf(&buf, "%s/vm", path);
++    uuid = xs_read(xsh, XBT_NULL, buf, &len);
++    if (uuid == NULL) {
++      fprintf(logfile, "xs_read(): uuid get error. %s.\n", buf);
++      free(path);
++      return -1;
++    }
++
++    pasprintf(&buf, "%s/vncpasswd", uuid);
++    passwd = xs_read(xsh, XBT_NULL, buf, &len);
++    if (passwd == NULL) {
++      fprintf(logfile, "xs_read(): vncpasswd get error. %s.\n", buf);
++      free(uuid);
++      free(path);
++      return rc;
++    }
++
++    for (i=0; i<len && i<63; i++) {
++      vncpasswd[i] = passwd[i];
++      passwd[i] = '\0';
++    }
++    vncpasswd[len] = '\0';
++    pasprintf(&buf, "%s/vncpasswd", uuid);
++    if (xs_write(xsh, XBT_NULL, buf, passwd, len) == 0) {
++      fprintf(logfile, "xs_write() vncpasswd failed.\n");
++      rc = -1;
++    }
++
++    free(passwd);
++    free(uuid);
++    free(path);
++
++    return rc;
++}
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/d3des.c      Fri Oct 20 09:50:09 2006 +0100
+@@ -0,0 +1,434 @@
++/*
++ * This is D3DES (V5.09) by Richard Outerbridge with the double and
++ * triple-length support removed for use in VNC.  Also the bytebit[] array
++ * has been reversed so that the most significant bit in each byte of the
++ * key is ignored, not the least significant.
++ *
++ * These changes are:
++ *  Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.
++ *
++ * This software is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* D3DES (V5.09) -
++ *
++ * A portable, public domain, version of the Data Encryption Standard.
++ *
++ * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
++ * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
++ * code;  Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
++ * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
++ * for humouring me on.
++ *
++ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
++ * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
++ */
++
++#include "d3des.h"
++
++static void scrunch(unsigned char *, unsigned long *);
++static void unscrun(unsigned long *, unsigned char *);
++static void desfunc(unsigned long *, unsigned long *);
++static void cookey(unsigned long *);
++
++static unsigned long KnL[32] = { 0L };
++
++static unsigned short bytebit[8]      = {
++      01, 02, 04, 010, 020, 040, 0100, 0200 };
++
++static unsigned long bigbyte[24] = {
++      0x800000L,      0x400000L,      0x200000L,      0x100000L,
++      0x80000L,       0x40000L,       0x20000L,       0x10000L,
++      0x8000L,        0x4000L,        0x2000L,        0x1000L,
++      0x800L,         0x400L,         0x200L,         0x100L,
++      0x80L,          0x40L,          0x20L,          0x10L,
++      0x8L,           0x4L,           0x2L,           0x1L    };
++
++/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
++
++static unsigned char pc1[56] = {
++      56, 48, 40, 32, 24, 16,  8,      0, 57, 49, 41, 33, 25, 17,
++       9,  1, 58, 50, 42, 34, 26,     18, 10,  2, 59, 51, 43, 35,
++      62, 54, 46, 38, 30, 22, 14,      6, 61, 53, 45, 37, 29, 21,
++      13,  5, 60, 52, 44, 36, 28,     20, 12,  4, 27, 19, 11,  3 };
++
++static unsigned char totrot[16] = {
++      1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
++
++static unsigned char pc2[48] = {
++      13, 16, 10, 23,  0,  4,  2, 27, 14,  5, 20,  9,
++      22, 18, 11,  3, 25,  7, 15,  6, 26, 19, 12,  1,
++      40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
++      43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
++
++void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */
++unsigned char *key;
++int edf;
++{
++      register int i, j, l, m, n;
++      unsigned char pc1m[56], pcr[56];
++      unsigned long kn[32];
++
++      for ( j = 0; j < 56; j++ ) {
++              l = pc1[j];
++              m = l & 07;
++              pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
++              }
++      for( i = 0; i < 16; i++ ) {
++              if( edf == DE1 ) m = (15 - i) << 1;
++              else m = i << 1;
++              n = m + 1;
++              kn[m] = kn[n] = 0L;
++              for( j = 0; j < 28; j++ ) {
++                      l = j + totrot[i];
++                      if( l < 28 ) pcr[j] = pc1m[l];
++                      else pcr[j] = pc1m[l - 28];
++                      }
++              for( j = 28; j < 56; j++ ) {
++                  l = j + totrot[i];
++                  if( l < 56 ) pcr[j] = pc1m[l];
++                  else pcr[j] = pc1m[l - 28];
++                  }
++              for( j = 0; j < 24; j++ ) {
++                      if( pcr[pc2[j]] ) kn[m] |= bigbyte[j];
++                      if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j];
++                      }
++              }
++      cookey(kn);
++      return;
++      }
++
++static void cookey(raw1)
++register unsigned long *raw1;
++{
++      register unsigned long *cook, *raw0;
++      unsigned long dough[32];
++      register int i;
++
++      cook = dough;
++      for( i = 0; i < 16; i++, raw1++ ) {
++              raw0 = raw1++;
++              *cook    = (*raw0 & 0x00fc0000L) << 6;
++              *cook   |= (*raw0 & 0x00000fc0L) << 10;
++              *cook   |= (*raw1 & 0x00fc0000L) >> 10;
++              *cook++ |= (*raw1 & 0x00000fc0L) >> 6;
++              *cook    = (*raw0 & 0x0003f000L) << 12;
++              *cook   |= (*raw0 & 0x0000003fL) << 16;
++              *cook   |= (*raw1 & 0x0003f000L) >> 4;
++              *cook++ |= (*raw1 & 0x0000003fL);
++              }
++      usekey(dough);
++      return;
++      }
++
++void cpkey(into)
++register unsigned long *into;
++{
++      register unsigned long *from, *endp;
++
++      from = KnL, endp = &KnL[32];
++      while( from < endp ) *into++ = *from++;
++      return;
++      }
++
++void usekey(from)
++register unsigned long *from;
++{
++      register unsigned long *to, *endp;
++
++      to = KnL, endp = &KnL[32];
++      while( to < endp ) *to++ = *from++;
++      return;
++      }
++
++void des(inblock, outblock)
++unsigned char *inblock, *outblock;
++{
++      unsigned long work[2];
++
++      scrunch(inblock, work);
++      desfunc(work, KnL);
++      unscrun(work, outblock);
++      return;
++      }
++
++static void scrunch(outof, into)
++register unsigned char *outof;
++register unsigned long *into;
++{
++      *into    = (*outof++ & 0xffL) << 24;
++      *into   |= (*outof++ & 0xffL) << 16;
++      *into   |= (*outof++ & 0xffL) << 8;
++      *into++ |= (*outof++ & 0xffL);
++      *into    = (*outof++ & 0xffL) << 24;
++      *into   |= (*outof++ & 0xffL) << 16;
++      *into   |= (*outof++ & 0xffL) << 8;
++      *into   |= (*outof   & 0xffL);
++      return;
++      }
++
++static void unscrun(outof, into)
++register unsigned long *outof;
++register unsigned char *into;
++{
++      *into++ = (unsigned char)((*outof >> 24) & 0xffL);
++      *into++ = (unsigned char)((*outof >> 16) & 0xffL);
++      *into++ = (unsigned char)((*outof >>  8) & 0xffL);
++      *into++ = (unsigned char)(*outof++       & 0xffL);
++      *into++ = (unsigned char)((*outof >> 24) & 0xffL);
++      *into++ = (unsigned char)((*outof >> 16) & 0xffL);
++      *into++ = (unsigned char)((*outof >>  8) & 0xffL);
++      *into   =  (unsigned char)(*outof        & 0xffL);
++      return;
++      }
++
++static unsigned long SP1[64] = {
++      0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
++      0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
++      0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
++      0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
++      0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
++      0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
++      0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
++      0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
++      0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
++      0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
++      0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
++      0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
++      0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
++      0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
++      0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
++      0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L };
++
++static unsigned long SP2[64] = {
++      0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
++      0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
++      0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
++      0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
++      0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
++      0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
++      0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
++      0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
++      0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
++      0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
++      0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
++      0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
++      0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
++      0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
++      0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
++      0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L };
++
++static unsigned long SP3[64] = {
++      0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
++      0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
++      0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
++      0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
++      0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
++      0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
++      0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
++      0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
++      0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
++      0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
++      0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
++      0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
++      0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
++      0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
++      0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
++      0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L };
++
++static unsigned long SP4[64] = {
++      0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
++      0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
++      0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
++      0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
++      0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
++      0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
++      0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
++      0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
++      0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
++      0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
++      0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
++      0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
++      0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
++      0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
++      0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
++      0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L };
++
++static unsigned long SP5[64] = {
++      0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
++      0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
++      0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
++      0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
++      0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
++      0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
++      0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
++      0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
++      0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
++      0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
++      0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
++      0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
++      0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
++      0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
++      0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
++      0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
++
++static unsigned long SP6[64] = {
++      0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
++      0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
++      0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
++      0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
++      0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
++      0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
++      0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
++      0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
++      0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
++      0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
++      0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
++      0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
++      0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
++      0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
++      0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
++      0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
++
++static unsigned long SP7[64] = {
++      0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
++      0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
++      0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
++      0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
++      0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
++      0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
++      0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
++      0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
++      0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
++      0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
++      0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
++      0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
++      0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
++      0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
++      0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
++      0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
++
++static unsigned long SP8[64] = {
++      0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
++      0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
++      0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
++      0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
++      0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
++      0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
++      0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
++      0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
++      0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
++      0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
++      0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
++      0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
++      0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
++      0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
++      0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
++      0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
++
++static void desfunc(block, keys)
++register unsigned long *block, *keys;
++{
++      register unsigned long fval, work, right, leftt;
++      register int round;
++
++      leftt = block[0];
++      right = block[1];
++      work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
++      right ^= work;
++      leftt ^= (work << 4);
++      work = ((leftt >> 16) ^ right) & 0x0000ffffL;
++      right ^= work;
++      leftt ^= (work << 16);
++      work = ((right >> 2) ^ leftt) & 0x33333333L;
++      leftt ^= work;
++      right ^= (work << 2);
++      work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
++      leftt ^= work;
++      right ^= (work << 8);
++      right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
++      work = (leftt ^ right) & 0xaaaaaaaaL;
++      leftt ^= work;
++      right ^= work;
++      leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
++
++      for( round = 0; round < 8; round++ ) {
++              work  = (right << 28) | (right >> 4);
++              work ^= *keys++;
++              fval  = SP7[ work                & 0x3fL];
++              fval |= SP5[(work >>  8) & 0x3fL];
++              fval |= SP3[(work >> 16) & 0x3fL];
++              fval |= SP1[(work >> 24) & 0x3fL];
++              work  = right ^ *keys++;
++              fval |= SP8[ work                & 0x3fL];
++              fval |= SP6[(work >>  8) & 0x3fL];
++              fval |= SP4[(work >> 16) & 0x3fL];
++              fval |= SP2[(work >> 24) & 0x3fL];
++              leftt ^= fval;
++              work  = (leftt << 28) | (leftt >> 4);
++              work ^= *keys++;
++              fval  = SP7[ work                & 0x3fL];
++              fval |= SP5[(work >>  8) & 0x3fL];
++              fval |= SP3[(work >> 16) & 0x3fL];
++              fval |= SP1[(work >> 24) & 0x3fL];
++              work  = leftt ^ *keys++;
++              fval |= SP8[ work                & 0x3fL];
++              fval |= SP6[(work >>  8) & 0x3fL];
++              fval |= SP4[(work >> 16) & 0x3fL];
++              fval |= SP2[(work >> 24) & 0x3fL];
++              right ^= fval;
++              }
++
++      right = (right << 31) | (right >> 1);
++      work = (leftt ^ right) & 0xaaaaaaaaL;
++      leftt ^= work;
++      right ^= work;
++      leftt = (leftt << 31) | (leftt >> 1);
++      work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
++      right ^= work;
++      leftt ^= (work << 8);
++      work = ((leftt >> 2) ^ right) & 0x33333333L;
++      right ^= work;
++      leftt ^= (work << 2);
++      work = ((right >> 16) ^ leftt) & 0x0000ffffL;
++      leftt ^= work;
++      right ^= (work << 16);
++      work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
++      leftt ^= work;
++      right ^= (work << 4);
++      *block++ = right;
++      *block = leftt;
++      return;
++      }
++
++/* Validation sets:
++ *
++ * Single-length key, single-length plaintext -
++ * Key          : 0123 4567 89ab cdef
++ * Plain  : 0123 4567 89ab cde7
++ * Cipher : c957 4425 6a5e d31d
++ *
++ * Double-length key, single-length plaintext -
++ * Key          : 0123 4567 89ab cdef fedc ba98 7654 3210
++ * Plain  : 0123 4567 89ab cde7
++ * Cipher : 7f1d 0a77 826b 8aff
++ *
++ * Double-length key, double-length plaintext -
++ * Key          : 0123 4567 89ab cdef fedc ba98 7654 3210
++ * Plain  : 0123 4567 89ab cdef 0123 4567 89ab cdff
++ * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
++ *
++ * Triple-length key, single-length plaintext -
++ * Key          : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
++ * Plain  : 0123 4567 89ab cde7
++ * Cipher : de0b 7c06 ae5e 0ed5
++ *
++ * Triple-length key, double-length plaintext -
++ * Key          : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
++ * Plain  : 0123 4567 89ab cdef 0123 4567 89ab cdff
++ * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
++ *
++ * d3des V5.0a rwo 9208.07 18:44 Graven Imagery
++ **********************************************************************/
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ ioemu/d3des.h      Fri Oct 20 09:50:09 2006 +0100
+@@ -0,0 +1,51 @@
++/*
++ * This is D3DES (V5.09) by Richard Outerbridge with the double and
++ * triple-length support removed for use in VNC.
++ *
++ * These changes are:
++ *  Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.
++ *
++ * This software is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ */
++
++/* d3des.h -
++ *
++ *    Headers and defines for d3des.c
++ *    Graven Imagery, 1992.
++ *
++ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
++ *    (GEnie : OUTER; CIS : [71755,204])
++ */
++
++#define EN0   0       /* MODE == encrypt */
++#define DE1   1       /* MODE == decrypt */
++
++extern void deskey(unsigned char *, int);
++/*                  hexkey[8]     MODE
++ * Sets the internal key register according to the hexadecimal
++ * key contained in the 8 bytes of hexkey, according to the DES,
++ * for encryption or decryption according to MODE.
++ */
++
++extern void usekey(unsigned long *);
++/*                cookedkey[32]
++ * Loads the internal key register with the data in cookedkey.
++ */
++
++extern void cpkey(unsigned long *);
++/*               cookedkey[32]
++ * Copies the contents of the internal key register into the storage
++ * located at &cookedkey[0].
++ */
++
++extern void des(unsigned char *, unsigned char *);
++/*                from[8]           to[8]
++ * Encrypts/Decrypts (according to the key currently loaded in the
++ * internal key register) one block of eight bytes at address 'from'
++ * into the block at address 'to'.  They can be the same.
++ */
++
++/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
++ ********************************************************************/
diff -r aa8ca06d209e -r d246b79986d1 tools/ioemu/patches/vnc-protocol-fixes
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-protocol-fixes    Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,63 @@
+# HG changeset patch
+# User Steven Smith <ssmith@xxxxxxxxxxxxx>
+# Node ID ca3abb3804f4400b24037a4366cb2ca5e51ed742
+# Parent  7fca81d456b2cb40d4effe2492f7ed1aafd32f52
+[HVM][VNC] Make sure that qemu doesn't go into an infinite loop when
+it receives certain invalid requests from the viewer.
+
+Signed-off-by: Steven Smith <sos22@xxxxxxxxx>
+
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c   2006-10-24 14:28:05.000000000 +0100
++++ ioemu/vnc.c        2006-10-24 14:30:11.000000000 +0100
+@@ -26,6 +26,7 @@
+ 
+ #include "vl.h"
+ #include "qemu_socket.h"
++#include <assert.h>
+ 
+ #define VNC_REFRESH_INTERVAL (1000 / 30)
+ 
+@@ -677,8 +678,10 @@
+           memmove(vs->input.buffer, vs->input.buffer + len,
+                   vs->input.offset - len);
+           vs->input.offset -= len;
+-      } else
++      } else {
++          assert(ret > vs->read_handler_expect);
+           vs->read_handler_expect = ret;
++      }
+     }
+ }
+ 
+@@ -961,8 +964,12 @@
+       if (len == 1)
+           return 4;
+ 
+-      if (len == 4)
+-          return 4 + (read_u16(data, 2) * 4);
++      if (len == 4) {
++          uint16_t v;
++          v = read_u16(data, 2);
++          if (v)
++              return 4 + v * 4;
++      }
+ 
+       limit = read_u16(data, 2);
+       for (i = 0; i < limit; i++) {
+@@ -996,8 +1003,12 @@
+       if (len == 1)
+           return 8;
+ 
+-      if (len == 8)
+-          return 8 + read_u32(data, 4);
++      if (len == 8) {
++          uint32_t v;
++          v = read_u32(data, 4);
++          if (v)
++              return 8 + v;
++      }
+ 
+       client_cut_text(vs, read_u32(data, 4), data + 8);
+       break;
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestLib/arch.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/lib/XmTestLib/arch.py       Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,148 @@
+#!/usr/bin/python
+"""
+ arch.py - Encapsulate all logic regarding what type of hardware xen
+           is running on to make adding new platforms easier.
+
+ Copyright (C) 2006 Tony Breeds IBM Corporation
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; under version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""
+
+import os
+import re
+import config
+import commands
+
+from Test import *
+
+BLOCK_ROOT_DEV = "hda"
+
+# This isn't truly platform related but it makes the code tidier
+def getRdPath():
+    """Locate the full path to ramdisks needed by domUs"""
+    rdpath = os.environ.get("RD_PATH")
+    if not rdpath:
+        rdpath = "../../ramdisk"
+    rdpath = os.path.abspath(rdpath)
+
+    return rdpath
+
+# Begin: Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors
+def ia_checkBuffer(buffer):
+    return
+
+def ia_minSafeMem():
+    return 32
+
+def ia_getDeviceModel():
+    """Get the path to the device model based on
+    the architecture reported in uname"""
+    architecture = os.uname()[4]
+    if re.search("64", architecture):
+        return "/usr/lib64/xen/bin/qemu-dm"
+    else:
+        return "/usr/lib/xen/bin/qemu-dm"
+
+def ia_getDefaultKernel():
+    """Get the path to the default DomU kernel"""
+    dom0Ver = commands.getoutput("uname -r");
+    domUVer = dom0Ver.replace("xen0", "xenU");
+
+    return "/boot/vmlinuz-" + domUVer;
+
+ia_ParavirtDefaults = {"memory"       : 64,
+                       "vcpus"        : 1,
+                       "kernel"       : ia_getDefaultKernel(),
+                       "root"         : "/dev/ram0",
+                       "ramdisk"      : getRdPath() + "/initrd.img",
+}
+ia_HVMDefaults =      {"memory"       : 64,
+                       "vcpus"        : 1,
+                       "acpi"         : 0,
+                       "apic"         : 0,
+                       "disk"         : ["file:%s/disk.img,ioemu:%s,w!" %
+                                         (getRdPath(), BLOCK_ROOT_DEV)],
+                       "kernel"       : "/usr/lib/xen/boot/hvmloader",
+                       "builder"      : "hvm",
+                       "sdl"          : 0,
+                       "vnc"          : 0,
+                       "vncviewer"    : 0,
+                       "nographic"    : 1,
+                       "serial"       : "pty",
+                       "device_model" : ia_getDeviceModel(),
+}
+# End  : Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors
+
+# Begin: PowerPC
+def ppc_checkBuffer(buffer):
+    checks = [
+        {"pattern" : re.compile("^\d+:mon>\s*$", re.MULTILINE),
+         "message" : "domain trapped into XMON"},
+    ]
+
+    for i in range(0, len(checks)):
+        check=checks[i]
+        if check.get('pattern').search(buffer):
+               FAIL(check.get('message'))
+
+    return
+
+def ppc_minSafeMem():
+    return 64
+
+def ppc_getDefaultKernel():
+    """Get the path to the default DomU kernel"""
+    dom0Ver = commands.getoutput("uname -r");
+    domUVer = dom0Ver.replace("xen0", "xenU");
+
+    return "/boot/vmlinux-" + domUVer;
+
+ppc_ParavirtDefaults = {"memory"  : 64,
+                        "vcpus"   : 1,
+                        "kernel"  : ppc_getDefaultKernel(),
+                        "root"    : "/dev/ram0",
+                        "ramdisk" : getRdPath() + "/initrd.img",
+                        "extra"   : "xencons=tty128 console=tty128",
+}
+# End  : PowerPC
+
+"""Convert from uname specification to a more general platform."""
+_uname_to_arch_map = {
+    "i386"  : "x86",
+    "i486"  : "x86",
+    "i586"  : "x86",
+    "i686"  : "x86",
+    "ia64"  : "ia64",
+    "ppc"   : "powerpc",
+    "ppc64" : "powerpc",
+}
+
+# Lookup current platform.
+_arch = _uname_to_arch_map.get(os.uname()[4], "Unknown")
+if _arch == "x86" or _arch == "ia64":
+    minSafeMem = ia_minSafeMem
+    getDefaultKernel = ia_getDefaultKernel
+    checkBuffer = ia_checkBuffer
+    if config.ENABLE_HVM_SUPPORT:
+        configDefaults = ia_HVMDefaults
+    else:
+        configDefaults = ia_ParavirtDefaults
+elif _arch == "powerpc":
+    minSafeMem = ppc_minSafeMem
+    getDefaultKernel = ppc_getDefaultKernel
+    checkBuffer = ppc_checkBuffer
+    configDefaults = ppc_ParavirtDefaults
+else:
+    raise ValueError, "Unknown architecture!"
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/lib/XmTestReport/arch.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/lib/XmTestReport/arch.py    Tue Oct 24 11:21:48 2006 -0600
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+"""
+ arch.py - Encapsulate all logic regarding what type of hardware xen
+           is running on to make adding new platforms easier.
+
+ Copyright (C) 2006 Tony Breeds IBM Corporation
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; under version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""
+
+import os
+
+"""Convert from uname specification to a more general platform."""
+_uname_to_arch_map = {
+    "i386"  : "x86",
+    "i486"  : "x86",
+    "i586"  : "x86",
+    "i686"  : "x86",
+    "ia64"  : "ia64",
+    "ppc"   : "powerpc",
+    "ppc64" : "powerpc",
+}
+
+_arch = _uname_to_arch_map.get(os.uname()[4], "Unknown")
+if _arch == "x86":
+    cpuValues = {"model_name" : "Unknown",
+                 "flags"      : "Unknown"}
+elif _arch == "ia64":
+    cpuValues = {"arch"     : "Unknown",
+                 "features" : "Unknown"}
+elif _arch == "powerpc":
+    cpuValues = {"cpu"      : "Unknown",
+                 "platform" : "Unknown",
+                 "revision" : "Unknown"}
+else:
+    raise ValueError, "Unknown architecture!"
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/ramdisk/README-XenSource-initrd-1.0-img
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/ramdisk/README-XenSource-initrd-1.0-img     Tue Oct 24 
11:21:48 2006 -0600
@@ -0,0 +1,45 @@
+XenSource xm-test 1.0 initrds
+=============================
+
+http://xm-test.xensource.com/ramdisks/initrd-1.0-i386.img and
+http://xm-test.xensource.com/ramdisks/initrd-1.0-powerpc.img are initrds
+suitable for use with Xen's xm-test regression testing suite.  They has been
+built and provided by XenSource, for the convenience of Xen users.  xm-test
+initrds may be mixed across minor xm-test versions, but not across major
+versions; this initrd is suitable for all 1.0.x versions of xm-test (as
+shipped with Xen 3.0.4 and the unstable tree leading up to that release).
+
+In order to use one of these initrds, run "./autogen; ./configure; make
+existing" inside the xm-test directory, and the appropriate initrd for your
+architecture will be downloaded automatically.  Alternatively, if you have
+already downloaded that file, place it into the xm-test/ramdisk directory and
+run the same command.  In either case, runtest.sh can then be used as normal.
+See xm-test/README for more details.
+
+These initrds were built using the infrastructure provided by xm-test.  Each
+is a full guest operating system and filesystem, and as such includes a large
+number of pieces of software.  The source code for the majority of these are
+included in full inside the file
+http://xm-test.xensource.com/ramdisks/<INITRD>-buildroot.tar.bz2, where
+<INITRD> is either initrd-1.0-i386 or initrd-1.0-powerpc as appropriate, or
+alongside this file.  Copyright statements and licences are contained therein.
+The remaining source code is included in the Xen distribution, at
+http://www.xensource.com/xen/downloads/archives.html.  The configurations used
+for BusyBox, uClibc, and Buildroot are available as
+http://xm-test.xensource.com/ramdisks/<INITRD>-busybox-config,
+http://xm-test.xensource.com/ramdisks/<INITRD>-uClibc-config, and
+http://xm-test.xensource.com/ramdisks/<INITRD>-buildroot-config respectively,
+or alongside this file.
+
+XenSource and the Xen contributors are grateful to the authors of these
+software packages for their contributions to free and open-source software.
+
+
+Buildroot and BusyBox are Copyright (c) Erik Andersen <andersen@xxxxxxxxxxxx>.
+BusyBox is licensed under the GNU General Public License (GPL).  A copy of
+this license is available in the file GPL-2,
+http://xm-test.xensource.com/ramdisks/GPL-2, or alongside this file.
+
+uClibc is licensed under the GNU Lesser General Public License (LGPL).  A copy
+of this license is available in the file
+http://xm-test.xensource.com/ramdisks/LGPL-2, or alongside this file.
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/ramdisk/configs/buildroot-i386
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/ramdisk/configs/buildroot-i386      Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,346 @@
+#
+# Automatically generated make config: don't edit
+#
+BR2_HAVE_DOT_CONFIG=y
+# BR2_alpha is not set
+# BR2_arm is not set
+# BR2_armeb is not set
+# BR2_cris is not set
+BR2_i386=y
+# BR2_m68k is not set
+# BR2_mips is not set
+# BR2_mipsel is not set
+# BR2_nios2 is not set
+# BR2_powerpc is not set
+# BR2_sh is not set
+# BR2_sh64 is not set
+# BR2_sparc is not set
+# BR2_x86_64 is not set
+BR2_x86_i386=y
+# BR2_x86_i486 is not set
+# BR2_x86_i586 is not set
+# BR2_x86_i686 is not set
+BR2_ARCH="i386"
+BR2_ENDIAN="LITTLE"
+
+#
+# Build options
+#
+BR2_WGET="wget --passive-ftp"
+BR2_SVN="svn co"
+BR2_ZCAT="zcat"
+BR2_TAR_OPTIONS=""
+BR2_DL_DIR="$(BASE_DIR)/dl"
+BR2_SOURCEFORGE_MIRROR="easynews"
+BR2_STAGING_DIR="$(BUILD_DIR)/staging_dir"
+BR2_TOPDIR_PREFIX=""
+BR2_TOPDIR_SUFFIX=""
+BR2_GNU_BUILD_SUFFIX="pc-linux-gnu"
+BR2_GNU_TARGET_SUFFIX="linux-uclibc"
+BR2_JLEVEL=1
+
+#
+# Toolchain Options
+#
+
+#
+# Kernel Header Options
+#
+# BR2_KERNEL_HEADERS_2_4_25 is not set
+# BR2_KERNEL_HEADERS_2_4_27 is not set
+# BR2_KERNEL_HEADERS_2_4_29 is not set
+# BR2_KERNEL_HEADERS_2_4_31 is not set
+# BR2_KERNEL_HEADERS_2_6_9 is not set
+# BR2_KERNEL_HEADERS_2_6_11 is not set
+BR2_KERNEL_HEADERS_2_6_12=y
+# BR2_KERNEL_HEADERS_2_6_18 is not set
+BR2_DEFAULT_KERNEL_HEADERS="2.6.12"
+
+#
+# uClibc Options
+#
+# BR2_UCLIBC_VERSION_SNAPSHOT is not set
+# BR2_ENABLE_LOCALE is not set
+# BR2_PTHREADS_NONE is not set
+# BR2_PTHREADS is not set
+BR2_PTHREADS_OLD=y
+# BR2_PTHREADS_NATIVE is not set
+
+#
+# Binutils Options
+#
+# BR2_BINUTILS_VERSION_2_14_90_0_8 is not set
+# BR2_BINUTILS_VERSION_2_15 is not set
+# BR2_BINUTILS_VERSION_2_15_94_0_2_2 is not set
+# BR2_BINUTILS_VERSION_2_16_1 is not set
+# BR2_BINUTILS_VERSION_2_16_90_0_3 is not set
+# BR2_BINUTILS_VERSION_2_16_91_0_5 is not set
+# BR2_BINUTILS_VERSION_2_16_91_0_6 is not set
+BR2_BINUTILS_VERSION_2_16_91_0_7=y
+# BR2_BINUTILS_VERSION_2_17 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_2 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_3 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_4 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_5 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_6 is not set
+BR2_BINUTILS_VERSION="2.16.91.0.7"
+BR2_EXTRA_BINUTILS_CONFIG_OPTIONS=""
+
+#
+# Gcc Options
+#
+# BR2_GCC_VERSION_3_3_5 is not set
+# BR2_GCC_VERSION_3_3_6 is not set
+# BR2_GCC_VERSION_3_4_2 is not set
+# BR2_GCC_VERSION_3_4_3 is not set
+# BR2_GCC_VERSION_3_4_4 is not set
+# BR2_GCC_VERSION_3_4_5 is not set
+BR2_GCC_VERSION_3_4_6=y
+# BR2_GCC_VERSION_4_0_0 is not set
+# BR2_GCC_VERSION_4_0_1 is not set
+# BR2_GCC_VERSION_4_0_2 is not set
+# BR2_GCC_VERSION_4_0_3 is not set
+# BR2_GCC_VERSION_4_1_0 is not set
+# BR2_GCC_VERSION_4_1_1 is not set
+# BR2_GCC_VERSION_4_2 is not set
+# BR2_GCC_IS_SNAP is not set
+BR2_GCC_VERSION="3.4.6"
+# BR2_GCC_USE_SJLJ_EXCEPTIONS is not set
+BR2_EXTRA_GCC_CONFIG_OPTIONS=""
+# BR2_INSTALL_LIBSTDCPP is not set
+# BR2_INSTALL_OBJC is not set
+# BR2_GCC_SHARED_LIBGCC is not set
+
+#
+# Ccache Options
+#
+BR2_CCACHE=y
+
+#
+# Gdb Options
+#
+# BR2_PACKAGE_GDB is not set
+# BR2_PACKAGE_GDB_SERVER is not set
+# BR2_PACKAGE_GDB_HOST is not set
+
+#
+# elf2flt
+#
+# BR2_ELF2FLT is not set
+# BR2_MKLIBS is not set
+
+#
+# Common Toolchain Options
+#
+# BR2_PACKAGE_SSTRIP_TARGET is not set
+# BR2_PACKAGE_SSTRIP_HOST is not set
+BR2_ENABLE_MULTILIB=y
+BR2_LARGEFILE=y
+BR2_TARGET_OPTIMIZATION="-Os -pipe"
+BR2_CROSS_TOOLCHAIN_TARGET_UTILS=y
+
+#
+# Package Selection for the target
+#
+
+#
+# The default minimal system
+#
+BR2_PACKAGE_BUSYBOX=y
+# BR2_PACKAGE_BUSYBOX_SNAPSHOT is not set
+BR2_PACKAGE_BUSYBOX_INSTALL_SYMLINKS=y
+BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config"
+
+#
+# The minimum needed to build a uClibc development system
+#
+# BR2_PACKAGE_BASH is not set
+# BR2_PACKAGE_BZIP2 is not set
+# BR2_PACKAGE_COREUTILS is not set
+# BR2_PACKAGE_DIFFUTILS is not set
+# BR2_PACKAGE_ED is not set
+# BR2_PACKAGE_FINDUTILS is not set
+# BR2_PACKAGE_FLEX is not set
+# BR2_PACKAGE_GAWK is not set
+# BR2_PACKAGE_GCC_TARGET is not set
+# BR2_PACKAGE_CCACHE_TARGET is not set
+# BR2_PACKAGE_GREP is not set
+# BR2_PACKAGE_MAKE is not set
+# BR2_PACKAGE_PATCH is not set
+# BR2_PACKAGE_SED is not set
+# BR2_PACKAGE_TAR is not set
+
+#
+# Other stuff
+#
+# BR2_PACKAGE_ACPID is not set
+# BR2_PACKAGE_ASTERISK is not set
+# BR2_PACKAGE_AT is not set
+# BR2_PACKAGE_AUTOCONF is not set
+# BR2_PACKAGE_AUTOMAKE is not set
+# BR2_PACKAGE_BERKELEYDB is not set
+# BR2_PACKAGE_BIND is not set
+# BR2_PACKAGE_BISON is not set
+# BR2_PACKAGE_BOA is not set
+# BR2_PACKAGE_BRIDGE is not set
+# BR2_PACKAGE_CUSTOMIZE is not set
+# BR2_PACKAGE_ISC_DHCP is not set
+# BR2_PACKAGE_DIALOG is not set
+# BR2_PACKAGE_DIRECTFB is not set
+# BR2_PACKAGE_DISTCC is not set
+# BR2_PACKAGE_DM is not set
+# BR2_PACKAGE_DMRAID is not set
+# BR2_PACKAGE_DNSMASQ is not set
+# BR2_PACKAGE_DROPBEAR is not set
+# BR2_PACKAGE_ETHTOOL is not set
+# BR2_PACKAGE_EXPAT is not set
+# BR2_PACKAGE_E2FSPROGS is not set
+# BR2_PACKAGE_FAKEROOT is not set
+# BR2_PACKAGE_FILE is not set
+# BR2_PACKAGE_FREETYPE is not set
+# BR2_PACKAGE_GETTEXT is not set
+# BR2_PACKAGE_LIBINTL is not set
+# BR2_PACKAGE_GZIP is not set
+# BR2_PACKAGE_HASERL is not set
+# BR2_PACKAGE_HDPARM is not set
+# BR2_PACKAGE_HOSTAP is not set
+# BR2_PACKAGE_HOTPLUG is not set
+# BR2_PACKAGE_IOSTAT is not set
+# BR2_PACKAGE_IPROUTE2 is not set
+# BR2_PACKAGE_IPSEC_TOOLS is not set
+# BR2_PACKAGE_IPTABLES is not set
+# BR2_PACKAGE_JPEG is not set
+# BR2_PACKAGE_LESS is not set
+# BR2_PACKAGE_LIBCGI is not set
+# BR2_PACKAGE_LIBCGICC is not set
+# BR2_PACKAGE_LIBELF is not set
+# BR2_PACKAGE_LIBFLOAT is not set
+# BR2_PACKAGE_LIBGLIB12 is not set
+# BR2_PACKAGE_LIBMAD is not set
+# BR2_PACKAGE_LIBPCAP is not set
+# BR2_PACKAGE_LIBPNG is not set
+# BR2_PACKAGE_LIBSYSFS is not set
+# BR2_PACKAGE_LIBTOOL is not set
+# BR2_PACKAGE_LIBUSB is not set
+# BR2_PACKAGE_LIGHTTPD is not set
+# BR2_PACKAGE_LINKS is not set
+# BR2_PACKAGE_LRZSZ is not set
+# BR2_PACKAGE_LSOF is not set
+# BR2_PACKAGE_LTP-TESTSUITE is not set
+# BR2_PACKAGE_LTT is not set
+# BR2_PACKAGE_LVM2 is not set
+# BR2_PACKAGE_LZO is not set
+# BR2_PACKAGE_LZMA is not set
+# BR2_PACKAGE_M4 is not set
+# BR2_PACKAGE_MDADM is not set
+# BR2_PACKAGE_MEMTESTER is not set
+# BR2_PACKAGE_MICROCOM is not set
+# BR2_PACKAGE_MICROPERL is not set
+# BR2_PACKAGE_MICROWIN is not set
+# BR2_PACKAGE_MKDOSFS is not set
+# BR2_PACKAGE_MODULE_INIT_TOOLS is not set
+# BR2_PACKAGE_MODUTILS is not set
+# BR2_PACKAGE_MPG123 is not set
+# BR2_PACKAGE_MROUTED is not set
+# BR2_PACKAGE_MTD is not set
+# BR2_PACKAGE_NANO is not set
+# BR2_PACKAGE_NBD is not set
+# BR2_PACKAGE_NCURSES is not set
+# BR2_PACKAGE_NETKITBASE is not set
+# BR2_PACKAGE_NETKITTELNET is not set
+# BR2_PACKAGE_NETSNMP is not set
+# BR2_PACKAGE_NEWT is not set
+# BR2_PACKAGE_NTP is not set
+# BR2_PACKAGE_OPENNTPD is not set
+# BR2_PACKAGE_OPENSSH is not set
+# BR2_PACKAGE_OPENSSL is not set
+# BR2_PACKAGE_OPENVPN is not set
+# BR2_PACKAGE_PCIUTILS is not set
+# BR2_PACKAGE_PKGCONFIG is not set
+# BR2_PACKAGE_PORTAGE is not set
+# BR2_PACKAGE_PORTMAP is not set
+# BR2_PACKAGE_PPPD is not set
+# BR2_PACKAGE_PROCPS is not set
+# BR2_PACKAGE_PSMISC is not set
+# BR2_PACKAGE_PYTHON is not set
+# BR2_PACKAGE_QTE is not set
+BR2_QTE_TMAKE_VERSION="1.13"
+# BR2_PACKAGE_RAIDTOOLS is not set
+# BR2_READLINE is not set
+# BR2_PACKAGE_RSYNC is not set
+# BR2_PACKAGE_RUBY is not set
+# BR2_PACKAGE_RXVT is not set
+# BR2_PACKAGE_SDL is not set
+# BR2_PACKAGE_SFDISK is not set
+# BR2_PACKAGE_SLANG is not set
+# BR2_PACKAGE_SMARTMONTOOLS is not set
+# BR2_PACKAGE_SOCAT is not set
+# BR2_PACKAGE_SQLITE is not set
+# BR2_PACKAGE_STRACE is not set
+# BR2_PACKAGE_SUDO is not set
+# BR2_PACKAGE_SYSKLOGD is not set
+# BR2_PACKAGE_SYSVINIT is not set
+# BR2_PACKAGE_TCL is not set
+# BR2_PACKAGE_TCPDUMP is not set
+# BR2_PACKAGE_TFTPD is not set
+# BR2_PACKAGE_THTTPD is not set
+# BR2_PACKAGE_TINYLOGIN is not set
+# BR2_PACKAGE_TINYX is not set
+# BR2_PACKAGE_TN5250 is not set
+# BR2_PACKAGE_TTCP is not set
+# BR2_PACKAGE_UDEV is not set
+# BR2_PACKAGE_UDHCP is not set
+# BR2_PACKAGE_UEMACS is not set
+# BR2_PACKAGE_USBUTILS is not set
+# BR2_PACKAGE_UTIL-LINUX is not set
+# BR2_PACKAGE_VALGRIND is not set
+# BR2_PACKAGE_VTUN is not set
+# BR2_PACKAGE_WGET is not set
+# BR2_PACKAGE_WHICH is not set
+# BR2_PACKAGE_WIPE is not set
+# BR2_PACKAGE_WIRELESS_TOOLS is not set
+# BR2_PACKAGE_XFSPROGS is not set
+# BR2_PACKAGE_ZLIB is not set
+BR2_PACKAGE_HPING=y
+
+#
+# Target Options
+#
+
+#
+# filesystem for target device
+#
+# BR2_TARGET_ROOTFS_CRAMFS is not set
+# BR2_TARGET_ROOTFS_CLOOP is not set
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_BLOCKS=0
+BR2_TARGET_ROOTFS_EXT2_INODES=0
+BR2_TARGET_ROOTFS_EXT2_RESBLKS=0
+BR2_TARGET_ROOTFS_EXT2_SQUASH=y
+BR2_TARGET_ROOTFS_EXT2_OUTPUT="$(IMAGE).ext2"
+# BR2_TARGET_ROOTFS_EXT2_GZ is not set
+BR2_TARGET_ROOTFS_EXT2_COPYTO=""
+# BR2_TARGET_ROOTFS_JFFS2 is not set
+# BR2_TARGET_ROOTFS_SQUASHFS is not set
+# BR2_TARGET_ROOTFS_TAR is not set
+# BR2_TARGET_ROOTFS_ISO9660 is not set
+
+#
+# bootloader for target device
+#
+# BR2_TARGET_GRUB is not set
+# BR2_TARGET_SYSLINUX is not set
+
+#
+# Board Support Options
+#
+# BR2_TARGET_SOEKRIS_NET4521 is not set
+# BR2_TARGET_SOEKRIS_NET4801 is not set
+# BR2_TARGET_VIA_EPIA_MII is not set
+
+#
+# Generic System Support
+#
+# BR2_TARGET_GENERIC_ACCESS_POINT is not set
+# BR2_TARGET_GENERIC_FIREWALL is not set
+# BR2_TARGET_GENERIC_DEV_SYSTEM is not set
diff -r aa8ca06d209e -r d246b79986d1 
tools/xm-test/ramdisk/configs/buildroot-powerpc
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/ramdisk/configs/buildroot-powerpc   Tue Oct 24 11:21:48 
2006 -0600
@@ -0,0 +1,338 @@
+#
+# Automatically generated make config: don't edit
+#
+BR2_HAVE_DOT_CONFIG=y
+# BR2_alpha is not set
+# BR2_arm is not set
+# BR2_armeb is not set
+# BR2_cris is not set
+# BR2_i386 is not set
+# BR2_m68k is not set
+# BR2_mips is not set
+# BR2_mipsel is not set
+# BR2_nios2 is not set
+BR2_powerpc=y
+# BR2_sh is not set
+# BR2_sh64 is not set
+# BR2_sparc is not set
+# BR2_x86_64 is not set
+BR2_ARCH="powerpc"
+BR2_ENDIAN="BIG"
+
+#
+# Build options
+#
+BR2_WGET="wget --passive-ftp"
+BR2_SVN="svn co"
+BR2_ZCAT="zcat"
+BR2_TAR_OPTIONS=""
+BR2_DL_DIR="$(BASE_DIR)/dl"
+BR2_SOURCEFORGE_MIRROR="easynews"
+BR2_STAGING_DIR="$(BUILD_DIR)/staging_dir"
+BR2_TOPDIR_PREFIX=""
+BR2_TOPDIR_SUFFIX=""
+BR2_GNU_BUILD_SUFFIX="pc-linux-gnu"
+BR2_GNU_TARGET_SUFFIX="linux-uclibc"
+BR2_JLEVEL=1
+
+#
+# Toolchain Options
+#
+
+#
+# Kernel Header Options
+#
+# BR2_KERNEL_HEADERS_2_4_25 is not set
+# BR2_KERNEL_HEADERS_2_4_27 is not set
+# BR2_KERNEL_HEADERS_2_4_29 is not set
+# BR2_KERNEL_HEADERS_2_4_31 is not set
+# BR2_KERNEL_HEADERS_2_6_9 is not set
+# BR2_KERNEL_HEADERS_2_6_11 is not set
+BR2_KERNEL_HEADERS_2_6_12=y
+# BR2_KERNEL_HEADERS_2_6_18 is not set
+BR2_DEFAULT_KERNEL_HEADERS="2.6.12"
+
+#
+# uClibc Options
+#
+# BR2_UCLIBC_VERSION_SNAPSHOT is not set
+# BR2_ENABLE_LOCALE is not set
+# BR2_PTHREADS_NONE is not set
+# BR2_PTHREADS is not set
+BR2_PTHREADS_OLD=y
+# BR2_PTHREADS_NATIVE is not set
+
+#
+# Binutils Options
+#
+# BR2_BINUTILS_VERSION_2_14_90_0_8 is not set
+# BR2_BINUTILS_VERSION_2_15 is not set
+# BR2_BINUTILS_VERSION_2_15_94_0_2_2 is not set
+# BR2_BINUTILS_VERSION_2_16_1 is not set
+# BR2_BINUTILS_VERSION_2_16_90_0_3 is not set
+# BR2_BINUTILS_VERSION_2_16_91_0_5 is not set
+# BR2_BINUTILS_VERSION_2_16_91_0_6 is not set
+# BR2_BINUTILS_VERSION_2_16_91_0_7 is not set
+BR2_BINUTILS_VERSION_2_17=y
+# BR2_BINUTILS_VERSION_2_17_50_0_2 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_3 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_4 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_5 is not set
+# BR2_BINUTILS_VERSION_2_17_50_0_6 is not set
+BR2_BINUTILS_VERSION="2.17"
+BR2_EXTRA_BINUTILS_CONFIG_OPTIONS=""
+
+#
+# Gcc Options
+#
+# BR2_GCC_VERSION_3_3_5 is not set
+# BR2_GCC_VERSION_3_3_6 is not set
+BR2_GCC_VERSION_3_4_2=y
+# BR2_GCC_VERSION_3_4_3 is not set
+# BR2_GCC_VERSION_3_4_4 is not set
+# BR2_GCC_VERSION_3_4_5 is not set
+# BR2_GCC_VERSION_3_4_6 is not set
+# BR2_GCC_VERSION_4_0_0 is not set
+# BR2_GCC_VERSION_4_0_1 is not set
+# BR2_GCC_VERSION_4_0_2 is not set
+# BR2_GCC_VERSION_4_0_3 is not set
+# BR2_GCC_VERSION_4_1_0 is not set
+# BR2_GCC_VERSION_4_1_1 is not set
+# BR2_GCC_VERSION_4_2 is not set
+# BR2_GCC_IS_SNAP is not set
+BR2_GCC_VERSION="3.4.2"
+# BR2_GCC_USE_SJLJ_EXCEPTIONS is not set
+BR2_EXTRA_GCC_CONFIG_OPTIONS=""
+# BR2_INSTALL_LIBSTDCPP is not set
+# BR2_INSTALL_OBJC is not set
+# BR2_GCC_SHARED_LIBGCC is not set
+
+#
+# Ccache Options
+#
+BR2_CCACHE=y
+
+#
+# Gdb Options
+#
+# BR2_PACKAGE_GDB is not set
+# BR2_PACKAGE_GDB_SERVER is not set
+# BR2_PACKAGE_GDB_HOST is not set
+
+#
+# elf2flt
+#
+# BR2_ELF2FLT is not set
+# BR2_MKLIBS is not set
+
+#
+# Common Toolchain Options
+#
+# BR2_PACKAGE_SSTRIP_TARGET is not set
+# BR2_PACKAGE_SSTRIP_HOST is not set
+BR2_ENABLE_MULTILIB=y
+BR2_LARGEFILE=y
+# BR2_SOFT_FLOAT is not set
+BR2_TARGET_OPTIMIZATION="-Os -pipe"
+BR2_CROSS_TOOLCHAIN_TARGET_UTILS=y
+
+#
+# Package Selection for the target
+#
+
+#
+# The default minimal system
+#
+BR2_PACKAGE_BUSYBOX=y
+# BR2_PACKAGE_BUSYBOX_SNAPSHOT is not set
+BR2_PACKAGE_BUSYBOX_INSTALL_SYMLINKS=y
+BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config"
+
+#
+# The minimum needed to build a uClibc development system
+#
+# BR2_PACKAGE_BASH is not set
+# BR2_PACKAGE_BZIP2 is not set
+# BR2_PACKAGE_COREUTILS is not set
+# BR2_PACKAGE_DIFFUTILS is not set
+# BR2_PACKAGE_ED is not set
+# BR2_PACKAGE_FINDUTILS is not set
+# BR2_PACKAGE_FLEX is not set
+# BR2_PACKAGE_GAWK is not set
+# BR2_PACKAGE_GCC_TARGET is not set
+# BR2_PACKAGE_CCACHE_TARGET is not set
+# BR2_PACKAGE_GREP is not set
+# BR2_PACKAGE_MAKE is not set
+# BR2_PACKAGE_PATCH is not set
+# BR2_PACKAGE_SED is not set
+# BR2_PACKAGE_TAR is not set
+
+#
+# Other stuff
+#
+# BR2_PACKAGE_ACPID is not set
+# BR2_PACKAGE_ASTERISK is not set
+# BR2_PACKAGE_AT is not set
+# BR2_PACKAGE_AUTOCONF is not set
+# BR2_PACKAGE_AUTOMAKE is not set
+# BR2_PACKAGE_BERKELEYDB is not set
+# BR2_PACKAGE_BIND is not set
+# BR2_PACKAGE_BISON is not set
+# BR2_PACKAGE_BOA is not set
+# BR2_PACKAGE_BRIDGE is not set
+# BR2_PACKAGE_CUSTOMIZE is not set
+# BR2_PACKAGE_ISC_DHCP is not set
+# BR2_PACKAGE_DIALOG is not set
+# BR2_PACKAGE_DIRECTFB is not set
+# BR2_PACKAGE_DISTCC is not set
+# BR2_PACKAGE_DM is not set
+# BR2_PACKAGE_DMRAID is not set
+# BR2_PACKAGE_DNSMASQ is not set
+# BR2_PACKAGE_DROPBEAR is not set
+# BR2_PACKAGE_ETHTOOL is not set
+# BR2_PACKAGE_EXPAT is not set
+# BR2_PACKAGE_E2FSPROGS is not set
+# BR2_PACKAGE_FAKEROOT is not set
+# BR2_PACKAGE_FILE is not set
+# BR2_PACKAGE_FREETYPE is not set
+# BR2_PACKAGE_GETTEXT is not set
+# BR2_PACKAGE_LIBINTL is not set
+# BR2_PACKAGE_GZIP is not set
+# BR2_PACKAGE_HASERL is not set
+# BR2_PACKAGE_HDPARM is not set
+# BR2_PACKAGE_HOSTAP is not set
+# BR2_PACKAGE_HOTPLUG is not set
+# BR2_PACKAGE_IOSTAT is not set
+# BR2_PACKAGE_IPROUTE2 is not set
+# BR2_PACKAGE_IPSEC_TOOLS is not set
+# BR2_PACKAGE_IPTABLES is not set
+# BR2_PACKAGE_JPEG is not set
+# BR2_PACKAGE_LESS is not set
+# BR2_PACKAGE_LIBCGI is not set
+# BR2_PACKAGE_LIBCGICC is not set
+# BR2_PACKAGE_LIBELF is not set
+# BR2_PACKAGE_LIBFLOAT is not set
+# BR2_PACKAGE_LIBGLIB12 is not set
+# BR2_PACKAGE_LIBMAD is not set
+# BR2_PACKAGE_LIBPCAP is not set
+# BR2_PACKAGE_LIBPNG is not set
+# BR2_PACKAGE_LIBSYSFS is not set
+# BR2_PACKAGE_LIBTOOL is not set
+# BR2_PACKAGE_LIBUSB is not set
+# BR2_PACKAGE_LIGHTTPD is not set
+# BR2_PACKAGE_LINKS is not set
+# BR2_PACKAGE_LRZSZ is not set
+# BR2_PACKAGE_LSOF is not set
+# BR2_PACKAGE_LTP-TESTSUITE is not set
+# BR2_PACKAGE_LTT is not set
+# BR2_PACKAGE_LVM2 is not set
+# BR2_PACKAGE_LZO is not set
+# BR2_PACKAGE_LZMA is not set
+# BR2_PACKAGE_M4 is not set
+# BR2_PACKAGE_MDADM is not set
+# BR2_PACKAGE_MEMTESTER is not set
+# BR2_PACKAGE_MICROCOM is not set
+# BR2_PACKAGE_MICROPERL is not set
+# BR2_PACKAGE_MICROWIN is not set
+# BR2_PACKAGE_MKDOSFS is not set
+# BR2_PACKAGE_MODULE_INIT_TOOLS is not set
+# BR2_PACKAGE_MODUTILS is not set
+# BR2_PACKAGE_MPG123 is not set
+# BR2_PACKAGE_MROUTED is not set
+# BR2_PACKAGE_MTD is not set
+# BR2_PACKAGE_NANO is not set
+# BR2_PACKAGE_NBD is not set
+# BR2_PACKAGE_NCURSES is not set
+# BR2_PACKAGE_NETKITBASE is not set
+# BR2_PACKAGE_NETKITTELNET is not set
+# BR2_PACKAGE_NETSNMP is not set
+# BR2_PACKAGE_NEWT is not set
+# BR2_PACKAGE_NTP is not set
+# BR2_PACKAGE_OPENNTPD is not set
+# BR2_PACKAGE_OPENSSH is not set
+# BR2_PACKAGE_OPENSSL is not set
+# BR2_PACKAGE_OPENVPN is not set
+# BR2_PACKAGE_PCIUTILS is not set
+# BR2_PACKAGE_PKGCONFIG is not set
+# BR2_PACKAGE_PORTAGE is not set
+# BR2_PACKAGE_PORTMAP is not set
+# BR2_PACKAGE_PPPD is not set
+# BR2_PACKAGE_PROCPS is not set
+# BR2_PACKAGE_PSMISC is not set
+# BR2_PACKAGE_PYTHON is not set
+# BR2_PACKAGE_QTE is not set
+BR2_QTE_TMAKE_VERSION="1.13"
+# BR2_PACKAGE_RAIDTOOLS is not set
+# BR2_READLINE is not set
+# BR2_PACKAGE_RSYNC is not set
+# BR2_PACKAGE_RUBY is not set
+# BR2_PACKAGE_RXVT is not set
+# BR2_PACKAGE_SDL is not set
+# BR2_PACKAGE_SFDISK is not set
+# BR2_PACKAGE_SLANG is not set
+# BR2_PACKAGE_SMARTMONTOOLS is not set
+# BR2_PACKAGE_SOCAT is not set
+# BR2_PACKAGE_SQLITE is not set
+# BR2_PACKAGE_STRACE is not set
+# BR2_PACKAGE_SUDO is not set
+# BR2_PACKAGE_SYSKLOGD is not set
+# BR2_PACKAGE_SYSVINIT is not set
+# BR2_PACKAGE_TCL is not set
+# BR2_PACKAGE_TCPDUMP is not set
+# BR2_PACKAGE_TFTPD is not set
+# BR2_PACKAGE_THTTPD is not set
+# BR2_PACKAGE_TINYLOGIN is not set
+# BR2_PACKAGE_TINYX is not set
+# BR2_PACKAGE_TN5250 is not set
+# BR2_PACKAGE_TTCP is not set
+# BR2_PACKAGE_UDEV is not set
+# BR2_PACKAGE_UDHCP is not set
+# BR2_PACKAGE_UEMACS is not set
+# BR2_PACKAGE_USBUTILS is not set
+# BR2_PACKAGE_UTIL-LINUX is not set
+# BR2_PACKAGE_VALGRIND is not set
+# BR2_PACKAGE_VTUN is not set
+# BR2_PACKAGE_WGET is not set
+# BR2_PACKAGE_WHICH is not set
+# BR2_PACKAGE_WIPE is not set
+# BR2_PACKAGE_WIRELESS_TOOLS is not set
+# BR2_PACKAGE_XFSPROGS is not set
+# BR2_PACKAGE_ZLIB is not set
+BR2_PACKAGE_HPING=y
+
+#
+# Target Options
+#
+
+#
+# filesystem for target device
+#
+# BR2_TARGET_ROOTFS_CRAMFS is not set
+# BR2_TARGET_ROOTFS_CLOOP is not set
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_BLOCKS=0
+BR2_TARGET_ROOTFS_EXT2_INODES=0
+BR2_TARGET_ROOTFS_EXT2_RESBLKS=0
+BR2_TARGET_ROOTFS_EXT2_SQUASH=y
+BR2_TARGET_ROOTFS_EXT2_OUTPUT="$(IMAGE).ext2"
+# BR2_TARGET_ROOTFS_EXT2_GZ is not set
+BR2_TARGET_ROOTFS_EXT2_COPYTO=""
+# BR2_TARGET_ROOTFS_JFFS2 is not set
+# BR2_TARGET_ROOTFS_SQUASHFS is not set
+# BR2_TARGET_ROOTFS_TAR is not set
+
+#
+# bootloader for target device
+#
+# BR2_TARGET_YABOOT is not set
+
+#
+# Board Support Options
+#
+
+#
+# Generic System Support
+#
+# BR2_TARGET_GENERIC_ACCESS_POINT is not set
+# BR2_TARGET_GENERIC_FIREWALL is not set
+# BR2_TARGET_GENERIC_DEV_SYSTEM is not set
diff -r aa8ca06d209e -r d246b79986d1 tools/xm-test/ramdisk/configs/buildroot
--- a/tools/xm-test/ramdisk/configs/buildroot   Tue Oct 24 10:08:30 2006 -0600
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-BR2_HAVE_DOT_CONFIG=y
-# BR2_alpha is not set
-# BR2_arm is not set
-# BR2_armeb is not set
-# BR2_cris is not set
-BR2_i386=y
-# BR2_m68k is not set
-# BR2_mips is not set
-# BR2_mipsel is not set
-# BR2_nios2 is not set
-# BR2_powerpc is not set
-# BR2_sh is not set
-# BR2_sparc is not set
-# BR2_x86_64 is not set
-BR2_x86_i386=y
-# BR2_x86_i486 is not set
-# BR2_x86_i586 is not set
-# BR2_x86_i686 is not set
-BR2_ARCH="i386"
-BR2_ENDIAN="LITTLE"
-
-#
-# Build options
-#
-BR2_WGET="wget --passive-ftp"
-BR2_SVN="svn co"
-BR2_TAR_OPTIONS=""
-BR2_DL_DIR="$(BASE_DIR)/dl"
-BR2_SOURCEFORGE_MIRROR="easynews"
-BR2_STAGING_DIR="$(BUILD_DIR)/staging_dir"
-BR2_TOPDIR_PREFIX=""
-BR2_TOPDIR_SUFFIX=""
-BR2_GNU_BUILD_SUFFIX="pc-linux-gnu"
-BR2_JLEVEL=1
-
-#
-# Toolchain Options
-#
-
-#
-# Kernel Header Options
-#
-# BR2_KERNEL_HEADERS_2_4_25 is not set
-# BR2_KERNEL_HEADERS_2_4_27 is not set
-# BR2_KERNEL_HEADERS_2_4_29 is not set
-# BR2_KERNEL_HEADERS_2_4_31 is not set
-# BR2_KERNEL_HEADERS_2_6_9 is not set
-# BR2_KERNEL_HEADERS_2_6_11 is not set
-BR2_KERNEL_HEADERS_2_6_12=y
-BR2_DEFAULT_KERNEL_HEADERS="2.6.12"
-
-#
-# uClibc Options
-#
-# BR2_UCLIBC_VERSION_SNAPSHOT is not set
-# BR2_ENABLE_LOCALE is not set
-# BR2_PTHREADS_NONE is not set
-# BR2_PTHREADS is not set
-BR2_PTHREADS_OLD=y
-# BR2_PTHREADS_NATIVE is not set
-
-#
-# Binutils Options
-#
-# BR2_BINUTILS_VERSION_2_14_90_0_8 is not set
-# BR2_BINUTILS_VERSION_2_15 is not set
-# BR2_BINUTILS_VERSION_2_15_94_0_2_2 is not set
-# BR2_BINUTILS_VERSION_2_15_97 is not set
-# BR2_BINUTILS_VERSION_2_16_1 is not set
-# BR2_BINUTILS_VERSION_2_16_90_0_3 is not set
-# BR2_BINUTILS_VERSION_2_16_91_0_3 is not set
-# BR2_BINUTILS_VERSION_2_16_91_0_4 is not set
-# BR2_BINUTILS_VERSION_2_16_91_0_5 is not set
-# BR2_BINUTILS_VERSION_2_16_91_0_6 is not set
-BR2_BINUTILS_VERSION_2_16_91_0_7=y
-BR2_BINUTILS_VERSION="2.16.91.0.7"
-BR2_EXTRA_BINUTILS_CONFIG_OPTIONS=""
-
-#
-# Gcc Options
-#
-# BR2_GCC_VERSION_3_3_5 is not set
-# BR2_GCC_VERSION_3_3_6 is not set
-# BR2_GCC_VERSION_3_4_2 is not set
-# BR2_GCC_VERSION_3_4_3 is not set
-# BR2_GCC_VERSION_3_4_4 is not set
-# BR2_GCC_VERSION_3_4_5 is not set
-BR2_GCC_VERSION_3_4_6=y
-# BR2_GCC_VERSION_4_0_0 is not set
-# BR2_GCC_VERSION_4_0_1 is not set
-# BR2_GCC_VERSION_4_0_2 is not set
-# BR2_GCC_VERSION_4_0_3 is not set
-# BR2_GCC_VERSION_4_1_0 is not set
-# BR2_GCC_VERSION_4_2 is not set
-# BR2_GCC_IS_SNAP is not set
-BR2_GCC_VERSION="3.4.6"
-# BR2_GCC_USE_SJLJ_EXCEPTIONS is not set
-BR2_EXTRA_GCC_CONFIG_OPTIONS=""
-# BR2_INSTALL_LIBSTDCPP is not set
-# BR2_INSTALL_OBJC is not set
-
-#
-# Ccache Options
-#
-BR2_CCACHE=y
-
-#
-# Gdb Options
-#
-# BR2_PACKAGE_GDB is not set
-# BR2_PACKAGE_GDB_SERVER is not set
-# BR2_PACKAGE_GDB_HOST is not set
-
-#
-# elf2flt
-#
-# BR2_ELF2FLT is not set
-
-#
-# Common Toolchain Options
-#
-# BR2_PACKAGE_SSTRIP_TARGET is not set
-# BR2_PACKAGE_SSTRIP_HOST is not set
-BR2_ENABLE_MULTILIB=y
-BR2_LARGEFILE=y
-BR2_TARGET_OPTIMIZATION="-Os -pipe"
-BR2_CROSS_TOOLCHAIN_TARGET_UTILS=y
-
-#
-# Package Selection for the target
-#
-
-#
-# The default minimal system
-#
-BR2_PACKAGE_BUSYBOX=y
-# BR2_PACKAGE_BUSYBOX_SNAPSHOT is not set
-BR2_PACKAGE_BUSYBOX_INSTALL_SYMLINKS=y
-BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox.config"
-
-#
-# The minimum needed to build a uClibc development system
-#
-# BR2_PACKAGE_BASH is not set
-# BR2_PACKAGE_BZIP2 is not set
-# BR2_PACKAGE_COREUTILS is not set
-# BR2_PACKAGE_DIFFUTILS is not set
-# BR2_PACKAGE_ED is not set
-# BR2_PACKAGE_FINDUTILS is not set
-# BR2_PACKAGE_FLEX is not set
-# BR2_PACKAGE_GAWK is not set
-# BR2_PACKAGE_GCC_TARGET is not set
-# BR2_PACKAGE_CCACHE_TARGET is not set
-# BR2_PACKAGE_GREP is not set
-# BR2_PACKAGE_MAKE is not set
-# BR2_PACKAGE_PATCH is not set
-# BR2_PACKAGE_SED is not set
-# BR2_PACKAGE_TAR is not set
-
-#
-# Other stuff
-#
-# BR2_PACKAGE_ACPID is not set
-# BR2_PACKAGE_ASTERISK is not set
-# BR2_PACKAGE_AT is not set
-# BR2_PACKAGE_AUTOCONF is not set
-# BR2_PACKAGE_AUTOMAKE is not set
-# BR2_PACKAGE_BERKELEYDB is not set
-# BR2_PACKAGE_BIND is not set
-# BR2_PACKAGE_BISON is not set
-# BR2_PACKAGE_BOA is not set
-# BR2_PACKAGE_BRIDGE is not set
-# BR2_PACKAGE_CUSTOMIZE is not set
-# BR2_PACKAGE_ISC_DHCP is not set
-# BR2_PACKAGE_DIALOG is not set
-# BR2_PACKAGE_DIRECTFB is not set
-# BR2_PACKAGE_DISTCC is not set
-# BR2_PACKAGE_DM is not set
-# BR2_PACKAGE_DNSMASQ is not set
-# BR2_PACKAGE_DROPBEAR is not set
-# BR2_PACKAGE_ETHTOOL is not set
-# BR2_PACKAGE_EXPAT is not set
-# BR2_PACKAGE_E2FSPROGS is not set
-# BR2_PACKAGE_FAKEROOT is not set
-# BR2_PACKAGE_FILE is not set
-# BR2_PACKAGE_FREETYPE is not set
-# BR2_PACKAGE_GETTEXT is not set
-# BR2_PACKAGE_LIBINTL is not set
-# BR2_PACKAGE_GZIP is not set
-# BR2_PACKAGE_HASERL is not set
-# BR2_PACKAGE_HOSTAP is not set
-# BR2_PACKAGE_HOTPLUG is not set
-# BR2_PACKAGE_IOSTAT is not set
-# BR2_PACKAGE_IPROUTE2 is not set
-# BR2_PACKAGE_IPSEC_TOOLS is not set
-# BR2_PACKAGE_IPTABLES is not set
-# BR2_PACKAGE_JPEG is not set
-# BR2_PACKAGE_LESS is not set
-# BR2_PACKAGE_LIBCGI is not set
-# BR2_PACKAGE_LIBCGICC is not set
-# BR2_PACKAGE_LIBELF is not set
-# BR2_PACKAGE_LIBFLOAT is not set
-# BR2_PACKAGE_LIBGLIB12 is not set
-# BR2_PACKAGE_LIBMAD is not set
-# BR2_PACKAGE_LIBPCAP is not set
-# BR2_PACKAGE_LIBPNG is not set
-# BR2_PACKAGE_LIBSYSFS is not set
-# BR2_PACKAGE_LIBTOOL is not set
-# BR2_PACKAGE_LIBUSB is not set
-# BR2_PACKAGE_LIGHTTPD is not set
-# BR2_PACKAGE_LINKS is not set
-# BR2_PACKAGE_LRZSZ is not set
-# BR2_PACKAGE_LTP-TESTSUITE is not set
-# BR2_PACKAGE_LTT is not set
-# BR2_PACKAGE_LVM2 is not set
-# BR2_PACKAGE_LZO is not set
-# BR2_PACKAGE_M4 is not set
-# BR2_PACKAGE_MDADM is not set
-# BR2_PACKAGE_MEMTESTER is not set
-# BR2_PACKAGE_MICROCOM is not set
-# BR2_PACKAGE_MICROPERL is not set
-# BR2_PACKAGE_MICROWIN is not set
-# BR2_PACKAGE_MKDOSFS is not set
-# BR2_PACKAGE_MODULE_INIT_TOOLS is not set
-# BR2_PACKAGE_MODUTILS is not set
-# BR2_PACKAGE_MPG123 is not set
-# BR2_PACKAGE_MROUTED is not set
-# BR2_PACKAGE_MTD is not set
-# BR2_PACKAGE_NANO is not set
-# BR2_PACKAGE_NCURSES is not set
-# BR2_PACKAGE_NETKITBASE is not set
-# BR2_PACKAGE_NETKITTELNET is not set
-# BR2_PACKAGE_NETSNMP is not set
-# BR2_PACKAGE_NEWT is not set
-# BR2_PACKAGE_NTP is not set
-# BR2_PACKAGE_OPENNTPD is not set
-# BR2_PACKAGE_OPENSSH is not set
-# BR2_PACKAGE_OPENSSL is not set
-# BR2_PACKAGE_OPENVPN is not set
-# BR2_PACKAGE_PCIUTILS is not set
-# BR2_PACKAGE_PORTAGE is not set
-# BR2_PACKAGE_PORTMAP is not set
-# BR2_PACKAGE_PPPD is not set
-# BR2_PACKAGE_PROCPS is not set
-# BR2_PACKAGE_PSMISC is not set
-# BR2_PACKAGE_PYTHON is not set
-# BR2_PACKAGE_QTE is not set
-BR2_QTE_TMAKE_VERSION="1.13"
-# BR2_PACKAGE_RAIDTOOLS is not set
-# BR2_READLINE is not set
-# BR2_PACKAGE_RSYNC is not set
-# BR2_PACKAGE_RUBY is not set
-# BR2_PACKAGE_RXVT is not set
-# BR2_PACKAGE_SDL is not set
-# BR2_PACKAGE_SFDISK is not set
-# BR2_PACKAGE_SLANG is not set
-# BR2_PACKAGE_SMARTMONTOOLS is not set
-# BR2_PACKAGE_SOCAT is not set
-# BR2_PACKAGE_STRACE is not set
-# BR2_PACKAGE_SUDO is not set
-# BR2_PACKAGE_SYSKLOGD is not set
-# BR2_PACKAGE_SYSVINIT is not set
-# BR2_PACKAGE_TCL is not set
-# BR2_PACKAGE_TCPDUMP is not set
-# BR2_PACKAGE_TFTPD is not set
-# BR2_PACKAGE_THTTPD is not set
-# BR2_PACKAGE_TINYLOGIN is not set
-# BR2_PACKAGE_TINYX is not set
-# BR2_PACKAGE_TN5250 is not set
-# BR2_PACKAGE_TTCP is not set
-# BR2_PACKAGE_UDEV is not set
-# BR2_PACKAGE_UDHCP is not set
-# BR2_PACKAGE_UEMACS is not set
-# BR2_PACKAGE_USBUTILS is not set
-# BR2_PACKAGE_UTIL-LINUX is not set
-# BR2_PACKAGE_VALGRIND is not set
-# BR2_PACKAGE_VTUN is not set
-# BR2_PACKAGE_WGET is not set
-# BR2_PACKAGE_WHICH is not set
-# BR2_PACKAGE_WIPE is not set
-# BR2_PACKAGE_WIRELESS_TOOLS is not set
-# BR2_PACKAGE_XFSPROGS is not set
-# BR2_PACKAGE_XORG is not set
-# BR2_PACKAGE_ZLIB is not set
-BR2_PACKAGE_HPING=y
-
-#
-# Target Options
-#
-
-#
-# filesystem for target device
-#
-# BR2_TARGET_ROOTFS_CRAMFS is not set
-# BR2_TARGET_ROOTFS_CLOOP is not set
-BR2_TARGET_ROOTFS_EXT2=y
-BR2_TARGET_ROOTFS_EXT2_BLOCKS=0
-BR2_TARGET_ROOTFS_EXT2_INODES=0
-BR2_TARGET_ROOTFS_EXT2_RESBLKS=0
-BR2_TARGET_ROOTFS_EXT2_SQUASH=y
-BR2_TARGET_ROOTFS_EXT2_OUTPUT="$(IMAGE).ext2"
-# BR2_TARGET_ROOTFS_EXT2_GZ is not set
-BR2_TARGET_ROOTFS_EXT2_COPYTO=""
-# BR2_TARGET_ROOTFS_JFFS2 is not set
-# BR2_TARGET_ROOTFS_SQUASHFS is not set
-# BR2_TARGET_ROOTFS_TAR is not set
-# BR2_TARGET_ROOTFS_ISO9660 is not set
-
-#
-# bootloader for target device
-#
-# BR2_TARGET_GRUB is not set
-# BR2_TARGET_SYSLINUX is not set
-
-#
-# Board Support Options
-#
-# BR2_TARGET_SOEKRIS_NET4521 is not set
-# BR2_TARGET_SOEKRIS_NET4801 is not set
-# BR2_TARGET_VIA_EPIA_MII is not set
-
-#
-# Generic System Support
-#
-# BR2_TARGET_GENERIC_ACCESS_POINT is not set
-# BR2_TARGET_GENERIC_FIREWALL is not set
-# BR2_TARGET_GENERIC_DEV_SYSTEM is not set

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