# 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, ®s, 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(®s)));
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, ¤t->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
|