From 8cefe055e51655b4f3902bf6867f7c43a43bcc97e996f3652c9afb004bfbfa4b Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Sun, 17 Aug 2008 22:24:29 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xen?expand=0&rev=49 --- 32on64-extra-mem.patch | 14 +- blktap.patch | 18 +- blktapctrl-default-to-ioemu.patch | 14 +- block-flags.diff | 10 +- block-losetup-retry.diff | 10 +- bridge-bonding.diff | 10 +- bridge-opensuse.patch | 8 +- bridge-record-creation.patch | 10 +- bridge-vlan.diff | 16 +- build-tapdisk-ioemu.patch | 48 +++ cdrom-removable.patch | 82 ++--- const-callback-arg.patch | 165 --------- const-set-trap-table-arg.patch | 49 --- hvm-ide-flush-o_direct.patch | 18 - ioemu-blktap-barriers.patch | 18 +- ioemu-blktap-fix-open.patch | 106 ++++++ ioemu-blktap-image-format.patch | 34 +- ioemu-qcow2-multiblock-aio.patch | 6 +- keymap-vm.patch | 30 -- ns_tools.patch | 18 +- ns_xen_base.patch | 12 +- pv-driver-build.patch | 18 +- pv-drv-mkbuildtree.patch | 88 ----- pv_32_16_color_trans.patch | 39 --- pvdrv_emulation_control.patch | 8 +- qemu-security-etch1.diff | 236 ++----------- rpmlint.diff | 2 +- serial-split.patch | 8 +- snapshot-ioemu-restore.patch | 44 +-- snapshot-ioemu-save.patch | 159 ++++----- snapshot-xend.patch | 18 +- supported_module.diff | 4 +- svm-lmsl.patch | 24 +- tmp-revert-blktapctrl.patch | 26 -- vnc-i18n-keys.diff | 60 ---- x86-compat-vcpu-op.patch | 125 ------- x86-domain-shutdown-latency.patch | 70 ---- x86-pgtable-no-biglock.patch | 555 ------------------------------ x86-show-page-walk-early.patch | 66 ++-- x86_emulate.patch | 342 ------------------ xen-3.3.0-testing-src.tar.bz2 | 4 +- xen-api-auth.patch | 7 +- xen-config.diff | 22 +- xen-destdir.diff | 38 +- xen-disable-qemu-monitor.diff | 46 +-- xen-domUloader.diff | 14 +- xen-hvm-default-bridge.diff | 54 +-- xen-hvm-default-pae.diff | 2 +- xen-ioemu-hvm-pv-support.diff | 113 +++--- xen-lowmem-emergency-pool.diff | 4 +- xen-max-free-mem.diff | 20 +- xen-no-dummy-nfs-ip.diff | 2 +- xen-paths.diff | 2 +- xen-qemu-iscsi-fix.patch | 17 +- xen-tightvnc-args.diff | 4 +- xen-vnc-resize.patch | 53 --- xen-warnings.diff | 24 +- xen-xm-top-needs-root.diff | 2 +- xen-xmexample-nbd.diff | 6 +- xen.changes | 41 +++ xen.spec | 144 ++++---- xenapi-console-protocol.patch | 2 +- xenctx.patch | 163 --------- xend-config.diff | 9 +- xend-core-dump-loc.diff | 2 +- xend-domain-lock.patch | 328 ++++++++++++++++++ xm-test-cleanup.diff | 6 +- 67 files changed, 1102 insertions(+), 2615 deletions(-) create mode 100644 build-tapdisk-ioemu.patch delete mode 100644 const-callback-arg.patch delete mode 100644 const-set-trap-table-arg.patch delete mode 100644 hvm-ide-flush-o_direct.patch create mode 100644 ioemu-blktap-fix-open.patch delete mode 100644 keymap-vm.patch delete mode 100644 pv-drv-mkbuildtree.patch delete mode 100644 pv_32_16_color_trans.patch delete mode 100644 tmp-revert-blktapctrl.patch delete mode 100644 vnc-i18n-keys.diff delete mode 100644 x86-compat-vcpu-op.patch delete mode 100644 x86-domain-shutdown-latency.patch delete mode 100644 x86-pgtable-no-biglock.patch delete mode 100644 x86_emulate.patch delete mode 100644 xen-vnc-resize.patch delete mode 100644 xenctx.patch create mode 100644 xend-domain-lock.patch diff --git a/32on64-extra-mem.patch b/32on64-extra-mem.patch index 0e621a4..643e1e7 100644 --- a/32on64-extra-mem.patch +++ b/32on64-extra-mem.patch @@ -1,13 +1,13 @@ -Index: xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-3.2.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-3.2.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1844,7 +1844,7 @@ class XendDomainInfo: - xc.domain_setmaxmem(self.domid, maxmem) +--- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py +@@ -2251,7 +2251,7 @@ class XendDomainInfo: + vtd_mem = ((vtd_mem + 1023) / 1024) * 1024 # Make sure there's enough RAM available for the domain -- balloon.free(memory + shadow) -+ balloon.free(memory + shadow + 512) +- balloon.free(memory + shadow + vtd_mem) ++ balloon.free(memory + shadow + vtd_mem + 512) # Set up the shadow memory shadow_cur = xc.shadow_mem_control(self.domid, shadow / 1024) diff --git a/blktap.patch b/blktap.patch index a8b5a98..f1073df 100644 --- a/blktap.patch +++ b/blktap.patch @@ -5,7 +5,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2586,7 +2586,7 @@ class XendDomainInfo: +@@ -2606,7 +2606,7 @@ class XendDomainInfo: (fn, BOOTLOADER_LOOPBACK_DEVICE)) vbd = { @@ -14,23 +14,23 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py 'device': BOOTLOADER_LOOPBACK_DEVICE, } -Index: xen-3.3.0-testing/tools/ioemu/xenstore.c +Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/xenstore.c -+++ xen-3.3.0-testing/tools/ioemu/xenstore.c -@@ -85,9 +85,9 @@ void xenstore_parse_domain_config(int hv +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c ++++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c +@@ -151,9 +151,9 @@ void xenstore_parse_domain_config(int hv { char **e = NULL; char *buf = NULL, *path; - char *fpath = NULL, *bpath = NULL, + char *fpath = NULL, *bpath = NULL, *btype = NULL, *dev = NULL, *params = NULL, *type = NULL, *drv = NULL; -- int i, is_scsi, is_hdN = 0; -+ int i, is_scsi, is_tap, is_hdN = 0; +- int i, any_hdN = 0, ret; ++ int i, any_hdN = 0, ret, is_tap; unsigned int len, num, hd_index, pci_devid = 0; BlockDriverState *bs; BlockDriver *format; -@@ -122,6 +122,14 @@ void xenstore_parse_domain_config(int hv +@@ -188,6 +188,14 @@ void xenstore_parse_domain_config(int hv bpath = xs_read(xsh, XBT_NULL, buf, &len); if (bpath == NULL) continue; @@ -45,7 +45,7 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c /* read the name of the device */ if (pasprintf(&buf, "%s/dev", bpath) == -1) continue; -@@ -364,6 +372,7 @@ void xenstore_parse_domain_config(int hv +@@ -429,6 +437,7 @@ void xenstore_parse_domain_config(int hv free(type); free(params); free(dev); diff --git a/blktapctrl-default-to-ioemu.patch b/blktapctrl-default-to-ioemu.patch index 87a1ec5..fd85298 100644 --- a/blktapctrl-default-to-ioemu.patch +++ b/blktapctrl-default-to-ioemu.patch @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c =================================================================== --- xen-3.3.0-testing.orig/tools/blktap/drivers/blktapctrl.c +++ xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c -@@ -503,6 +503,7 @@ static int launch_tapdisk_provider(char +@@ -474,6 +474,7 @@ static int launch_tapdisk_provider(char return child; } @@ -10,7 +10,7 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c static int launch_tapdisk(char *wrctldev, char *rdctldev) { char *argv[] = { "tapdisk", wrctldev, rdctldev, NULL }; -@@ -512,6 +513,7 @@ static int launch_tapdisk(char *wrctldev +@@ -483,6 +484,7 @@ static int launch_tapdisk(char *wrctldev return 0; } @@ -18,7 +18,7 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c static int launch_tapdisk_ioemu(void) { -@@ -583,6 +585,7 @@ static int connect_qemu(blkif_t *blkif, +@@ -554,6 +556,7 @@ static int connect_qemu(blkif_t *blkif, return 0; } @@ -26,15 +26,15 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c /* Launch tapdisk instance */ static int connect_tapdisk(blkif_t *blkif, int minor) { -@@ -626,6 +629,7 @@ fail: +@@ -597,6 +600,7 @@ fail: return ret; } +#endif - int blktapctrl_new_blkif(blkif_t *blkif) + static int blktapctrl_new_blkif(blkif_t *blkif) { -@@ -650,6 +654,7 @@ int blktapctrl_new_blkif(blkif_t *blkif) +@@ -621,6 +625,7 @@ static int blktapctrl_new_blkif(blkif_t blkif->cookie = next_cookie++; if (!exist) { @@ -42,7 +42,7 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c if (type == DISK_TYPE_IOEMU) { if (connect_qemu(blkif, blkif->domid)) goto fail; -@@ -657,6 +662,10 @@ int blktapctrl_new_blkif(blkif_t *blkif) +@@ -628,6 +633,10 @@ static int blktapctrl_new_blkif(blkif_t if (connect_tapdisk(blkif, minor)) goto fail; } diff --git a/block-flags.diff b/block-flags.diff index 98f6094..2802368 100644 --- a/block-flags.diff +++ b/block-flags.diff @@ -1,8 +1,8 @@ -Index: xen-3.2-testing/tools/examples/block +Index: xen-3.3.0-testing/tools/examples/block =================================================================== ---- xen-3.2-testing.orig/tools/examples/block -+++ xen-3.2-testing/tools/examples/block -@@ -217,11 +217,14 @@ case "$command" in +--- xen-3.3.0-testing.orig/tools/examples/block ++++ xen-3.3.0-testing/tools/examples/block +@@ -225,11 +225,14 @@ case "$command" in ;; file) @@ -17,7 +17,7 @@ Index: xen-3.2-testing/tools/examples/block claim_lock "block" -@@ -330,12 +333,12 @@ mount it read-write in a guest domain." +@@ -338,12 +341,12 @@ mount it read-write in a guest domain." fatal 'Failed to find an unused loop device' fi diff --git a/block-losetup-retry.diff b/block-losetup-retry.diff index 222bb48..9d7d727 100644 --- a/block-losetup-retry.diff +++ b/block-losetup-retry.diff @@ -1,8 +1,8 @@ -Index: xen-3.2-testing/tools/examples/block +Index: xen-3.3.0-testing/tools/examples/block =================================================================== ---- xen-3.2-testing.orig/tools/examples/block -+++ xen-3.2-testing/tools/examples/block -@@ -233,107 +233,111 @@ case "$command" in +--- xen-3.3.0-testing.orig/tools/examples/block ++++ xen-3.3.0-testing/tools/examples/block +@@ -241,107 +241,111 @@ case "$command" in mount it read-write in a guest domain." fi @@ -188,7 +188,7 @@ Index: xen-3.2-testing/tools/examples/block xenstore_write "$XENBUS_PATH/node" "$loopdev" write_dev "$loopdev" release_lock "block" -@@ -356,8 +360,18 @@ mount it read-write in a guest domain." +@@ -364,8 +368,18 @@ mount it read-write in a guest domain." file) node=$(xenstore_read "$XENBUS_PATH/node") diff --git a/bridge-bonding.diff b/bridge-bonding.diff index 3c43679..80f5e8b 100644 --- a/bridge-bonding.diff +++ b/bridge-bonding.diff @@ -1,8 +1,8 @@ -Index: xen-3.2-testing/tools/examples/network-bridge +Index: xen-3.3.0-testing/tools/examples/network-bridge =================================================================== ---- xen-3.2-testing.orig/tools/examples/network-bridge -+++ xen-3.2-testing/tools/examples/network-bridge -@@ -230,6 +230,9 @@ op_start () { +--- xen-3.3.0-testing.orig/tools/examples/network-bridge ++++ xen-3.3.0-testing/tools/examples/network-bridge +@@ -241,6 +241,9 @@ op_start () { return fi @@ -12,7 +12,7 @@ Index: xen-3.2-testing/tools/examples/network-bridge vlans=$(find_active_vlans "${netdev}") for vlan in $vlans ; do ifdown $vlan ; done -@@ -243,13 +246,27 @@ op_start () { +@@ -254,13 +257,27 @@ op_start () { ip link set ${netdev} down ip addr flush ${netdev} fi diff --git a/bridge-opensuse.patch b/bridge-opensuse.patch index a8884cd..62d895d 100644 --- a/bridge-opensuse.patch +++ b/bridge-opensuse.patch @@ -1,8 +1,8 @@ -Index: xen-3.2.1-testing/tools/examples/network-bridge +Index: xen-3.3.0-testing/tools/examples/network-bridge =================================================================== ---- xen-3.2.1-testing.orig/tools/examples/network-bridge -+++ xen-3.2.1-testing/tools/examples/network-bridge -@@ -242,18 +242,18 @@ op_stop () { +--- xen-3.3.0-testing.orig/tools/examples/network-bridge ++++ xen-3.3.0-testing/tools/examples/network-bridge +@@ -253,18 +253,18 @@ op_stop () { transfer_addrs ${bridge} ${pdev} if ! ifdown ${bridge}; then get_ip_info ${bridge} diff --git a/bridge-record-creation.patch b/bridge-record-creation.patch index 1226a6f..c36fe6b 100644 --- a/bridge-record-creation.patch +++ b/bridge-record-creation.patch @@ -1,8 +1,8 @@ -Index: xen-3.2.1-testing/tools/examples/network-bridge +Index: xen-3.3.0-testing/tools/examples/network-bridge =================================================================== ---- xen-3.2.1-testing.orig/tools/examples/network-bridge -+++ xen-3.2.1-testing/tools/examples/network-bridge -@@ -238,6 +238,11 @@ op_start () { +--- xen-3.3.0-testing.orig/tools/examples/network-bridge ++++ xen-3.3.0-testing/tools/examples/network-bridge +@@ -249,6 +249,11 @@ op_start () { create_bridge ${tdev} @@ -14,7 +14,7 @@ Index: xen-3.2.1-testing/tools/examples/network-bridge preiftransfer ${netdev} transfer_addrs ${netdev} ${tdev} if ! ifdown ${netdev}; then -@@ -302,6 +307,13 @@ op_stop () { +@@ -313,6 +318,13 @@ op_stop () { ip link set ${pdev} name ${netdev} do_ifup ${netdev} diff --git a/bridge-vlan.diff b/bridge-vlan.diff index bdb5e3e..3d834a0 100644 --- a/bridge-vlan.diff +++ b/bridge-vlan.diff @@ -1,8 +1,8 @@ -Index: xen-3.2.1-testing/tools/examples/network-bridge +Index: xen-3.3.0-testing/tools/examples/network-bridge =================================================================== ---- xen-3.2.1-testing.orig/tools/examples/network-bridge -+++ xen-3.2.1-testing/tools/examples/network-bridge -@@ -180,6 +180,28 @@ antispoofing () { +--- xen-3.3.0-testing.orig/tools/examples/network-bridge ++++ xen-3.3.0-testing/tools/examples/network-bridge +@@ -191,6 +191,28 @@ antispoofing () { iptables -A FORWARD -m physdev --physdev-in ${pdev} -j ACCEPT } @@ -31,7 +31,7 @@ Index: xen-3.2.1-testing/tools/examples/network-bridge # Usage: show_status dev bridge # Print ifconfig and routes. show_status () { -@@ -208,6 +230,9 @@ op_start () { +@@ -219,6 +241,9 @@ op_start () { return fi @@ -41,7 +41,7 @@ Index: xen-3.2.1-testing/tools/examples/network-bridge create_bridge ${tdev} preiftransfer ${netdev} -@@ -226,6 +251,8 @@ op_start () { +@@ -237,6 +262,8 @@ op_start () { add_to_bridge2 ${bridge} ${pdev} do_ifup ${bridge} @@ -50,7 +50,7 @@ Index: xen-3.2.1-testing/tools/examples/network-bridge if [ ${antispoof} = 'yes' ] ; then antispoofing fi -@@ -239,6 +266,9 @@ op_stop () { +@@ -250,6 +277,9 @@ op_stop () { return fi @@ -60,7 +60,7 @@ Index: xen-3.2.1-testing/tools/examples/network-bridge transfer_addrs ${bridge} ${pdev} if ! ifdown ${bridge}; then get_ip_info ${bridge} -@@ -254,6 +284,8 @@ op_stop () { +@@ -265,6 +295,8 @@ op_stop () { ip link set ${pdev} down ip link set ${pdev} name ${netdev} do_ifup ${netdev} diff --git a/build-tapdisk-ioemu.patch b/build-tapdisk-ioemu.patch new file mode 100644 index 0000000..c1f4f5f --- /dev/null +++ b/build-tapdisk-ioemu.patch @@ -0,0 +1,48 @@ +Index: xen-3.3.0-testing/tools/ioemu-remote/Makefile +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/Makefile ++++ xen-3.3.0-testing/tools/ioemu-remote/Makefile +@@ -31,13 +31,6 @@ subdir-%: libqemu_common.a + + recurse-all: $(patsubst %,subdir-%, $(TARGET_DIRS)) + +-tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/libxc +-tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/blktap/lib +-tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/xenstore +-tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/include +-tapdisk-ioemu: tapdisk-ioemu.c cutils.c block.c block-raw.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c block-qcow2.c hw/xen_blktap.c osdep.c +- $(CC) -DQEMU_TOOL $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) $(LDFLAGS) $(BASE_LDFLAGS) -o $@ $^ -lz $(LIBS) +- + ####################################################################### + # BLOCK_OBJS is code used by both qemu system emulation and qemu-img + +@@ -46,6 +39,16 @@ BLOCK_OBJS+=block-cow.o block-qcow.o aes + BLOCK_OBJS+=block-dmg.o block-bochs.o block-vpc.o block-vvfat.o + BLOCK_OBJS+=block-qcow2.o block-parallels.o + ++####################################################################### ++# tapdisk-ioemu ++ ++tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/libxc ++tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/blktap/lib ++tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/xenstore ++tapdisk-ioemu: CPPFLAGS += -I$(XEN_ROOT)/tools/include ++tapdisk-ioemu: tapdisk-ioemu.c $(BLOCK_OBJS) qemu-img-block.o qemu-img-block-raw-posix.o hw/xen_blktap.c ++ $(CC) -DQEMU_TOOL -DQEMU_IMG $(CFLAGS) $(CPPFLAGS) $(BASE_CFLAGS) $(LDFLAGS) $(BASE_LDFLAGS) -o $@ $^ -lz $(LIBS) ++ + ###################################################################### + # libqemu_common.a: Target independent part of system emulation. The + # long term path is to suppress *all* target specific code in case of +Index: xen-3.3.0-testing/tools/ioemu-remote/configure +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/configure ++++ xen-3.3.0-testing/tools/ioemu-remote/configure +@@ -1150,7 +1150,7 @@ fi + + echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_h + +-tools= ++tools="tapdisk-ioemu" + if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then + tools="qemu-img\$(EXESUF) $tools" + fi diff --git a/cdrom-removable.patch b/cdrom-removable.patch index f08bcd3..16ba5d4 100644 --- a/cdrom-removable.patch +++ b/cdrom-removable.patch @@ -1,7 +1,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py =================================================================== ---- /dev/null -+++ xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py 2008-08-12 07:36:39.000000000 -0600 @@ -0,0 +1,238 @@ +#!/usr/bin/env python +# -*- mode: python; -*- @@ -243,8 +243,8 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py + Index: xen-3.3.0-testing/tools/python/xen/xend/server/Hald.py =================================================================== ---- /dev/null -+++ xen-3.3.0-testing/tools/python/xen/xend/server/Hald.py +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ xen-3.3.0-testing/tools/python/xen/xend/server/Hald.py 2008-08-12 07:36:39.000000000 -0600 @@ -0,0 +1,125 @@ +#============================================================================ +# This library is free software; you can redistribute it and/or @@ -373,9 +373,9 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/Hald.py + watcher.shutdown() Index: xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py =================================================================== ---- xen-3.3.0-testing.orig/tools/python/xen/xend/server/SrvServer.py -+++ xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py -@@ -56,6 +56,7 @@ from xen.web.SrvDir import SrvDir +--- xen-3.3.0-testing.orig/tools/python/xen/xend/server/SrvServer.py 2008-08-11 12:44:35.000000000 -0600 ++++ xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py 2008-08-12 07:36:39.000000000 -0600 +@@ -56,6 +56,7 @@ from SrvRoot import SrvRoot from XMLRPCServer import XMLRPCServer @@ -383,7 +383,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py xoptions = XendOptions.instance() -@@ -245,6 +246,8 @@ def _loadConfig(servers, root, reload): +@@ -245,6 +246,8 @@ if xoptions.get_xend_unix_xmlrpc_server(): servers.add(XMLRPCServer(XendAPI.AUTH_PAM, False)) @@ -392,28 +392,28 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py def create(): root = SrvDir() -Index: xen-3.3.0-testing/tools/ioemu/xenstore.c +Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/xenstore.c -+++ xen-3.3.0-testing/tools/ioemu/xenstore.c -@@ -230,6 +230,16 @@ void xenstore_parse_domain_config(int hv - */ - waitForDevice(params); - } -+ /* if pyhsical CDROM put a watch on media-present after creating it */ -+ if (type && !strcmp(type, "cdrom") && drv && !strcmp(drv, "phy")) { -+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) { -+ if (bdrv_is_inserted(bs_table[hd_index + (is_scsi ? MAX_DISKS : 0)])) -+ xs_write(xsh, XBT_NULL, buf, "1", strlen("1")); -+ else -+ xs_write(xsh, XBT_NULL, buf, "0", strlen("0")); -+ xs_watch(xsh, buf, "media-present"); +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c 2008-08-11 12:36:15.000000000 -0600 ++++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c 2008-08-12 07:48:22.000000000 -0600 +@@ -297,6 +297,16 @@ + bdrv_set_type_hint(bs, BDRV_TYPE_CDROM); + if (pasprintf(&buf, "%s/params", bpath) != -1) + xs_watch(xsh, buf, dev); ++ /* if pyhsical put a watch on media-present */ ++ if (drv && !strcmp(drv, "phy")) { ++ if (pasprintf(&buf, "%s/media-present", bpath) != -1) { ++ if (bdrv_is_inserted(bs)) ++ xs_write(xsh, XBT_NULL, buf, "1", strlen("1")); ++ else ++ xs_write(xsh, XBT_NULL, buf, "0", strlen("0")); ++ xs_watch(xsh, buf, "media-present"); ++ } + } -+ } } - bs = bs_table[hd_index + (is_scsi ? MAX_DISKS : 0)] = bdrv_new(dev); -@@ -566,6 +576,50 @@ void xenstore_record_dm_state(char *stat + /* open device now if media present */ +@@ -631,6 +641,50 @@ xenstore_record_dm("state", state); } @@ -464,7 +464,7 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c void xenstore_process_event(void *opaque) { char **vec, *offset, *bpath = NULL, *buf = NULL, *drv = NULL, *image = NULL; -@@ -585,6 +639,11 @@ void xenstore_process_event(void *opaque +@@ -650,6 +704,11 @@ goto out; } @@ -476,31 +476,3 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c if (strncmp(vec[XS_WATCH_TOKEN], "hd", 2) || strlen(vec[XS_WATCH_TOKEN]) != 3) goto out; -Index: xen-3.3.0-testing/tools/ioemu/hw/ide.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/ide.c -+++ xen-3.3.0-testing/tools/ioemu/hw/ide.c -@@ -361,6 +361,7 @@ typedef struct IDEState { - uint8_t *io_buffer; - QEMUTimer *sector_write_timer; /* only used for win2k instal hack */ - uint32_t irq_count; /* counts IRQs when using win2k install hack */ -+ uint8_t send_ua; /* send SENSE_UNIT_ATTENTION on next ready */ - } IDEState; - - #define BM_STATUS_DMAING 0x01 -@@ -1462,8 +1463,15 @@ static void ide_atapi_cmd(IDEState *s) - ASC_MEDIUM_MAY_HAVE_CHANGED); - break; - } -+ if (s->send_ua) { -+ ide_atapi_cmd_error(s, SENSE_UNIT_ATTENTION, -+ ASC_MEDIUM_NOT_PRESENT); -+ s->send_ua = 0; -+ break; -+ } - ide_atapi_cmd_ok(s); - } else { -+ s->send_ua = 1; - ide_atapi_cmd_error(s, SENSE_NOT_READY, - ASC_MEDIUM_NOT_PRESENT); - xenstore_check_new_media_present(1000); diff --git a/const-callback-arg.patch b/const-callback-arg.patch deleted file mode 100644 index 1ffbac9..0000000 --- a/const-callback-arg.patch +++ /dev/null @@ -1,165 +0,0 @@ -Index: xen-3.2.1-testing/xen/arch/ia64/xen/hypercall.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/ia64/xen/hypercall.c -+++ xen-3.2.1-testing/xen/arch/ia64/xen/hypercall.c -@@ -34,9 +34,6 @@ - #include - #include - --extern long do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg); --extern long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg); -- - static IA64FAULT - xen_hypercall (struct pt_regs *regs) - { -@@ -457,7 +454,7 @@ static long unregister_guest_callback(st - /* First time to add callback to xen/ia64, so let's just stick to - * the newer callback interface. - */ --long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg) -+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg) - { - long ret; - -Index: xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_32/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c -@@ -419,7 +419,7 @@ static long unregister_guest_callback(st - } - - --long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg) -+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg) - { - long ret; - -Index: xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_64/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c -@@ -470,7 +470,7 @@ static long unregister_guest_callback(st - } - - --long do_callback_op(int cmd, XEN_GUEST_HANDLE(void) arg) -+long do_callback_op(int cmd, XEN_GUEST_HANDLE(cvoid) arg) - { - long ret; - -Index: xen-3.2.1-testing/xen/include/asm-x86/guest_access.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/guest_access.h -+++ xen-3.2.1-testing/xen/include/asm-x86/guest_access.h -@@ -34,7 +34,8 @@ - */ - #define copy_to_guest_offset(hnd, off, ptr, nr) ({ \ - const typeof(*(ptr)) *_s = (ptr); \ -- char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ -+ void *_p = (hnd).p; \ -+ char (*_d)[sizeof(*_s)] = _p; \ - ((void)((hnd).p == (ptr))); \ - is_hvm_vcpu(current) ? \ - copy_to_user_hvm(_d+(off), _s, sizeof(*_s)*(nr)) : \ -@@ -82,7 +83,8 @@ - - #define __copy_to_guest_offset(hnd, off, ptr, nr) ({ \ - const typeof(*(ptr)) *_s = (ptr); \ -- char (*_d)[sizeof(*_s)] = (void *)(hnd).p; \ -+ void *_p = (hnd).p; \ -+ char (*_d)[sizeof(*_s)] = _p; \ - ((void)((hnd).p == (ptr))); \ - is_hvm_vcpu(current) ? \ - copy_to_user_hvm(_d+(off), _s, sizeof(*_s)*(nr)) : \ -Index: xen-3.2.1-testing/xen/include/public/arch-ia64.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/public/arch-ia64.h -+++ xen-3.2.1-testing/xen/include/public/arch-ia64.h -@@ -53,18 +53,7 @@ - #endif - - #ifndef __ASSEMBLY__ --/* Guest handles for primitive C types. */ --__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char); --__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int); --__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long); --__DEFINE_XEN_GUEST_HANDLE(u64, unsigned long); --DEFINE_XEN_GUEST_HANDLE(char); --DEFINE_XEN_GUEST_HANDLE(int); --DEFINE_XEN_GUEST_HANDLE(long); --DEFINE_XEN_GUEST_HANDLE(void); -- - typedef unsigned long xen_pfn_t; --DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); - #define PRI_xen_pfn "lx" - #endif - -Index: xen-3.2.1-testing/xen/include/public/arch-powerpc.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/public/arch-powerpc.h -+++ xen-3.2.1-testing/xen/include/public/arch-powerpc.h -@@ -49,17 +49,7 @@ - #endif - - #ifndef __ASSEMBLY__ --/* Guest handles for primitive C types. */ --__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char); --__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int); --__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long); --DEFINE_XEN_GUEST_HANDLE(char); --DEFINE_XEN_GUEST_HANDLE(int); --DEFINE_XEN_GUEST_HANDLE(long); --DEFINE_XEN_GUEST_HANDLE(void); -- - typedef unsigned long long xen_pfn_t; --DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); - #define PRI_xen_pfn "llx" - #endif - -Index: xen-3.2.1-testing/xen/include/public/arch-x86/xen.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/public/arch-x86/xen.h -+++ xen-3.2.1-testing/xen/include/public/arch-x86/xen.h -@@ -55,17 +55,7 @@ - #endif - - #ifndef __ASSEMBLY__ --/* Guest handles for primitive C types. */ --__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char); --__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int); --__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long); --DEFINE_XEN_GUEST_HANDLE(char); --DEFINE_XEN_GUEST_HANDLE(int); --DEFINE_XEN_GUEST_HANDLE(long); --DEFINE_XEN_GUEST_HANDLE(void); -- - typedef unsigned long xen_pfn_t; --DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); - #define PRI_xen_pfn "lx" - #endif - -Index: xen-3.2.1-testing/xen/include/public/xen.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/public/xen.h -+++ xen-3.2.1-testing/xen/include/public/xen.h -@@ -39,6 +39,20 @@ - #error "Unsupported architecture" - #endif - -+#ifndef __ASSEMBLY__ -+/* Guest handles for primitive C types. */ -+DEFINE_XEN_GUEST_HANDLE(char); -+__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char); -+DEFINE_XEN_GUEST_HANDLE(int); -+__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int); -+DEFINE_XEN_GUEST_HANDLE(long); -+__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long); -+DEFINE_XEN_GUEST_HANDLE(void); -+__DEFINE_XEN_GUEST_HANDLE(cvoid, const void); -+ -+DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); -+#endif -+ - /* - * HYPERCALLS - */ diff --git a/const-set-trap-table-arg.patch b/const-set-trap-table-arg.patch deleted file mode 100644 index c8de6de..0000000 --- a/const-set-trap-table-arg.patch +++ /dev/null @@ -1,49 +0,0 @@ -Index: xen-3.2.1-testing/xen/arch/x86/traps.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/traps.c -@@ -49,6 +49,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -2884,7 +2885,7 @@ long unregister_guest_nmi_callback(void) - return 0; - } - --long do_set_trap_table(XEN_GUEST_HANDLE(trap_info_t) traps) -+long do_set_trap_table(XEN_GUEST_HANDLE(const_trap_info_t) traps) - { - struct trap_info cur; - struct vcpu *curr = current; -Index: xen-3.2.1-testing/xen/include/asm-x86/hypercall.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/hypercall.h -+++ xen-3.2.1-testing/xen/include/asm-x86/hypercall.h -@@ -32,9 +32,10 @@ extern long - do_physdev_op_compat( - XEN_GUEST_HANDLE(physdev_op_t) uop); - -+__DEFINE_XEN_GUEST_HANDLE(const_trap_info_t, const trap_info_t); - extern long - do_set_trap_table( -- XEN_GUEST_HANDLE(trap_info_t) traps); -+ XEN_GUEST_HANDLE(const_trap_info_t) traps); - - extern int - do_mmu_update( -Index: xen-3.2.1-testing/xen/include/public/arch-x86/xen.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/public/arch-x86/xen.h -+++ xen-3.2.1-testing/xen/include/public/arch-x86/xen.h -@@ -100,7 +100,6 @@ struct trap_info { - unsigned long address; /* code offset */ - }; - typedef struct trap_info trap_info_t; --DEFINE_XEN_GUEST_HANDLE(trap_info_t); - - typedef uint64_t tsc_timestamp_t; /* RDTSC timestamp */ - diff --git a/hvm-ide-flush-o_direct.patch b/hvm-ide-flush-o_direct.patch deleted file mode 100644 index aeb78f1..0000000 --- a/hvm-ide-flush-o_direct.patch +++ /dev/null @@ -1,18 +0,0 @@ -Index: xen-3.2-testing/tools/ioemu/hw/ide.c -=================================================================== ---- xen-3.2-testing.orig/tools/ioemu/hw/ide.c -+++ xen-3.2-testing/tools/ioemu/hw/ide.c -@@ -1023,12 +1023,12 @@ static void ide_write_dma_cb(void *opaqu - - /* end of transfer ? */ - if (s->nsector == 0) { -+ eot: - /* Ensure the data hit disk before telling the guest OS so. */ - if (!s->write_cache) - bdrv_flush(s->bs); - s->status = READY_STAT | SEEK_STAT; - ide_set_irq(s); -- eot: - bm->status &= ~BM_STATUS_DMAING; - bm->status |= BM_STATUS_INT; - bm->dma_cb = NULL; diff --git a/ioemu-blktap-barriers.patch b/ioemu-blktap-barriers.patch index 352717f..781c1b6 100644 --- a/ioemu-blktap-barriers.patch +++ b/ioemu-blktap-barriers.patch @@ -1,8 +1,8 @@ -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c -@@ -349,6 +349,15 @@ static void qemu_send_responses(void* op +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c +@@ -357,6 +357,15 @@ static void qemu_send_responses(void* op } /** @@ -18,7 +18,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c * Callback function for the IO message pipe. Reads requests from the ring * and processes them (call qemu read/write functions). * -@@ -367,6 +376,7 @@ static void handle_blktap_iomsg(void* pr +@@ -375,6 +384,7 @@ static void handle_blktap_iomsg(void* pr blkif_t *blkif = s->blkif; tapdev_info_t *info = s->ring_info; int page_size = getpagesize(); @@ -26,7 +26,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c struct aiocb_info *aiocb_info; -@@ -399,7 +409,7 @@ static void handle_blktap_iomsg(void* pr +@@ -407,7 +417,7 @@ static void handle_blktap_iomsg(void* pr /* Don't allow writes on readonly devices */ if ((s->flags & TD_RDONLY) && @@ -35,7 +35,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c blkif->pending_list[idx].status = BLKIF_RSP_ERROR; goto send_response; } -@@ -420,7 +430,7 @@ static void handle_blktap_iomsg(void* pr +@@ -428,7 +438,7 @@ static void handle_blktap_iomsg(void* pr DPRINTF("Sector request failed:\n"); DPRINTF("%s request, idx [%d,%d] size [%llu], " "sector [%llu,%llu]\n", @@ -44,7 +44,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c "WRITE" : "READ"), idx,i, (long long unsigned) -@@ -433,8 +443,14 @@ static void handle_blktap_iomsg(void* pr +@@ -441,8 +451,14 @@ static void handle_blktap_iomsg(void* pr blkif->pending_list[idx].secs_pending += nsects; @@ -60,7 +60,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c case BLKIF_OP_WRITE: aiocb_info = malloc(sizeof(*aiocb_info)); -@@ -454,6 +470,10 @@ static void handle_blktap_iomsg(void* pr +@@ -462,6 +478,10 @@ static void handle_blktap_iomsg(void* pr DPRINTF("ERROR: bdrv_write() == NULL\n"); goto send_response; } diff --git a/ioemu-blktap-fix-open.patch b/ioemu-blktap-fix-open.patch new file mode 100644 index 0000000..ea40a1a --- /dev/null +++ b/ioemu-blktap-fix-open.patch @@ -0,0 +1,106 @@ +commit 51259318c6d40d5dd962c92c561826714361120a +Author: Kevin Wolf +Date: Wed Jul 23 10:51:07 2008 +0200 + + qemu-xen: Fix open_disk for blktap disks + + Signed-off-by: Kevin Wolf + +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c +@@ -32,6 +32,11 @@ + #include + #include + ++#ifndef QEMU_TOOL ++#include "qemu-common.h" ++#include "sysemu.h" ++#endif ++ + #include "xen_blktap.h" + #include "block_int.h" + #include "qemu-char.h" +@@ -217,13 +222,15 @@ static int map_new_dev(struct td_state * + + static int open_disk(struct td_state *s, char *path, int readonly) + { +- struct disk_id id; + BlockDriverState* bs; ++ char* devname; ++ static int devnumber = 0; ++ int i; + +- DPRINTF("Opening %s\n", path); +- bs = calloc(1, sizeof(*bs)); +- +- memset(&id, 0, sizeof(struct disk_id)); ++ DPRINTF("Opening %s as blktap%d\n", path, devnumber); ++ asprintf(&devname, "blktap%d", devnumber++); ++ bs = bdrv_new(devname); ++ free(devname); + + if (bdrv_open(bs, path, 0) != 0) { + fprintf(stderr, "Could not open image file %s\n", path); +@@ -237,6 +244,18 @@ static int open_disk(struct td_state *s, + + s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0); + ++#ifndef QEMU_TOOL ++ for (i = 0; i < MAX_DRIVES + 1; i++) { ++ if (drives_table[i].bdrv == NULL) { ++ drives_table[i].bdrv = bs; ++ drives_table[i].type = IF_BLKTAP; ++ drives_table[i].bus = 0; ++ drives_table[i].unit = 0; ++ break; ++ } ++ } ++#endif ++ + return 0; + } + +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.h +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.h ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.h +@@ -30,11 +30,6 @@ typedef uint32_t td_flag_t; + + #define TD_RDONLY 1 + +-struct disk_id { +- char *name; +- int drivertype; +-}; +- + /* This structure represents the state of an active virtual disk. */ + struct td_state { + BlockDriverState* bs; +Index: xen-3.3.0-testing/tools/ioemu-remote/sysemu.h +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/sysemu.h ++++ xen-3.3.0-testing/tools/ioemu-remote/sysemu.h +@@ -116,6 +116,7 @@ extern unsigned int nb_prom_envs; + #endif + + typedef enum { ++ IF_BLKTAP, + IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD + } BlockInterfaceType; + +Index: xen-3.3.0-testing/tools/ioemu-remote/vl.c +=================================================================== +--- xen-3.3.0-testing.orig/tools/ioemu-remote/vl.c ++++ xen-3.3.0-testing/tools/ioemu-remote/vl.c +@@ -5414,6 +5414,9 @@ static int drive_init(struct drive_opt * + case IF_PFLASH: + case IF_MTD: + break; ++ case IF_BLKTAP: ++ /* Cannot happen - silence gcc warning */ ++ break; + } + if (!file[0]) + return 0; diff --git a/ioemu-blktap-image-format.patch b/ioemu-blktap-image-format.patch index 75e0c1b..8b21cd0 100644 --- a/ioemu-blktap-image-format.patch +++ b/ioemu-blktap-image-format.patch @@ -23,7 +23,7 @@ Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h =================================================================== --- xen-3.3.0-testing.orig/tools/blktap/lib/blktaplib.h +++ xen-3.3.0-testing/tools/blktap/lib/blktaplib.h -@@ -205,6 +205,17 @@ typedef struct msg_pid { +@@ -211,6 +211,17 @@ typedef struct msg_pid { #define CTLMSG_PID 9 #define CTLMSG_PID_RSP 10 @@ -41,29 +41,25 @@ Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h /* xenstore/xenbus: */ #define DOMNAME "Domain-0" int setup_probe_watch(struct xs_handle *h); -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c -@@ -218,21 +218,34 @@ static int map_new_dev(struct td_state * +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c +@@ -222,9 +222,10 @@ static int map_new_dev(struct td_state * return -1; } -static int open_disk(struct td_state *s, char *path, int readonly) +static int open_disk(struct td_state *s, char *path, int driver, int readonly) { - struct disk_id id; BlockDriverState* bs; -- --#ifndef QEMU_TOOL + BlockDriver* drv; + char* devname; + static int devnumber = 0; int i; --#endif - - DPRINTF("Opening %s\n", path); - bs = bdrv_new("blktap"); - - memset(&id, 0, sizeof(struct disk_id)); +@@ -234,7 +235,22 @@ static int open_disk(struct td_state *s, + bs = bdrv_new(devname); + free(devname); - if (bdrv_open(bs, path, 0) != 0) { + /* Search for disk driver */ @@ -85,7 +81,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c fprintf(stderr, "Could not open image file %s\n", path); return -ENOMEM; } -@@ -524,7 +537,7 @@ static void handle_blktap_ctrlmsg(void* +@@ -529,7 +545,7 @@ static void handle_blktap_ctrlmsg(void* s = state_init(); /*Open file*/ @@ -94,11 +90,11 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c msglen = sizeof(msg_hdr_t); msg->type = CTLMSG_IMG_FAIL; msg->len = msglen; -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.h +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.h =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.h -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.h -@@ -54,4 +54,19 @@ typedef struct fd_list_entry { +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.h ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.h +@@ -50,4 +50,19 @@ typedef struct fd_list_entry { struct fd_list_entry **pprev, *next; } fd_list_entry_t; diff --git a/ioemu-qcow2-multiblock-aio.patch b/ioemu-qcow2-multiblock-aio.patch index b9e72fb..f75b809 100644 --- a/ioemu-qcow2-multiblock-aio.patch +++ b/ioemu-qcow2-multiblock-aio.patch @@ -1,7 +1,7 @@ -Index: xen-3.3.0-testing/tools/ioemu/block-qcow2.c +Index: xen-3.3.0-testing/tools/ioemu-remote/block-qcow2.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/block-qcow2.c -+++ xen-3.3.0-testing/tools/ioemu/block-qcow2.c +--- xen-3.3.0-testing.orig/tools/ioemu-remote/block-qcow2.c ++++ xen-3.3.0-testing/tools/ioemu-remote/block-qcow2.c @@ -808,6 +808,8 @@ static void qcow_aio_read_cb(void *opaqu BlockDriverState *bs = acb->common.bs; BDRVQcowState *s = bs->opaque; diff --git a/keymap-vm.patch b/keymap-vm.patch deleted file mode 100644 index f28dacb..0000000 --- a/keymap-vm.patch +++ /dev/null @@ -1,30 +0,0 @@ -Index: xen-3.3.0-testing/tools/python/xen/xend/image.py -=================================================================== ---- xen-3.3.0-testing.orig/tools/python/xen/xend/image.py -+++ xen-3.3.0-testing/tools/python/xen/xend/image.py -@@ -261,6 +261,8 @@ class ImageHandler: - ret.append('-nographic') - return ret - -+ keymap = vmConfig['platform'].get("keymap") -+ - vnc_config = {} - has_vnc = int(vmConfig['platform'].get('vnc', 0)) != 0 - has_sdl = int(vmConfig['platform'].get('sdl', 0)) != 0 -@@ -268,6 +270,8 @@ class ImageHandler: - for dev_uuid in vmConfig['console_refs']: - dev_type, dev_info = vmConfig['devices'][dev_uuid] - if dev_type == 'vfb': -+ if 'keymap' in dev_info: -+ keymap = dev_info.get('keymap',{}) - vfb_type = dev_info.get('type', {}) - if vfb_type == 'sdl': - self.display = dev_info.get('display', {}) -@@ -279,7 +283,6 @@ class ImageHandler: - has_vnc = True - break - -- keymap = vmConfig['platform'].get("keymap") - if keymap: - ret.append("-k") - ret.append(keymap) diff --git a/ns_tools.patch b/ns_tools.patch index a1a35c6..284ed32 100644 --- a/ns_tools.patch +++ b/ns_tools.patch @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/lowlevel/xc/xc.c =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/lowlevel/xc/xc.c +++ xen-3.3.0-testing/tools/python/xen/lowlevel/xc/xc.c -@@ -855,14 +855,14 @@ static PyObject *pyxc_hvm_build(XcObject +@@ -872,14 +872,14 @@ static PyObject *pyxc_hvm_build(XcObject int i; #endif char *image; @@ -21,7 +21,7 @@ Index: xen-3.3.0-testing/tools/python/xen/lowlevel/xc/xc.c return NULL; if ( xc_hvm_build(self->xc_handle, dom, memsize, image) != 0 ) -@@ -887,6 +887,7 @@ static PyObject *pyxc_hvm_build(XcObject +@@ -904,6 +904,7 @@ static PyObject *pyxc_hvm_build(XcObject va_hvm->checksum = -sum; munmap(va_map, XC_PAGE_SIZE); #endif @@ -33,7 +33,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendConfig.py -@@ -139,6 +139,7 @@ XENAPI_PLATFORM_CFG_TYPES = { +@@ -141,6 +141,7 @@ XENAPI_PLATFORM_CFG_TYPES = { 'monitor': int, 'nographic': int, 'pae' : int, @@ -45,15 +45,15 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/image.py +++ xen-3.3.0-testing/tools/python/xen/xend/image.py -@@ -538,6 +538,7 @@ class HVMImageHandler(ImageHandler): +@@ -697,6 +697,7 @@ class HVMImageHandler(ImageHandler): self.apic = int(vmConfig['platform'].get('apic', 0)) self.acpi = int(vmConfig['platform'].get('acpi', 0)) + self.extid = int(vmConfig['platform'].get('extid', 0)) self.guest_os_type = vmConfig['platform'].get('guest_os_type') + - self.vmConfig = vmConfig -@@ -671,6 +672,7 @@ class HVMImageHandler(ImageHandler): +@@ -803,6 +804,7 @@ class HVMImageHandler(ImageHandler): log.debug("store_evtchn = %d", store_evtchn) log.debug("memsize = %d", mem_mb) log.debug("vcpus = %d", self.vm.getVCpuCount()) @@ -61,7 +61,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py log.debug("acpi = %d", self.acpi) log.debug("apic = %d", self.apic) -@@ -678,6 +680,7 @@ class HVMImageHandler(ImageHandler): +@@ -810,6 +812,7 @@ class HVMImageHandler(ImageHandler): image = self.loader, memsize = mem_mb, vcpus = self.vm.getVCpuCount(), @@ -73,7 +73,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/create.py +++ xen-3.3.0-testing/tools/python/xen/xm/create.py -@@ -207,6 +207,10 @@ gopts.var('timer_mode', val='TIMER_MODE' +@@ -218,6 +218,10 @@ gopts.var('timer_mode', val='TIMER_MODE' use="""Timer mode (0=delay virtual time when ticks are missed; 1=virtual time is always wallclock time.""") @@ -84,7 +84,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py gopts.var('acpi', val='ACPI', fn=set_int, default=1, use="Disable or enable ACPI of HVM domain.") -@@ -760,7 +764,7 @@ def configure_vifs(config_devs, vals): +@@ -851,7 +855,7 @@ def configure_vifs(config_devs, vals): def configure_hvm(config_image, vals): """Create the config for HVM devices. """ diff --git a/ns_xen_base.patch b/ns_xen_base.patch index 5b0d7f9..b2bd5c5 100644 --- a/ns_xen_base.patch +++ b/ns_xen_base.patch @@ -329,10 +329,10 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/asm-offsets.c + + OFFSET(DOM_ext_vector, struct domain, arch.hvm_domain.ext_vector); } -Index: xen-3.2.1-testing/xen/arch/x86/hvm/vmx/x86_64/exits.S +Index: xen-3.2.1-testing/xen/arch/x86/hvm/vmx/entry.S =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/hvm/vmx/x86_64/exits.S -+++ xen-3.2.1-testing/xen/arch/x86/hvm/vmx/x86_64/exits.S +--- xen-3.2.1-testing.orig/xen/arch/x86/hvm/vmx/entry.S ++++ xen-3.2.1-testing/xen/arch/x86/hvm/vmx/x86_64/entry.S @@ -116,6 +116,14 @@ vmx_process_softirqs: ALIGN ENTRY(vmx_asm_do_vmentry) @@ -348,10 +348,10 @@ Index: xen-3.2.1-testing/xen/arch/x86/hvm/vmx/x86_64/exits.S cli # tests must not race interrupts movl VCPU_processor(%rbx),%eax -Index: xen-3.2.1-testing/xen/arch/x86/hvm/svm/x86_64/exits.S +Index: xen-3.2.1-testing/xen/arch/x86/hvm/svm/entry.S =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/hvm/svm/x86_64/exits.S -+++ xen-3.2.1-testing/xen/arch/x86/hvm/svm/x86_64/exits.S +--- xen-3.2.1-testing.orig/xen/arch/x86/hvm/svm/entry.S ++++ xen-3.2.1-testing/xen/arch/x86/hvm/svm/entry.S @@ -37,6 +37,14 @@ ENTRY(svm_asm_do_resume) diff --git a/pv-driver-build.patch b/pv-driver-build.patch index 82441ed..da2d6c4 100644 --- a/pv-driver-build.patch +++ b/pv-driver-build.patch @@ -1,7 +1,7 @@ -Index: xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree +Index: xen-3.3.0-testing/unmodified_drivers/linux-2.6/mkbuildtree =================================================================== ---- xen-3.2-testing.orig/unmodified_drivers/linux-2.6/mkbuildtree -+++ xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree +--- xen-3.3.0-testing.orig/unmodified_drivers/linux-2.6/mkbuildtree ++++ xen-3.3.0-testing/unmodified_drivers/linux-2.6/mkbuildtree @@ -40,7 +40,7 @@ ln -sf ${XL}/drivers/xen/core/reboot.c p mkdir -p include/asm include/xen @@ -11,10 +11,10 @@ Index: xen-3.2-testing/unmodified_drivers/linux-2.6/mkbuildtree # Need to be quite careful here: we don't want the files we link in to # risk overriding the native Linux ones (in particular, system.h must -Index: xen-3.2-testing/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h +Index: xen-3.3.0-testing/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h =================================================================== ---- xen-3.2-testing.orig/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h -+++ xen-3.2-testing/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h +--- xen-3.3.0-testing.orig/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h ++++ xen-3.3.0-testing/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h @@ -151,7 +151,7 @@ typedef irqreturn_t (*irq_handler_t)(int #endif #endif @@ -24,10 +24,10 @@ Index: xen-3.2-testing/unmodified_drivers/linux-2.6/compat-include/xen/platform- #define setup_xen_features xen_setup_features #endif -Index: xen-3.2-testing/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c +Index: xen-3.3.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c =================================================================== ---- xen-3.2-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c -+++ xen-3.2-testing/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c +--- xen-3.3.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c ++++ xen-3.3.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c @@ -119,7 +119,9 @@ void *kzalloc(size_t size, int flags) EXPORT_SYMBOL(kzalloc); #endif diff --git a/pv-drv-mkbuildtree.patch b/pv-drv-mkbuildtree.patch deleted file mode 100644 index 25ad56d..0000000 --- a/pv-drv-mkbuildtree.patch +++ /dev/null @@ -1,88 +0,0 @@ -Index: 2008-01-07/unmodified_drivers/linux-2.6/mkbuildtree -=================================================================== ---- 2008-01-07.orig/unmodified_drivers/linux-2.6/mkbuildtree 2007-10-09 11:46:22.000000000 +0200 -+++ 2008-01-07/unmodified_drivers/linux-2.6/mkbuildtree 2008-01-17 17:32:01.000000000 +0100 -@@ -8,27 +8,28 @@ else - echo "This may be overridden on the command line (i386,x86_64,ia64)." - fi - --C=$PWD -+C=$(cd $(dirname $0) && pwd) -+R=${C%/*/*} - - if [ -n "$XEN" -a -d "$XEN" ]; then - XEN=$(cd $XEN && pwd) - else -- XEN=$C/../../xen -+ XEN=$R/xen - fi -+echo "Xen tree: $XEN" - - if [ -n "$XL" -a -d "$XL" ]; then - XL=$(cd $XL && pwd) - else -- XL=$C/../../linux-2.6.18-xen.hg -+ XL=$R/linux-2.6.18-xen.hg - fi -+echo "Linux tree: $XL" - --for d in $(find ${XL}/drivers/xen/ -maxdepth 1 -type d | sed -e 1d); do -- if ! echo $d | egrep -q back; then -- lndir $d $(basename $d) > /dev/null 2>&1 -- fi -- if ! echo $d | egrep -q ball; then -- lndir $d $(basename $d) > /dev/null 2>&1 -- fi -+cd $C -+ -+for d in $(find ${XL}/drivers/xen/ -mindepth 1 -maxdepth 1 -type d); do -+ test -d $(basename $d) || continue -+ lndir $d $(basename $d) > /dev/null 2>&1 - done - - ln -sf ${XL}/drivers/xen/core/gnttab.c platform-pci -@@ -44,23 +45,27 @@ ln -nsf ${XEN}/include/public include/xe - # Need to be quite careful here: we don't want the files we link in to - # risk overriding the native Linux ones (in particular, system.h must - # be native and not xenolinux). --case "$uname" --in --"x86_64") -- ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/hypervisor.h include/asm -- ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/hypercall.h include/asm -- ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/synch_bitops.h include/asm -- ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/maddr.h include/asm -- ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/gnttab_dma.h include/asm -- mkdir -p include/asm-i386 -- lndir -silent ${XL}/include/asm-i386 include/asm-i386 -- ;; --i[34567]86) -- ln -sf ${XL}/include/asm-i386/mach-xen/asm/hypervisor.h include/asm -- ln -sf ${XL}/include/asm-i386/mach-xen/asm/hypercall.h include/asm -- ln -sf ${XL}/include/asm-i386/mach-xen/asm/synch_bitops.h include/asm -- ln -sf ${XL}/include/asm-i386/mach-xen/asm/maddr.h include/asm -- ln -sf ${XL}/include/asm-i386/mach-xen/asm/gnttab_dma.h include/asm -+case "$uname" in -+i[34567]86|x86_64) -+ if [ -d ${XL}/include/asm-x86 ]; then -+ ln -sf ${XL}/include/asm-x86/mach-xen/asm/hypervisor.h include/asm -+ ln -sf ${XL}/include/asm-x86/mach-xen/asm/hypercall*.h include/asm -+ ln -sf ${XL}/include/asm-x86/mach-xen/asm/synch_bitops*.h include/asm -+ ln -sf ${XL}/include/asm-x86/mach-xen/asm/maddr*.h include/asm -+ ln -sf ${XL}/include/asm-x86/mach-xen/asm/gnttab_dma.h include/asm -+ else -+ if [ $uname = x86_64 ]; then -+ mkdir -p include/asm-i386 -+ lndir -silent ${XL}/include/asm-i386 include/asm-i386 -+ else -+ uname=i386 -+ fi -+ ln -sf ${XL}/include/asm-$uname/mach-xen/asm/hypervisor.h include/asm -+ ln -sf ${XL}/include/asm-$uname/mach-xen/asm/hypercall.h include/asm -+ ln -sf ${XL}/include/asm-$uname/mach-xen/asm/synch_bitops.h include/asm -+ ln -sf ${XL}/include/asm-$uname/mach-xen/asm/maddr.h include/asm -+ ln -sf ${XL}/include/asm-$uname/mach-xen/asm/gnttab_dma.h include/asm -+ fi - ;; - "ia64") - ln -sf ${XL}/include/asm-ia64/hypervisor.h include/asm diff --git a/pv_32_16_color_trans.patch b/pv_32_16_color_trans.patch deleted file mode 100644 index 1eb6e2f..0000000 --- a/pv_32_16_color_trans.patch +++ /dev/null @@ -1,39 +0,0 @@ -Index: xen-3.3.0-testing/tools/ioemu/hw/xenfb.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xenfb.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xenfb.c -@@ -1220,6 +1220,25 @@ static void xenfb_mouse_event(void *opaq - } \ - } - -+/* 32 bit to 16 bit pixel munging, dst algo came from RealVNC transInitTempl.h */ -+#define BLT_32_16(SRC_T,DST_T,RRS,GRS,BRS,RLS,GLS,BLS,RIM,GIM,BIM,ROM,GOM,BOM) \ -+ for (line = y ; line < h ; line++) { \ -+ SRC_T *src = (SRC_T *)(xenfb->pixels \ -+ + (line * xenfb->row_stride) \ -+ + (x * xenfb->depth / 8)); \ -+ DST_T *dst = (DST_T *)(xenfb->ds->data \ -+ + (line * xenfb->ds->linesize) \ -+ + (x * xenfb->ds->depth / 8)); \ -+ int col; \ -+ for (col = x ; col < w ; col++) { \ -+ *dst = ((((*src >> RRS & RIM) * ROM + RIM/2) / RIM) << RLS) | \ -+ ((((*src >> GRS & GIM) * GOM + GIM/2) / GIM) << GLS ) | \ -+ ((((*src >> BRS & BIM) * BOM + BIM/2) / BIM) << BLS); \ -+ src++; \ -+ dst++; \ -+ } \ -+ } -+ - - /* This copies data from the guest framebuffer region, into QEMU's copy - * NB. QEMU's copy is stored in the pixel format of a) the local X -@@ -1258,7 +1277,7 @@ static void xenfb_guest_copy(struct xenf - if (xenfb->ds->depth == 8) { - BLT(uint32_t, uint8_t, 8, 8, 8, 3, 3, 2); - } else if (xenfb->ds->depth == 16) { -- BLT(uint32_t, uint16_t, 8, 8, 8, 5, 6, 5); -+ BLT_32_16(uint32_t, uint16_t, 16, 8, 0, 11, 5, 0, 255, 255, 255, 31, 63, 31); - } else if (xenfb->ds->depth == 32) { - BLT(uint32_t, uint32_t, 8, 8, 8, 8, 8, 8); - } diff --git a/pvdrv_emulation_control.patch b/pvdrv_emulation_control.patch index 1fd2bfe..8f3762f 100644 --- a/pvdrv_emulation_control.patch +++ b/pvdrv_emulation_control.patch @@ -1,8 +1,8 @@ -Index: xen-3.2-testing/tools/ioemu/hw/xen_platform.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_platform.c =================================================================== ---- xen-3.2-testing.orig/tools/ioemu/hw/xen_platform.c -+++ xen-3.2-testing/tools/ioemu/hw/xen_platform.c -@@ -57,6 +57,19 @@ static void platform_ioport_write(void * +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_platform.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_platform.c +@@ -101,6 +101,19 @@ static void platform_ioport_write(void * net_tap_shutdown_all(); fprintf(logfile, "Done.\n"); break; diff --git a/qemu-security-etch1.diff b/qemu-security-etch1.diff index 77fe44b..6047f65 100644 --- a/qemu-security-etch1.diff +++ b/qemu-security-etch1.diff @@ -1,10 +1,10 @@ -Index: xen-3.3.0-testing/tools/ioemu/block.c +Index: xen-3.3.0-testing/tools/ioemu-remote/block.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/block.c -+++ xen-3.3.0-testing/tools/ioemu/block.c -@@ -607,6 +607,9 @@ int bdrv_write(BlockDriverState *bs, int - else +--- xen-3.3.0-testing.orig/tools/ioemu-remote/block.c ++++ xen-3.3.0-testing/tools/ioemu-remote/block.c +@@ -630,6 +630,9 @@ int bdrv_write(BlockDriverState *bs, int return 0; + } } else { + unsigned int ns = sector_num * 512; + if (ns < 0) @@ -12,190 +12,24 @@ Index: xen-3.3.0-testing/tools/ioemu/block.c return drv->bdrv_write(bs, sector_num, buf, nb_sectors); } } -Index: xen-3.3.0-testing/tools/ioemu/hw/cirrus_vga.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/ne2000.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/cirrus_vga.c -+++ xen-3.3.0-testing/tools/ioemu/hw/cirrus_vga.c -@@ -220,6 +220,20 @@ - #define CIRRUS_HOOK_NOT_HANDLED 0 - #define CIRRUS_HOOK_HANDLED 1 - -+#define BLTUNSAFE(s) \ -+ ( \ -+ ( /* check dst is within bounds */ \ -+ (s)->cirrus_blt_height * (s)->cirrus_blt_dstpitch \ -+ + ((s)->cirrus_blt_dstaddr & (s)->cirrus_addr_mask) > \ -+ (s)->vram_size \ -+ ) || \ -+ ( /* check src is within bounds */ \ -+ (s)->cirrus_blt_height * (s)->cirrus_blt_srcpitch \ -+ + ((s)->cirrus_blt_srcaddr & (s)->cirrus_addr_mask) > \ -+ (s)->vram_size \ -+ ) \ -+ ) -+ - struct CirrusVGAState; - typedef void (*cirrus_bitblt_rop_t) (struct CirrusVGAState *s, - uint8_t * dst, const uint8_t * src, -@@ -595,7 +609,7 @@ static void cirrus_invalidate_region(Cir - - for (y = 0; y < lines; y++) { - off_cur = off_begin; -- off_cur_end = off_cur + bytesperline; -+ off_cur_end = (off_cur + bytesperline) & s->cirrus_addr_mask; - off_cur &= TARGET_PAGE_MASK; - while (off_cur < off_cur_end) { - cpu_physical_memory_set_dirty(s->vram_offset + -@@ -611,7 +625,11 @@ static int cirrus_bitblt_common_patternc - { - uint8_t *dst; - -- dst = s->vram_ptr + s->cirrus_blt_dstaddr; -+ dst = s->vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask); -+ -+ if (BLTUNSAFE(s)) -+ return 0; -+ - (*s->cirrus_rop) (s, dst, src, - s->cirrus_blt_dstpitch, 0, - s->cirrus_blt_width, s->cirrus_blt_height); -@@ -627,8 +645,11 @@ static int cirrus_bitblt_solidfill(Cirru - { - cirrus_fill_t rop_func; - -+ if (BLTUNSAFE(s)) -+ return 0; -+ - rop_func = cirrus_fill[rop_to_index[blt_rop]][s->cirrus_blt_pixelwidth - 1]; -- rop_func(s, s->vram_ptr + s->cirrus_blt_dstaddr, -+ rop_func(s, s->vram_ptr + (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), - s->cirrus_blt_dstpitch, - s->cirrus_blt_width, s->cirrus_blt_height); - cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, -@@ -647,8 +668,8 @@ static int cirrus_bitblt_solidfill(Cirru - static int cirrus_bitblt_videotovideo_patterncopy(CirrusVGAState * s) - { - return cirrus_bitblt_common_patterncopy(s, -- s->vram_ptr + -- (s->cirrus_blt_srcaddr & ~7)); -+ s->vram_ptr + ((s->cirrus_blt_srcaddr & ~7) & -+ s->cirrus_addr_mask)); - } - - static void cirrus_do_copy(CirrusVGAState *s, int dst, int src, int w, int h) -@@ -698,8 +719,10 @@ static void cirrus_do_copy(CirrusVGAStat - if (notify) - vga_hw_update(); - -- (*s->cirrus_rop) (s, s->vram_ptr + s->cirrus_blt_dstaddr, -- s->vram_ptr + s->cirrus_blt_srcaddr, -+ (*s->cirrus_rop) (s, s->vram_ptr + -+ (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), -+ s->vram_ptr + -+ (s->cirrus_blt_srcaddr & s->cirrus_addr_mask), - s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, - s->cirrus_blt_width, s->cirrus_blt_height); - -@@ -725,8 +748,14 @@ static int cirrus_bitblt_videotovideo_co - s->cirrus_blt_srcaddr - s->start_addr, - s->cirrus_blt_width, s->cirrus_blt_height); - } else { -- (*s->cirrus_rop) (s, s->vram_ptr + s->cirrus_blt_dstaddr, -- s->vram_ptr + s->cirrus_blt_srcaddr, -+ -+ if (BLTUNSAFE(s)) -+ return 0; -+ -+ (*s->cirrus_rop) (s, s->vram_ptr + -+ (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), -+ s->vram_ptr + -+ (s->cirrus_blt_srcaddr & s->cirrus_addr_mask), - s->cirrus_blt_dstpitch, s->cirrus_blt_srcpitch, - s->cirrus_blt_width, s->cirrus_blt_height); - -@@ -758,8 +787,9 @@ static void cirrus_bitblt_cputovideo_nex - } else { - /* at least one scan line */ - do { -- (*s->cirrus_rop)(s, s->vram_ptr + s->cirrus_blt_dstaddr, -- s->cirrus_bltbuf, 0, 0, s->cirrus_blt_width, 1); -+ (*s->cirrus_rop)(s, s->vram_ptr + -+ (s->cirrus_blt_dstaddr & s->cirrus_addr_mask), -+ s->cirrus_bltbuf, 0, 0, s->cirrus_blt_width, 1); - cirrus_invalidate_region(s, s->cirrus_blt_dstaddr, 0, - s->cirrus_blt_width, 1); - s->cirrus_blt_dstaddr += s->cirrus_blt_dstpitch; -@@ -1875,7 +1905,7 @@ static void cirrus_mem_writeb_mode4and5_ - unsigned val = mem_value; - uint8_t *dst; - -- dst = s->vram_ptr + offset; -+ dst = s->vram_ptr + (offset &= s->cirrus_addr_mask); - for (x = 0; x < 8; x++) { - if (val & 0x80) { - *dst = s->cirrus_shadow_gr1; -@@ -1898,7 +1928,7 @@ static void cirrus_mem_writeb_mode4and5_ - unsigned val = mem_value; - uint8_t *dst; - -- dst = s->vram_ptr + offset; -+ dst = s->vram_ptr + (offset &= s->cirrus_addr_mask); - for (x = 0; x < 8; x++) { - if (val & 0x80) { - *dst = s->cirrus_shadow_gr1; -Index: xen-3.3.0-testing/tools/ioemu/hw/cirrus_vga_rop.h -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/cirrus_vga_rop.h -+++ xen-3.3.0-testing/tools/ioemu/hw/cirrus_vga_rop.h -@@ -49,6 +49,12 @@ glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(C - src = src_ - src_base; - dstpitch -= bltwidth; - srcpitch -= bltwidth; -+ -+ if (dstpitch < 0 || srcpitch < 0) { -+ /* is 0 valid? srcpitch == 0 could be useful */ -+ return; -+ } -+ - for (y = 0; y < bltheight; y++) { - for (x = 0; x < bltwidth; x++) { - ROP_OP(*(dst_base + m(dst)), *(src_base + m(src))); -Index: xen-3.3.0-testing/tools/ioemu/hw/i8259.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/i8259.c -+++ xen-3.3.0-testing/tools/ioemu/hw/i8259.c -@@ -299,9 +299,11 @@ static void pic_ioport_write(void *opaqu - s->init_state = 1; - s->init4 = val & 1; - if (val & 0x02) -- hw_error("single mode not supported"); -+ /* hw_error("single mode not supported"); */ -+ return; - if (val & 0x08) -- hw_error("level sensitive irq not supported"); -+ /* hw_error("level sensitive irq not supported"); */ -+ return; - } else if (val & 0x08) { - if (val & 0x04) - s->poll = 1; -Index: xen-3.3.0-testing/tools/ioemu/hw/ne2000.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/ne2000.c -+++ xen-3.3.0-testing/tools/ioemu/hw/ne2000.c -@@ -221,7 +221,7 @@ static int ne2000_can_receive(void *opaq +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/ne2000.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/ne2000.c +@@ -218,7 +218,7 @@ static int ne2000_can_receive(void *opaq NE2000State *s = opaque; - + if (s->cmd & E8390_STOP) - return 1; + return 0; return !ne2000_buffer_full(s); } -Index: xen-3.3.0-testing/tools/ioemu/hw/pc.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/pc.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/pc.c -+++ xen-3.3.0-testing/tools/ioemu/hw/pc.c -@@ -313,7 +313,8 @@ void bochs_bios_write(void *opaque, uint +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/pc.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/pc.c +@@ -387,7 +387,8 @@ static void bochs_bios_write(void *opaqu case 0x400: case 0x401: fprintf(stderr, "BIOS panic at rombios.c, line %d\n", val); @@ -205,7 +39,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/pc.c case 0x402: case 0x403: #ifdef DEBUG_BIOS -@@ -336,8 +337,9 @@ void bochs_bios_write(void *opaque, uint +@@ -410,8 +411,9 @@ static void bochs_bios_write(void *opaqu /* LGPL'ed VGA BIOS messages */ case 0x501: case 0x502: @@ -216,33 +50,19 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/pc.c case 0x500: case 0x503: #ifdef DEBUG_BIOS -Index: xen-3.3.0-testing/tools/ioemu/target-i386/translate.c +Index: xen-3.3.0-testing/tools/ioemu-remote/target-i386/translate.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/target-i386/translate.c -+++ xen-3.3.0-testing/tools/ioemu/target-i386/translate.c -@@ -5326,7 +5326,12 @@ static target_ulong disas_insn(DisasCont - if (CODE64(s)) - goto illegal_op; - val = ldub_code(s->pc++); -- gen_op_aam(val); -+ /* taviso: operand can be zero */ -+ if (val) { -+ gen_op_aam(val); -+ } else { -+ gen_exception(s, EXCP00_DIVZ, s->pc - s->cs_base); -+ } - s->cc_op = CC_OP_LOGICB; - break; - case 0xd5: /* aad */ -@@ -5374,6 +5379,7 @@ static target_ulong disas_insn(DisasCont +--- xen-3.3.0-testing.orig/tools/ioemu-remote/target-i386/translate.c ++++ xen-3.3.0-testing/tools/ioemu-remote/target-i386/translate.c +@@ -5661,6 +5661,7 @@ static target_ulong disas_insn(DisasCont gen_jmp_im(pc_start - s->cs_base); gen_op_into(s->pc - pc_start); break; +#ifdef WANT_ICEBP case 0xf1: /* icebp (undocumented, exits to external debugger) */ - #if 1 - gen_debug(s, pc_start - s->cs_base); -@@ -5383,6 +5389,7 @@ static target_ulong disas_insn(DisasCont + if (gen_svm_check_intercept(s, pc_start, SVM_EXIT_ICEBP)) + break; +@@ -5672,6 +5673,7 @@ static target_ulong disas_insn(DisasCont cpu_set_log(CPU_LOG_INT | CPU_LOG_TB_IN_ASM); #endif break; @@ -250,11 +70,11 @@ Index: xen-3.3.0-testing/tools/ioemu/target-i386/translate.c case 0xfa: /* cli */ if (!s->vm86) { if (s->cpl <= s->iopl) { -Index: xen-3.3.0-testing/tools/ioemu/vl.c +Index: xen-3.3.0-testing/tools/ioemu-remote/vl.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.c -+++ xen-3.3.0-testing/tools/ioemu/vl.c -@@ -3636,8 +3636,8 @@ typedef struct NetSocketState { +--- xen-3.3.0-testing.orig/tools/ioemu-remote/vl.c ++++ xen-3.3.0-testing/tools/ioemu-remote/vl.c +@@ -4380,8 +4380,8 @@ typedef struct NetSocketState { VLANClientState *vc; int fd; int state; /* 0 = getting length, 1 = getting data */ @@ -265,7 +85,7 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c uint8_t buf[4096]; struct sockaddr_in dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */ } NetSocketState; -@@ -3668,7 +3668,8 @@ static void net_socket_receive_dgram(voi +@@ -4412,7 +4412,8 @@ static void net_socket_receive_dgram(voi static void net_socket_send(void *opaque) { NetSocketState *s = opaque; @@ -275,7 +95,7 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c uint8_t buf1[4096]; const uint8_t *buf; -@@ -3707,7 +3708,15 @@ static void net_socket_send(void *opaque +@@ -4451,7 +4452,15 @@ static void net_socket_send(void *opaque l = s->packet_len - s->index; if (l > size) l = size; diff --git a/rpmlint.diff b/rpmlint.diff index d5691ad..ab43a4c 100644 --- a/rpmlint.diff +++ b/rpmlint.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/examples/Makefile =================================================================== --- xen-3.3.0-testing.orig/tools/examples/Makefile +++ xen-3.3.0-testing/tools/examples/Makefile -@@ -54,7 +54,7 @@ install-initd: +@@ -71,7 +71,7 @@ install-initd: [ -d $(DESTDIR)/var/adm/fillup-templates ] || $(INSTALL_DIR) $(DESTDIR)/var/adm/fillup-templates/ $(INSTALL_PROG) $(XEND_INITD) $(DESTDIR)/etc/init.d $(INSTALL_PROG) $(XENDOMAINS_INITD) $(DESTDIR)/etc/init.d diff --git a/serial-split.patch b/serial-split.patch index a4dd074..1c0ba61 100644 --- a/serial-split.patch +++ b/serial-split.patch @@ -1,7 +1,7 @@ -Index: xen-unstable/tools/misc/serial-split/Makefile +Index: xen-3.3.0-testing/tools/misc/serial-split/Makefile =================================================================== --- /dev/null -+++ xen-unstable/tools/misc/serial-split/Makefile ++++ xen-3.3.0-testing/tools/misc/serial-split/Makefile @@ -0,0 +1,20 @@ +CC ?= gcc +CFLAGS ?= -Wall -Os @@ -23,10 +23,10 @@ Index: xen-unstable/tools/misc/serial-split/Makefile + +%.o: %.c Makefile + $(CC) $(CFLAGS) -c -o $@ $< -Index: xen-unstable/tools/misc/serial-split/serial-split.c +Index: xen-3.3.0-testing/tools/misc/serial-split/serial-split.c =================================================================== --- /dev/null -+++ xen-unstable/tools/misc/serial-split/serial-split.c ++++ xen-3.3.0-testing/tools/misc/serial-split/serial-split.c @@ -0,0 +1,422 @@ +/* + * serial-split.c diff --git a/snapshot-ioemu-restore.patch b/snapshot-ioemu-restore.patch index 9769e7c..c892da8 100644 --- a/snapshot-ioemu-restore.patch +++ b/snapshot-ioemu-restore.patch @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c =================================================================== --- xen-3.3.0-testing.orig/tools/blktap/drivers/blktapctrl.c +++ xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c -@@ -334,6 +334,7 @@ static int write_msg(int fd, int msgtype +@@ -305,6 +305,7 @@ static int write_msg(int fd, int msgtype msg_dev = (msg_newdev_t *)(buf + sizeof(msg_hdr_t)); msg_dev->devnum = blkif->minor; msg_dev->domid = blkif->domid; @@ -14,7 +14,7 @@ Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h =================================================================== --- xen-3.3.0-testing.orig/tools/blktap/lib/blktaplib.h +++ xen-3.3.0-testing/tools/blktap/lib/blktaplib.h -@@ -183,6 +183,7 @@ typedef struct msg_hdr { +@@ -189,6 +189,7 @@ typedef struct msg_hdr { typedef struct msg_newdev { uint8_t devnum; uint16_t domid; @@ -22,11 +22,11 @@ Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h } msg_newdev_t; typedef struct msg_pid { -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c -@@ -65,6 +65,8 @@ int write_fd; +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_blktap.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_blktap.c +@@ -69,6 +69,8 @@ int write_fd; static pid_t process; fd_list_entry_t *fd_start = NULL; @@ -35,7 +35,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c static void handle_blktap_iomsg(void* private); struct aiocb_info { -@@ -497,6 +499,10 @@ static void handle_blktap_ctrlmsg(void* +@@ -502,6 +504,10 @@ static void handle_blktap_ctrlmsg(void* char buf[MSG_SIZE]; @@ -46,7 +46,7 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c length = read(read_fd, buf, MSG_SIZE); if (length > 0 && length >= sizeof(msg_hdr_t)) -@@ -552,7 +558,18 @@ static void handle_blktap_ctrlmsg(void* +@@ -557,7 +563,18 @@ static void handle_blktap_ctrlmsg(void* if (s != NULL) { ret = ((map_new_dev(s, msg_dev->devnum) == msg_dev->devnum ? 0: -1)); @@ -66,23 +66,11 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c memset(buf, 0x00, MSG_SIZE); msglen = sizeof(msg_hdr_t); -Index: xen-3.3.0-testing/tools/ioemu/vl.c +Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.c -+++ xen-3.3.0-testing/tools/ioemu/vl.c -@@ -5233,7 +5233,6 @@ the_end: - return ret; - } - -- - #else - void do_savevm(const char *name) - { -Index: xen-3.3.0-testing/tools/ioemu/xenstore.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/xenstore.c -+++ xen-3.3.0-testing/tools/ioemu/xenstore.c -@@ -26,6 +26,8 @@ static QEMUTimer *insert_timer = NULL; +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c ++++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c +@@ -37,6 +37,8 @@ static QEMUTimer *insert_timer = NULL; #define UWAIT_MAX (30*1000000) /* thirty seconds */ #define UWAIT (100000) /* 1/10th second */ @@ -91,10 +79,10 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c static int pasprintf(char **buf, const char *fmt, ...) { va_list ap; -@@ -311,8 +313,17 @@ void xenstore_parse_domain_config(int hv - } +@@ -373,8 +375,17 @@ void xenstore_parse_domain_config(int hv } } + pstrcpy(bs->filename, sizeof(bs->filename), params); - if (bdrv_open2(bs, params, 0 /* snapshot */, format) < 0) + if (bdrv_open2(bs, params, 0 /* snapshot */, format) < 0) { fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0"); @@ -108,9 +96,9 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c + } + } } - } -@@ -406,6 +417,23 @@ void xenstore_parse_domain_config(int hv + drives_table[nb_drives].bdrv = bs; +@@ -471,6 +482,23 @@ void xenstore_parse_domain_config(int hv return; } diff --git a/snapshot-ioemu-save.patch b/snapshot-ioemu-save.patch index 8b40028..9277570 100644 --- a/snapshot-ioemu-save.patch +++ b/snapshot-ioemu-save.patch @@ -1,21 +1,30 @@ -Index: xen-3.3.0-testing/tools/ioemu/vl.c +Index: xen-3.3.0-testing/tools/ioemu-remote/xen-vl-extra.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.c -+++ xen-3.3.0-testing/tools/ioemu/vl.c -@@ -108,6 +108,8 @@ - - #include "exec-all.h" +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xen-vl-extra.c ++++ xen-3.3.0-testing/tools/ioemu-remote/xen-vl-extra.c +@@ -8,12 +8,18 @@ + * there is only one place where this file is included. */ + #include "qemu-xen.h" +#include "block_int.h" + + /* forward declarations of things in vl.c */ + + static int qemu_savevm_state(QEMUFile *f); + static int qemu_loadvm_state(QEMUFile *f); + ++static int bdrv_can_snapshot(BlockDriverState *bs); ++static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info, ++ const char *name); + - #define DEFAULT_NETWORK_SCRIPT "/etc/xen/qemu-ifup" - #ifdef _BSD - #define DEFAULT_BRIDGE "bridge0" -@@ -5155,6 +5157,83 @@ void do_loadvm(const char *name) - if (saved_vm_running) ++ + /* We use simpler state save/load functions for Xen */ + + void do_savevm(const char *name) +@@ -85,6 +91,81 @@ void do_loadvm(const char *name) vm_start(); } -+ + +int save_disk_snapshots(const char* name) +{ + BlockDriverState *bs; @@ -32,8 +41,8 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c + qemu_aio_flush(); + + /* Ensure that all images support snapshots or are read-only */ -+ for(i = 0; i < MAX_DISKS; i++) { -+ bs = bs_table[i]; ++ for(i = 0; i < MAX_DRIVES; i++) { ++ bs = drives_table[i].bdrv; + + if (!bs || !bs->drv) + continue; @@ -55,8 +64,8 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c + sn.vm_clock_nsec = qemu_get_clock(vm_clock); + pstrcpy(sn.name, sizeof(sn.name), name); + -+ for(i = 0; i < MAX_DISKS; i++) { -+ bs = bs_table[i]; ++ for(i = 0; i < MAX_DRIVES; i++) { ++ bs = drives_table[i].bdrv; + + /* No snapshots on read-only images */ + if (!bs || !bs->drv || bdrv_is_read_only(bs)) @@ -91,32 +100,31 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c + return ret; +} + -+ - #else - void do_savevm(const char *name) - { -Index: xen-3.3.0-testing/tools/ioemu/target-i386-dm/helper2.c + struct qemu_alarm_timer; + static int unix_start_timer(struct qemu_alarm_timer *t) { return 0; } + static void unix_stop_timer(struct qemu_alarm_timer *t) { } +Index: xen-3.3.0-testing/tools/ioemu-remote/i386-dm/helper2.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/target-i386-dm/helper2.c -+++ xen-3.3.0-testing/tools/ioemu/target-i386-dm/helper2.c -@@ -92,6 +92,9 @@ int send_vcpu = 0; +--- xen-3.3.0-testing.orig/tools/ioemu-remote/i386-dm/helper2.c ++++ xen-3.3.0-testing/tools/ioemu-remote/i386-dm/helper2.c +@@ -101,6 +101,9 @@ int send_vcpu = 0; #define NR_CPUS 32 evtchn_port_t ioreq_local_port[NR_CPUS]; +/** Name of the snapshot which should be saved */ +char* snapshot_name; + - CPUX86State *cpu_x86_init(void) + CPUX86State *cpu_x86_init(const char *cpu_model) { CPUX86State *env; -@@ -556,9 +559,24 @@ int main_loop(void) +@@ -574,9 +577,24 @@ int main_loop(void) main_loop_wait(1); /* For the select() on events */ /* Save the device state */ - asprintf(&qemu_file, "/var/lib/xen/qemu-save.%d", domid); - do_savevm(qemu_file); - free(qemu_file); -+ switch (suspend_requested) { ++ switch (xen_pause_requested) { + case SUSPEND_SAVEVM: + asprintf(&qemu_file, "/var/lib/xen/qemu-save.%d", domid); + do_savevm(qemu_file); @@ -137,60 +145,55 @@ Index: xen-3.3.0-testing/tools/ioemu/target-i386-dm/helper2.c xenstore_record_dm_state("paused"); -Index: xen-3.3.0-testing/tools/ioemu/vl.h +Index: xen-3.3.0-testing/tools/ioemu-remote/qemu-xen.h =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.h -+++ xen-3.3.0-testing/tools/ioemu/vl.h -@@ -59,7 +59,6 @@ - extern int qemu_ftruncate64(int, int64_t); - #define ftruncate qemu_ftruncate64 - -- - static inline char *realpath(const char *path, char *resolved_path) - { - _fullpath(resolved_path, path, _MAX_PATH); -@@ -72,6 +71,11 @@ static inline char *realpath(const char - #define PRIo64 "I64o" - #endif +--- xen-3.3.0-testing.orig/tools/ioemu-remote/qemu-xen.h ++++ xen-3.3.0-testing/tools/ioemu-remote/qemu-xen.h +@@ -14,6 +14,15 @@ void qemu_invalidate_map_cache(void) + #define mapcache_lock() ((void)0) + #define mapcache_unlock() ((void)0) ++/* Reason for xen_pause_requested */ +enum { + SUSPEND_SAVEVM = 1, + SUSPEND_SNAPSHOT = 2 +}; + - #ifdef QEMU_TOOL - - /* we use QEMU_TOOL in the command line tools which do not depend on -@@ -557,6 +561,8 @@ void do_loadvm(const char *name); - void do_delvm(const char *name); - void do_info_snapshots(void); - ++/* xen-vl-extra.c */ +int save_disk_snapshots(const char* name); + - /* bottom halves */ - typedef void QEMUBHFunc(void *opaque); - -Index: xen-3.3.0-testing/tools/ioemu/xenstore.c + /* helper2.c */ + extern long time_offset; + void timeoffset_get(void); +Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/xenstore.c -+++ xen-3.3.0-testing/tools/ioemu/xenstore.c -@@ -536,6 +536,7 @@ static void xenstore_process_dm_command_ +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c ++++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c +@@ -24,6 +24,7 @@ + + #include "exec-all.h" + #include "sysemu.h" ++#include "qemu-xen.h" + + #include "hw.h" + #include "pci.h" +@@ -598,6 +599,7 @@ static void xenstore_process_dm_command_ + { char *path = NULL, *command = NULL, *par = NULL; unsigned int len; - extern int suspend_requested; + extern char* snapshot_name; if (pasprintf(&path, "/local/domain/0/device-model/%u/command", domid) == -1) { -@@ -548,7 +549,18 @@ static void xenstore_process_dm_command_ +@@ -610,7 +612,18 @@ static void xenstore_process_dm_command_ if (!strncmp(command, "save", len)) { fprintf(logfile, "dm-command: pause and save state\n"); -- suspend_requested = 1; -+ suspend_requested = SUSPEND_SAVEVM; +- xen_pause_requested = 1; ++ xen_pause_requested = SUSPEND_SAVEVM; + } else if (!strncmp(command, "snapshot", len)) { + fprintf(logfile, "dm-command: pause and snapshot disks\n"); -+ suspend_requested = SUSPEND_SNAPSHOT; ++ xen_pause_requested = SUSPEND_SNAPSHOT; + + if (pasprintf(&path, + "/local/domain/0/device-model/%u/parameter", domid) == -1) { @@ -201,38 +204,4 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c + snapshot_name = xs_read(xsh, XBT_NULL, path, &len); } else if (!strncmp(command, "continue", len)) { fprintf(logfile, "dm-command: continue after state save\n"); - suspend_requested = 0; -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c -@@ -221,8 +221,12 @@ static int open_disk(struct td_state *s, - struct disk_id id; - BlockDriverState* bs; - -+#ifndef QEMU_TOOL -+ int i; -+#endif -+ - DPRINTF("Opening %s\n", path); -- bs = calloc(1, sizeof(*bs)); -+ bs = bdrv_new("blktap"); - - memset(&id, 0, sizeof(struct disk_id)); - -@@ -238,6 +242,15 @@ static int open_disk(struct td_state *s, - - s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0); - -+#ifndef QEMU_TOOL -+ for (i = 0; i < MAX_DISKS + MAX_SCSI_DISKS; i++) { -+ if (bs_table[i] == NULL) { -+ bs_table[i] = bs; -+ break; -+ } -+ } -+#endif -+ - return 0; - } - + xen_pause_requested = 0; diff --git a/snapshot-xend.patch b/snapshot-xend.patch index d564f6b..febb96e 100644 --- a/snapshot-xend.patch +++ b/snapshot-xend.patch @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/image.py +++ xen-3.3.0-testing/tools/python/xen/xend/image.py -@@ -481,6 +481,10 @@ class ImageHandler: +@@ -476,6 +476,10 @@ class ImageHandler: # but this can easily lead to very rapid restart loops against # which we currently have no protection @@ -283,10 +283,10 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendConfig.py -@@ -207,6 +207,7 @@ XENAPI_CFG_TYPES = { - 'pci': str, +@@ -208,6 +208,7 @@ XENAPI_CFG_TYPES = { 'cpuid' : dict, 'cpuid_check' : dict, + 'machine_address_size': int, + 'snapshotname': str, } @@ -448,7 +448,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/main.py +++ xen-3.3.0-testing/tools/python/xen/xm/main.py -@@ -113,6 +113,14 @@ SUBCOMMAND_HELP = { +@@ -122,6 +122,14 @@ SUBCOMMAND_HELP = { 'Restore a domain from a saved state.'), 'save' : ('[-c] ', 'Save a domain state to restore later.'), @@ -463,7 +463,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py 'shutdown' : (' [-waRH]', 'Shutdown a domain.'), 'top' : ('', 'Monitor a host and the domains in real time.'), 'unpause' : ('', 'Unpause a paused domain.'), -@@ -262,6 +270,9 @@ SUBCOMMAND_OPTIONS = { +@@ -278,6 +286,9 @@ SUBCOMMAND_OPTIONS = { 'save': ( ('-c', '--checkpoint', 'Leave domain running after creating snapshot'), ), @@ -473,7 +473,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py 'restore': ( ('-p', '--paused', 'Do not unpause domain after restoring it'), ), -@@ -287,6 +298,10 @@ common_commands = [ +@@ -304,6 +315,10 @@ common_commands = [ "restore", "resume", "save", @@ -484,7 +484,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py "shell", "shutdown", "start", -@@ -317,6 +332,10 @@ domain_commands = [ +@@ -335,6 +350,10 @@ domain_commands = [ "restore", "resume", "save", @@ -495,7 +495,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py "shutdown", "start", "suspend", -@@ -707,6 +726,62 @@ def xm_event_monitor(args): +@@ -726,6 +745,62 @@ def xm_event_monitor(args): # ######################################################################### @@ -558,7 +558,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py def xm_save(args): arg_check(args, "save", 2, 3) -@@ -2600,6 +2675,10 @@ commands = { +@@ -2757,6 +2832,10 @@ commands = { "restore": xm_restore, "resume": xm_resume, "save": xm_save, diff --git a/supported_module.diff b/supported_module.diff index ab4e37c..cf1a931 100644 --- a/supported_module.diff +++ b/supported_module.diff @@ -2,10 +2,10 @@ Make our PV drivers "Novell supported modules" Signed-off-by: K. Y. Srinivasan -Index: xen-3.0.4-testing/unmodified_drivers/linux-2.6/Module.supported +Index: xen-3.3.0-testing/unmodified_drivers/linux-2.6/Module.supported =================================================================== --- /dev/null -+++ xen-3.0.4-testing/unmodified_drivers/linux-2.6/Module.supported ++++ xen-3.3.0-testing/unmodified_drivers/linux-2.6/Module.supported @@ -0,0 +1,4 @@ +xen-vbd +xen-platform-pci diff --git a/svm-lmsl.patch b/svm-lmsl.patch index e703969..e54027a 100644 --- a/svm-lmsl.patch +++ b/svm-lmsl.patch @@ -1,8 +1,8 @@ -Index: xen-3.2.1-testing/xen/arch/x86/hvm/hvm.c +Index: xen-3.3.0-testing/xen/arch/x86/hvm/hvm.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/hvm/hvm.c -+++ xen-3.2.1-testing/xen/arch/x86/hvm/hvm.c -@@ -595,10 +595,11 @@ int hvm_set_efer(uint64_t value) +--- xen-3.3.0-testing.orig/xen/arch/x86/hvm/hvm.c ++++ xen-3.3.0-testing/xen/arch/x86/hvm/hvm.c +@@ -789,10 +789,11 @@ int hvm_set_efer(uint64_t value) value &= ~EFER_LMA; @@ -15,10 +15,10 @@ Index: xen-3.2.1-testing/xen/arch/x86/hvm/hvm.c (!cpu_has_ffxsr && (value & EFER_FFXSE)) ) { gdprintk(XENLOG_WARNING, "Trying to set reserved bit in " -Index: xen-3.2.1-testing/xen/arch/x86/hvm/svm/svm.c +Index: xen-3.3.0-testing/xen/arch/x86/hvm/svm/svm.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/hvm/svm/svm.c -+++ xen-3.2.1-testing/xen/arch/x86/hvm/svm/svm.c +--- xen-3.3.0-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-3.3.0-testing/xen/arch/x86/hvm/svm/svm.c @@ -53,6 +53,11 @@ u32 svm_feature_flags; @@ -31,7 +31,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/hvm/svm/svm.c #define set_segment_register(name, value) \ asm volatile ( "movw %%ax ,%%" STR(name) "" : : "a" (value) ) -@@ -923,6 +928,22 @@ int start_svm(struct cpuinfo_x86 *c) +@@ -853,6 +858,22 @@ int start_svm(struct cpuinfo_x86 *c) /* Initialize core's ASID handling. */ svm_asid_init(c); @@ -54,11 +54,11 @@ Index: xen-3.2.1-testing/xen/arch/x86/hvm/svm/svm.c if ( cpu != 0 ) return 1; -Index: xen-3.2.1-testing/xen/include/asm-x86/hvm/hvm.h +Index: xen-3.3.0-testing/xen/include/asm-x86/hvm/hvm.h =================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/hvm/hvm.h -+++ xen-3.2.1-testing/xen/include/asm-x86/hvm/hvm.h -@@ -127,6 +127,12 @@ struct hvm_function_table { +--- xen-3.3.0-testing.orig/xen/include/asm-x86/hvm/hvm.h ++++ xen-3.3.0-testing/xen/include/asm-x86/hvm/hvm.h +@@ -133,6 +133,12 @@ struct hvm_function_table { extern struct hvm_function_table hvm_funcs; extern int hvm_enabled; diff --git a/tmp-revert-blktapctrl.patch b/tmp-revert-blktapctrl.patch deleted file mode 100644 index 6a596c8..0000000 --- a/tmp-revert-blktapctrl.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/blktap/drivers/blktapctrl.c -+++ xen-3.3.0-testing/tools/blktap/drivers/blktapctrl.c -@@ -127,7 +127,7 @@ static int get_new_dev(int *major, int * - char *devname; - - tr.domid = blkif->domid; -- tr.busid = blkif->be_id; -+ tr.busid = (unsigned short) blkif->be_id; - ret = ioctl(ctlfd, BLKTAP_IOCTL_NEWINTF, tr ); - - if ( (ret <= 0)||(ret > MAX_TAP_DEV) ) { -Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h -=================================================================== ---- xen-3.3.0-testing.orig/tools/blktap/lib/blktaplib.h -+++ xen-3.3.0-testing/tools/blktap/lib/blktaplib.h -@@ -161,7 +161,7 @@ typedef struct tapdev_info { - - typedef struct domid_translate { - unsigned short domid; -- uint32_t busid; -+ unsigned short busid; - } domid_translate_t ; - - typedef struct image { diff --git a/vnc-i18n-keys.diff b/vnc-i18n-keys.diff deleted file mode 100644 index 819a2f7..0000000 --- a/vnc-i18n-keys.diff +++ /dev/null @@ -1,60 +0,0 @@ -Index: xen-3.3.0-testing/tools/ioemu/sdl_keysym.h -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/sdl_keysym.h -+++ xen-3.3.0-testing/tools/ioemu/sdl_keysym.h -@@ -274,5 +274,27 @@ static name2keysym_t name2keysym[]={ - {"Pause", SDLK_PAUSE}, - {"Escape", SDLK_ESCAPE}, - -+ /* dead keys */ -+{"dead_grave", 0xfe50}, -+{"dead_acute", 0xfe51}, -+{"dead_circumflex", 0xfe52}, -+{"dead_tilde", 0xfe53}, -+{"dead_macron", 0xfe54}, -+{"dead_brev", 0xfe55}, -+{"dead_abovedot", 0xfe56}, -+{"dead_diaeresis", 0xfe57}, -+{"dead_abovering", 0xfe58}, -+{"dead_doubleacute", 0xfe59}, -+{"dead_caron", 0xfe5a}, -+{"dead_cedilla", 0xfe5b}, -+{"dead_ogonek", 0xfe5c}, -+{"dead_iota", 0xfe5d}, -+{"dead_voiced_sound", 0xfe5e}, -+{"dead_semivoiced_sound", 0xfe5f}, -+{"dead_belowdot", 0xfe60}, -+{"dead_hook", 0xfe61}, -+{"dead_horn", 0xfe62}, -+ - {0,0}, - }; -+ -Index: xen-3.3.0-testing/tools/python/xen/xend/XendOptions.py -=================================================================== ---- xen-3.3.0-testing.orig/tools/python/xen/xend/XendOptions.py -+++ xen-3.3.0-testing/tools/python/xen/xend/XendOptions.py -@@ -359,6 +359,9 @@ class XendOptions: - self.qemu_dm_logrotate_count) - - -+ def get_keymap(self): -+ return self.get_config_value('keymap', None) -+ - class XendOptionsFile(XendOptions): - - """Default path to the config file.""" -Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -=================================================================== ---- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1912,6 +1912,9 @@ class XendDomainInfo: - if devclass in XendDevices.valid_devices() and devclass != 'vscsi': - log.info("createDevice: %s : %s" % (devclass, scrub_password(config))) - dev_uuid = config.get('uuid') -+ if 'keymap' not in config: -+ if 'keymap' in self.info['platform']: -+ config['keymap'] = self.info['platform']['keymap'] - devid = self._createDevice(devclass, config) - - # store devid in XendConfig for caching reasons diff --git a/x86-compat-vcpu-op.patch b/x86-compat-vcpu-op.patch deleted file mode 100644 index 129ceec..0000000 --- a/x86-compat-vcpu-op.patch +++ /dev/null @@ -1,125 +0,0 @@ -Index: xen-3.2.1-testing/xen/arch/x86/x86_64/domain.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_64/domain.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_64/domain.c -@@ -9,11 +9,23 @@ - #include - #include - -+#define xen_vcpu_info vcpu_info -+CHECK_SIZE_(struct, vcpu_info); -+#undef xen_vcpu_info -+ -+#define xen_vcpu_register_vcpu_info vcpu_register_vcpu_info -+CHECK_vcpu_register_vcpu_info; -+#undef xen_vcpu_register_vcpu_info -+ -+#define xen_vcpu_get_physid vcpu_get_physid -+CHECK_vcpu_get_physid; -+#undef xen_vcpu_get_physid -+ - int - arch_compat_vcpu_op( - int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg) - { -- long rc = 0; -+ int rc = -ENOSYS; - - switch ( cmd ) - { -@@ -51,8 +63,9 @@ arch_compat_vcpu_op( - break; - } - -- default: -- rc = -ENOSYS; -+ case VCPUOP_register_vcpu_info: -+ case VCPUOP_get_physid: -+ rc = arch_do_vcpu_op(cmd, v, arg); - break; - } - -Index: xen-3.2.1-testing/xen/common/compat/domain.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/common/compat/domain.c -+++ xen-3.2.1-testing/xen/common/compat/domain.c -@@ -11,11 +11,15 @@ - #include - #include - -+#define xen_vcpu_set_periodic_timer vcpu_set_periodic_timer -+CHECK_vcpu_set_periodic_timer; -+#undef xen_vcpu_set_periodic_timer -+ - int compat_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg) - { - struct domain *d = current->domain; - struct vcpu *v; -- long rc = 0; -+ int rc = 0; - - if ( (vcpuid < 0) || (vcpuid >= MAX_VIRT_CPUS) ) - return -EINVAL; -@@ -57,7 +61,6 @@ int compat_vcpu_op(int cmd, int vcpuid, - case VCPUOP_is_up: - case VCPUOP_set_periodic_timer: - case VCPUOP_stop_periodic_timer: -- case VCPUOP_set_singleshot_timer: - case VCPUOP_stop_singleshot_timer: - case VCPUOP_send_nmi: - rc = do_vcpu_op(cmd, vcpuid, arg); -@@ -77,6 +80,19 @@ int compat_vcpu_op(int cmd, int vcpuid, - break; - } - -+ case VCPUOP_set_singleshot_timer: -+ { -+ struct compat_vcpu_set_singleshot_timer cmp; -+ struct vcpu_set_singleshot_timer *nat; -+ -+ if ( copy_from_guest(&cmp, arg, 1) ) -+ return -EFAULT; -+ nat = (void *)COMPAT_ARG_XLAT_VIRT_START(current->vcpu_id); -+ XLAT_vcpu_set_singleshot_timer(nat, &cmp); -+ rc = do_vcpu_op(cmd, vcpuid, guest_handle_from_ptr(nat, void)); -+ break; -+ } -+ - default: - rc = arch_compat_vcpu_op(cmd, v, arg); - break; -Index: xen-3.2.1-testing/xen/include/xlat.lst -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/xlat.lst -+++ xen-3.2.1-testing/xen/include/xlat.lst -@@ -5,6 +5,7 @@ - ? mmu_update xen.h - ! mmuext_op xen.h - ! start_info xen.h -+? vcpu_info xen.h - ? vcpu_time_info xen.h - ! cpu_user_regs arch-x86/xen-@arch@.h - ! trap_info arch-x86/xen.h -@@ -40,6 +41,10 @@ - ? sched_remote_shutdown sched.h - ? sched_shutdown sched.h - ? t_buf trace.h -+? vcpu_get_physid vcpu.h -+? vcpu_register_vcpu_info vcpu.h - ! vcpu_runstate_info vcpu.h -+? vcpu_set_periodic_timer vcpu.h -+! vcpu_set_singleshot_timer vcpu.h - ? xenoprof_init xenoprof.h - ? xenoprof_passive xenoprof.h -Index: xen-3.2.1-testing/xen/tools/get-fields.sh -=================================================================== ---- xen-3.2.1-testing.orig/xen/tools/get-fields.sh -+++ xen-3.2.1-testing/xen/tools/get-fields.sh -@@ -310,7 +310,6 @@ build_body () - done - echo " \\" - echo "} while (0)" -- echo "" - } - - check_field () diff --git a/x86-domain-shutdown-latency.patch b/x86-domain-shutdown-latency.patch deleted file mode 100644 index 33ad4eb..0000000 --- a/x86-domain-shutdown-latency.patch +++ /dev/null @@ -1,70 +0,0 @@ -Index: xen-3.2.1-testing/xen/arch/x86/domain.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/domain.c -+++ xen-3.2.1-testing/xen/arch/x86/domain.c -@@ -1709,6 +1709,23 @@ static int relinquish_memory( - if ( test_and_clear_bit(_PGC_allocated, &page->count_info) ) - put_page(page); - -+ y = page->u.inuse.type_info; -+ -+ /* -+ * Forcibly drop reference counts of page tables above top most (which -+ * were skipped to prevent long latencies due to deep recursion - see -+ * the special treatment in free_lX_table()). -+ */ -+ if ( type < PGT_root_page_table && -+ unlikely(((y + PGT_type_mask) & -+ (PGT_type_mask|PGT_validated)) == type) ) { -+ BUG_ON((y & PGT_count_mask) >= (page->count_info & PGC_count_mask)); -+ while ( y & PGT_count_mask ) { -+ put_page_and_type(page); -+ y = page->u.inuse.type_info; -+ } -+ } -+ - /* - * Forcibly invalidate top-most, still valid page tables at this point - * to break circular 'linear page table' references. This is okay -@@ -1716,7 +1733,6 @@ static int relinquish_memory( - * is now dead. Thus top-most valid tables are not in use so a non-zero - * count means circular reference. - */ -- y = page->u.inuse.type_info; - for ( ; ; ) - { - x = y; -@@ -1880,6 +1896,9 @@ int domain_relinquish_resources(struct d - /* fallthrough */ - - case RELMEM_done: -+ ret = relinquish_memory(d, &d->page_list, PGT_l1_page_table); -+ if ( ret ) -+ return ret; - break; - - default: -Index: xen-3.2.1-testing/xen/arch/x86/mm.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/mm.c -+++ xen-3.2.1-testing/xen/arch/x86/mm.c -@@ -1305,6 +1305,9 @@ static void free_l3_table(struct page_in - l3_pgentry_t *pl3e; - int i; - -+ if(d->arch.relmem == RELMEM_dom_l3) -+ return; -+ - pl3e = map_domain_page(pfn); - - for ( i = 0; i < L3_PAGETABLE_ENTRIES; i++ ) -@@ -1328,6 +1331,9 @@ static void free_l4_table(struct page_in - l4_pgentry_t *pl4e = page_to_virt(page); - int i; - -+ if(d->arch.relmem == RELMEM_dom_l4) -+ return; -+ - for ( i = 0; i < L4_PAGETABLE_ENTRIES; i++ ) - if ( is_guest_l4_slot(d, i) ) - put_page_from_l4e(pl4e[i], pfn); diff --git a/x86-pgtable-no-biglock.patch b/x86-pgtable-no-biglock.patch deleted file mode 100644 index 4d6ad84..0000000 --- a/x86-pgtable-no-biglock.patch +++ /dev/null @@ -1,555 +0,0 @@ -The use of the domain lock in do_mmuext_op() and do_set_gdt() still needs -looking at, as do the assertions of the lock being held in -create_grant_{pte,va}_mapping(). - -Index: xen-3.2.1-testing/xen/arch/x86/mm.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/mm.c -+++ xen-3.2.1-testing/xen/arch/x86/mm.c -@@ -1335,6 +1335,37 @@ static void free_l4_table(struct page_in - - #endif - -+static void lock_page(struct page_info *page) -+{ -+ unsigned long x, y; -+ -+ y = page->u.inuse.type_info; -+ do { -+ for ( ; ; ) -+ { -+ ASSERT(y & PGT_count_mask); -+ if (likely(y & PGT_validated) && likely(!(y & PGT_locked))) -+ break; -+ cpu_relax(); -+ y = page->u.inuse.type_info; -+ } -+ x = y; -+ } -+ while ( (y = cmpxchg(&page->u.inuse.type_info, x, x | PGT_locked)) != x ); -+} -+ -+static void unlock_page(struct page_info *page) -+{ -+ unsigned long x, y; -+ -+ y = page->u.inuse.type_info; -+ do { -+ ASSERT(y & PGT_locked); -+ ASSERT(y & PGT_count_mask); -+ x = y; -+ } -+ while ( (y = cmpxchg(&page->u.inuse.type_info, x, x & ~PGT_locked)) != x ); -+} - - /* How to write an entry to the guest pagetables. - * Returns 0 for failure (pointer not valid), 1 for success. */ -@@ -1396,24 +1427,33 @@ static int mod_l1_entry(l1_pgentry_t *pl - struct vcpu *curr = current; - struct domain *d = curr->domain; - unsigned long mfn; -+ struct page_info *l1pg = mfn_to_page(gl1mfn); -+ int rc = 1; -+ -+ lock_page(l1pg); - - if ( unlikely(__copy_from_user(&ol1e, pl1e, sizeof(ol1e)) != 0) ) -- return 0; -+ return unlock_page(l1pg), 0; - - if ( unlikely(paging_mode_refcounts(d)) ) -- return UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, preserve_ad); -+ { -+ rc = UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, preserve_ad); -+ unlock_page(l1pg); -+ return rc; -+ } - - if ( l1e_get_flags(nl1e) & _PAGE_PRESENT ) - { - /* Translate foreign guest addresses. */ - mfn = gmfn_to_mfn(FOREIGNDOM, l1e_get_pfn(nl1e)); - if ( unlikely(mfn == INVALID_MFN) ) -- return 0; -+ return unlock_page(l1pg), 0; - ASSERT((mfn & ~(PADDR_MASK >> PAGE_SHIFT)) == 0); - nl1e = l1e_from_pfn(mfn, l1e_get_flags(nl1e)); - - if ( unlikely(l1e_get_flags(nl1e) & l1_disallow_mask(d)) ) - { -+ unlock_page(l1pg); - MEM_LOG("Bad L1 flags %x", - l1e_get_flags(nl1e) & l1_disallow_mask(d)); - return 0; -@@ -1423,30 +1463,33 @@ static int mod_l1_entry(l1_pgentry_t *pl - if ( !l1e_has_changed(ol1e, nl1e, _PAGE_RW | _PAGE_PRESENT) ) - { - adjust_guest_l1e(nl1e, d); -- return UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, -- preserve_ad); -+ rc = UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, -+ preserve_ad); -+ unlock_page(l1pg); -+ return rc; - } - - if ( unlikely(!get_page_from_l1e(nl1e, FOREIGNDOM)) ) -- return 0; -+ return unlock_page(l1pg), 0; - - adjust_guest_l1e(nl1e, d); - if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, - preserve_ad)) ) - { -- put_page_from_l1e(nl1e, d); -- return 0; -+ ol1e = nl1e; -+ rc = 0; - } - } -- else -+ else if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, -+ preserve_ad)) ) - { -- if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, -- preserve_ad)) ) -- return 0; -+ unlock_page(l1pg); -+ return 0; - } - -+ unlock_page(l1pg); - put_page_from_l1e(ol1e, d); -- return 1; -+ return rc; - } - - -@@ -1460,6 +1503,8 @@ static int mod_l2_entry(l2_pgentry_t *pl - l2_pgentry_t ol2e; - struct vcpu *curr = current; - struct domain *d = curr->domain; -+ struct page_info *l2pg = mfn_to_page(pfn); -+ int rc = 1; - - if ( unlikely(!is_guest_l2_slot(d, type, pgentry_ptr_to_slot(pl2e))) ) - { -@@ -1467,13 +1512,16 @@ static int mod_l2_entry(l2_pgentry_t *pl - return 0; - } - -+ lock_page(l2pg); -+ - if ( unlikely(__copy_from_user(&ol2e, pl2e, sizeof(ol2e)) != 0) ) -- return 0; -+ return unlock_page(l2pg), 0; - - if ( l2e_get_flags(nl2e) & _PAGE_PRESENT ) - { - if ( unlikely(l2e_get_flags(nl2e) & L2_DISALLOW_MASK) ) - { -+ unlock_page(l2pg); - MEM_LOG("Bad L2 flags %x", - l2e_get_flags(nl2e) & L2_DISALLOW_MASK); - return 0; -@@ -1483,28 +1531,32 @@ static int mod_l2_entry(l2_pgentry_t *pl - if ( !l2e_has_changed(ol2e, nl2e, _PAGE_PRESENT) ) - { - adjust_guest_l2e(nl2e, d); -- return UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr, preserve_ad); -+ rc = UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr, preserve_ad); -+ unlock_page(l2pg); -+ return rc; - } - - if ( unlikely(!get_page_from_l2e(nl2e, pfn, d)) ) -- return 0; -+ return unlock_page(l2pg), 0; - - adjust_guest_l2e(nl2e, d); - if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr, - preserve_ad)) ) - { -- put_page_from_l2e(nl2e, pfn); -- return 0; -+ ol2e = nl2e; -+ rc = 0; - } - } - else if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr, - preserve_ad)) ) - { -+ unlock_page(l2pg); - return 0; - } - -+ unlock_page(l2pg); - put_page_from_l2e(ol2e, pfn); -- return 1; -+ return rc; - } - - #if CONFIG_PAGING_LEVELS >= 3 -@@ -1518,7 +1570,8 @@ static int mod_l3_entry(l3_pgentry_t *pl - l3_pgentry_t ol3e; - struct vcpu *curr = current; - struct domain *d = curr->domain; -- int okay; -+ struct page_info *l3pg = mfn_to_page(pfn); -+ int okay, rc = 1; - - if ( unlikely(!is_guest_l3_slot(pgentry_ptr_to_slot(pl3e))) ) - { -@@ -1535,13 +1588,16 @@ static int mod_l3_entry(l3_pgentry_t *pl - return 0; - #endif - -+ lock_page(l3pg); -+ - if ( unlikely(__copy_from_user(&ol3e, pl3e, sizeof(ol3e)) != 0) ) -- return 0; -+ return unlock_page(l3pg), 0; - - if ( l3e_get_flags(nl3e) & _PAGE_PRESENT ) - { - if ( unlikely(l3e_get_flags(nl3e) & l3_disallow_mask(d)) ) - { -+ unlock_page(l3pg); - MEM_LOG("Bad L3 flags %x", - l3e_get_flags(nl3e) & l3_disallow_mask(d)); - return 0; -@@ -1551,23 +1607,26 @@ static int mod_l3_entry(l3_pgentry_t *pl - if ( !l3e_has_changed(ol3e, nl3e, _PAGE_PRESENT) ) - { - adjust_guest_l3e(nl3e, d); -- return UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr, preserve_ad); -+ rc = UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr, preserve_ad); -+ unlock_page(l3pg); -+ return rc; - } - - if ( unlikely(!get_page_from_l3e(nl3e, pfn, d)) ) -- return 0; -+ return unlock_page(l3pg), 0; - - adjust_guest_l3e(nl3e, d); - if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr, - preserve_ad)) ) - { -- put_page_from_l3e(nl3e, pfn); -- return 0; -+ ol3e = nl3e; -+ rc = 0; - } - } - else if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr, - preserve_ad)) ) - { -+ unlock_page(l3pg); - return 0; - } - -@@ -1576,8 +1635,9 @@ static int mod_l3_entry(l3_pgentry_t *pl - - pae_flush_pgd(pfn, pgentry_ptr_to_slot(pl3e), nl3e); - -+ unlock_page(l3pg); - put_page_from_l3e(ol3e, pfn); -- return 1; -+ return rc; - } - - #endif -@@ -1593,6 +1653,8 @@ static int mod_l4_entry(l4_pgentry_t *pl - struct vcpu *curr = current; - struct domain *d = curr->domain; - l4_pgentry_t ol4e; -+ struct page_info *l4pg = mfn_to_page(pfn); -+ int rc = 1; - - if ( unlikely(!is_guest_l4_slot(d, pgentry_ptr_to_slot(pl4e))) ) - { -@@ -1600,13 +1662,16 @@ static int mod_l4_entry(l4_pgentry_t *pl - return 0; - } - -+ lock_page(l4pg); -+ - if ( unlikely(__copy_from_user(&ol4e, pl4e, sizeof(ol4e)) != 0) ) -- return 0; -+ return unlock_page(l4pg), 0; - - if ( l4e_get_flags(nl4e) & _PAGE_PRESENT ) - { - if ( unlikely(l4e_get_flags(nl4e) & L4_DISALLOW_MASK) ) - { -+ unlock_page(l4pg); - MEM_LOG("Bad L4 flags %x", - l4e_get_flags(nl4e) & L4_DISALLOW_MASK); - return 0; -@@ -1616,28 +1681,32 @@ static int mod_l4_entry(l4_pgentry_t *pl - if ( !l4e_has_changed(ol4e, nl4e, _PAGE_PRESENT) ) - { - adjust_guest_l4e(nl4e, d); -- return UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr, preserve_ad); -+ rc = UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr, preserve_ad); -+ unlock_page(l4pg); -+ return rc; - } - - if ( unlikely(!get_page_from_l4e(nl4e, pfn, d)) ) -- return 0; -+ return unlock_page(l4pg), 0; - - adjust_guest_l4e(nl4e, d); - if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr, - preserve_ad)) ) - { -- put_page_from_l4e(nl4e, pfn); -- return 0; -+ ol4e = nl4e; -+ rc = 0; - } - } - else if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr, - preserve_ad)) ) - { -+ unlock_page(l4pg); - return 0; - } - -+ unlock_page(l4pg); - put_page_from_l4e(ol4e, pfn); -- return 1; -+ return rc; - } - - #endif -@@ -2460,8 +2529,6 @@ int do_mmu_update( - - domain_mmap_cache_init(&mapcache); - -- LOCK_BIGLOCK(d); -- - for ( i = 0; i < count; i++ ) - { - if ( hypercall_preempt_check() ) -@@ -2632,8 +2699,6 @@ int do_mmu_update( - - process_deferred_ops(); - -- UNLOCK_BIGLOCK(d); -- - domain_mmap_cache_destroy(&mapcache); - - perfc_add(num_page_updates, i); -@@ -2686,14 +2751,19 @@ static int create_grant_pte_mapping( - goto failed; - } - -+ lock_page(page); -+ - ol1e = *(l1_pgentry_t *)va; - if ( !UPDATE_ENTRY(l1, (l1_pgentry_t *)va, ol1e, nl1e, mfn, v, 0) ) - { -+ unlock_page(page); - put_page_type(page); - rc = GNTST_general_error; - goto failed; - } - -+ unlock_page(page); -+ - if ( !paging_mode_refcounts(d) ) - put_page_from_l1e(ol1e, d); - -@@ -2737,16 +2807,14 @@ static int destroy_grant_pte_mapping( - goto failed; - } - -- if ( __copy_from_user(&ol1e, (l1_pgentry_t *)va, sizeof(ol1e)) ) -- { -- put_page_type(page); -- rc = GNTST_general_error; -- goto failed; -- } -+ lock_page(page); -+ -+ ol1e = *(l1_pgentry_t *)va; - - /* Check that the virtual address supplied is actually mapped to frame. */ - if ( unlikely((l1e_get_intpte(ol1e) >> PAGE_SHIFT) != frame) ) - { -+ unlock_page(page); - MEM_LOG("PTE entry %lx for address %"PRIx64" doesn't match frame %lx", - (unsigned long)l1e_get_intpte(ol1e), addr, frame); - put_page_type(page); -@@ -2761,12 +2829,14 @@ static int destroy_grant_pte_mapping( - d->vcpu[0] /* Change if we go to per-vcpu shadows. */, - 0)) ) - { -+ unlock_page(page); - MEM_LOG("Cannot delete PTE entry at %p", va); - put_page_type(page); - rc = GNTST_general_error; - goto failed; - } - -+ unlock_page(page); - put_page_type(page); - - failed: -@@ -2782,6 +2852,7 @@ static int create_grant_va_mapping( - l1_pgentry_t *pl1e, ol1e; - struct domain *d = v->domain; - unsigned long gl1mfn; -+ struct page_info *l1pg; - int okay; - - ASSERT(spin_is_locked(&d->big_lock)); -@@ -2794,8 +2865,11 @@ static int create_grant_va_mapping( - MEM_LOG("Could not find L1 PTE for address %lx", va); - return GNTST_general_error; - } -+ l1pg = mfn_to_page(gl1mfn); -+ lock_page(l1pg); - ol1e = *pl1e; - okay = UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, v, 0); -+ unlock_page(l1pg); - guest_unmap_l1e(v, pl1e); - pl1e = NULL; - -@@ -2813,6 +2887,7 @@ static int replace_grant_va_mapping( - { - l1_pgentry_t *pl1e, ol1e; - unsigned long gl1mfn; -+ struct page_info *l1pg; - int rc = 0; - - pl1e = guest_map_l1e(v, addr, &gl1mfn); -@@ -2821,11 +2896,15 @@ static int replace_grant_va_mapping( - MEM_LOG("Could not find L1 PTE for address %lx", addr); - return GNTST_general_error; - } -+ -+ l1pg = mfn_to_page(gl1mfn); -+ lock_page(l1pg); - ol1e = *pl1e; - - /* Check that the virtual address supplied is actually mapped to frame. */ - if ( unlikely(l1e_get_pfn(ol1e) != frame) ) - { -+ unlock_page(l1pg); - MEM_LOG("PTE entry %lx for address %lx doesn't match frame %lx", - l1e_get_pfn(ol1e), addr, frame); - rc = GNTST_general_error; -@@ -2835,11 +2914,14 @@ static int replace_grant_va_mapping( - /* Delete pagetable entry. */ - if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, v, 0)) ) - { -+ unlock_page(l1pg); - MEM_LOG("Cannot delete PTE entry at %p", (unsigned long *)pl1e); - rc = GNTST_general_error; - goto out; - } - -+ unlock_page(l1pg); -+ - out: - guest_unmap_l1e(v, pl1e); - return rc; -@@ -2874,6 +2956,7 @@ int replace_grant_host_mapping( - struct vcpu *curr = current; - l1_pgentry_t *pl1e, ol1e; - unsigned long gl1mfn; -+ struct page_info *l1pg; - int rc; - - if ( flags & GNTMAP_contains_pte ) -@@ -2895,16 +2978,21 @@ int replace_grant_host_mapping( - (unsigned long)new_addr); - return GNTST_general_error; - } -+ -+ l1pg = mfn_to_page(gl1mfn); -+ lock_page(l1pg); - ol1e = *pl1e; - - if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, l1e_empty(), - gl1mfn, curr, 0)) ) - { -+ unlock_page(l1pg); - MEM_LOG("Cannot delete PTE entry at %p", (unsigned long *)pl1e); - guest_unmap_l1e(curr, pl1e); - return GNTST_general_error; - } - -+ unlock_page(l1pg); - guest_unmap_l1e(curr, pl1e); - - rc = replace_grant_va_mapping(addr, frame, ol1e, curr); -@@ -2982,8 +3070,6 @@ int do_update_va_mapping(unsigned long v - if ( rc ) - return rc; - -- LOCK_BIGLOCK(d); -- - pl1e = guest_map_l1e(v, va, &gl1mfn); - - if ( unlikely(!pl1e || !mod_l1_entry(pl1e, val, gl1mfn, 0)) ) -@@ -2995,8 +3081,6 @@ int do_update_va_mapping(unsigned long v - - process_deferred_ops(); - -- UNLOCK_BIGLOCK(d); -- - switch ( flags & UVMF_FLUSHTYPE_MASK ) - { - case UVMF_TLB_FLUSH: -@@ -3632,8 +3716,6 @@ int ptwr_do_page_fault(struct vcpu *v, u - struct ptwr_emulate_ctxt ptwr_ctxt; - int rc; - -- LOCK_BIGLOCK(d); -- - /* Attempt to read the PTE that maps the VA being accessed. */ - guest_get_eff_l1e(v, addr, &pte); - page = l1e_get_page(pte); -@@ -3652,16 +3734,16 @@ int ptwr_do_page_fault(struct vcpu *v, u - ptwr_ctxt.cr2 = addr; - ptwr_ctxt.pte = pte; - -+ lock_page(page); - rc = x86_emulate(&ptwr_ctxt.ctxt, &ptwr_emulate_ops); -+ unlock_page(page); - if ( rc == X86EMUL_UNHANDLEABLE ) - goto bail; - -- UNLOCK_BIGLOCK(d); - perfc_incr(ptwr_emulations); - return EXCRET_fault_fixed; - - bail: -- UNLOCK_BIGLOCK(d); - return 0; - } - -Index: xen-3.2.1-testing/xen/include/asm-x86/mm.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/mm.h -+++ xen-3.2.1-testing/xen/include/asm-x86/mm.h -@@ -83,9 +83,12 @@ struct page_info - /* PAE only: is this an L2 page directory containing Xen-private mappings? */ - #define _PGT_pae_xen_l2 26 - #define PGT_pae_xen_l2 (1U<<_PGT_pae_xen_l2) -+ /* The page is currently locked for modification. */ -+#define _PGT_locked 25 -+#define PGT_locked (1U<<_PGT_locked) - -- /* 26-bit count of uses of this frame as its current type. */ --#define PGT_count_mask ((1U<<26)-1) -+ /* 25-bit count of uses of this frame as its current type. */ -+#define PGT_count_mask ((1U<<25)-1) - - /* Cleared when the owning guest 'frees' this page. */ - #define _PGC_allocated 31 diff --git a/x86-show-page-walk-early.patch b/x86-show-page-walk-early.patch index b839027..468f86c 100644 --- a/x86-show-page-walk-early.patch +++ b/x86-show-page-walk-early.patch @@ -1,8 +1,8 @@ -Index: xen-3.2.1-testing/xen/arch/x86/traps.c +Index: xen-3.3.0-testing/xen/arch/x86/traps.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/traps.c -@@ -1187,6 +1187,7 @@ asmlinkage void do_early_page_fault(stru +--- xen-3.3.0-testing.orig/xen/arch/x86/traps.c ++++ xen-3.3.0-testing/xen/arch/x86/traps.c +@@ -1261,6 +1261,7 @@ asmlinkage void do_early_page_fault(stru unsigned long *stk = (unsigned long *)regs; printk("Early fatal page fault at %04x:%p (cr2=%p, ec=%04x)\n", regs->cs, _p(regs->eip), _p(cr2), regs->error_code); @@ -10,11 +10,11 @@ Index: xen-3.2.1-testing/xen/arch/x86/traps.c printk("Stack dump: "); while ( ((long)stk & ((PAGE_SIZE - 1) & ~(BYTES_PER_LONG - 1))) != 0 ) printk("%p ", _p(*stk++)); -Index: xen-3.2.1-testing/xen/arch/x86/x86_32/mm.c +Index: xen-3.3.0-testing/xen/arch/x86/x86_32/mm.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_32/mm.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_32/mm.c -@@ -41,6 +41,7 @@ l2_pgentry_t __attribute__ ((__section__ +--- xen-3.3.0-testing.orig/xen/arch/x86/x86_32/mm.c ++++ xen-3.3.0-testing/xen/arch/x86/x86_32/mm.c +@@ -38,6 +38,7 @@ extern l1_pgentry_t l1_identmap[L1_PAGET unsigned int PAGE_HYPERVISOR = __PAGE_HYPERVISOR; unsigned int PAGE_HYPERVISOR_NOCACHE = __PAGE_HYPERVISOR_NOCACHE; @@ -22,7 +22,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_32/mm.c static unsigned long mpt_size; void *alloc_xen_pagetable(void) -@@ -112,6 +113,8 @@ void __init paging_init(void) +@@ -105,6 +106,8 @@ void __init paging_init(void) pg, (__PAGE_HYPERVISOR | _PAGE_PSE) & ~_PAGE_RW)); } @@ -31,11 +31,11 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_32/mm.c /* Fill with an obvious debug pattern. */ for ( i = 0; i < (mpt_size / BYTES_PER_LONG); i++) set_gpfn_from_mfn(i, 0x55555555); -Index: xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c +Index: xen-3.3.0-testing/xen/arch/x86/x86_32/traps.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_32/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c -@@ -132,7 +132,8 @@ void show_page_walk(unsigned long addr) +--- xen-3.3.0-testing.orig/xen/arch/x86/x86_32/traps.c ++++ xen-3.3.0-testing/xen/arch/x86/x86_32/traps.c +@@ -160,7 +160,8 @@ void show_page_walk(unsigned long addr) l3t += (cr3 & 0xFE0UL) >> 3; l3e = l3t[l3_table_offset(addr)]; mfn = l3e_get_pfn(l3e); @@ -45,7 +45,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c printk(" L3[0x%03lx] = %"PRIpte" %08lx\n", l3_table_offset(addr), l3e_get_intpte(l3e), pfn); unmap_domain_page(l3t); -@@ -143,7 +144,8 @@ void show_page_walk(unsigned long addr) +@@ -170,7 +171,8 @@ void show_page_walk(unsigned long addr) l2t = map_domain_page(mfn); l2e = l2t[l2_table_offset(addr)]; mfn = l2e_get_pfn(l2e); @@ -55,7 +55,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c printk(" L2[0x%03lx] = %"PRIpte" %08lx %s\n", l2_table_offset(addr), l2e_get_intpte(l2e), pfn, (l2e_get_flags(l2e) & _PAGE_PSE) ? "(PSE)" : ""); -@@ -155,7 +157,8 @@ void show_page_walk(unsigned long addr) +@@ -182,7 +184,8 @@ void show_page_walk(unsigned long addr) l1t = map_domain_page(mfn); l1e = l1t[l1_table_offset(addr)]; mfn = l1e_get_pfn(l1e); @@ -65,10 +65,10 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_32/traps.c printk(" L1[0x%03lx] = %"PRIpte" %08lx\n", l1_table_offset(addr), l1e_get_intpte(l1e), pfn); unmap_domain_page(l1t); -Index: xen-3.2.1-testing/xen/arch/x86/x86_64/mm.c +Index: xen-3.3.0-testing/xen/arch/x86/x86_64/mm.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_64/mm.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_64/mm.c +--- xen-3.3.0-testing.orig/xen/arch/x86/x86_64/mm.c ++++ xen-3.3.0-testing/xen/arch/x86/x86_64/mm.c @@ -32,6 +32,7 @@ #include #include @@ -77,7 +77,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/mm.c #ifdef CONFIG_COMPAT unsigned int m2p_compat_vstart = __HYPERVISOR_COMPAT_VIRT_START; #endif -@@ -144,6 +145,8 @@ void __init paging_init(void) +@@ -151,6 +152,8 @@ void __init paging_init(void) l2_ro_mpt++; } @@ -86,11 +86,11 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/mm.c /* Create user-accessible L2 directory to map the MPT for compat guests. */ BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) != l4_table_offset(HIRO_COMPAT_MPT_VIRT_START)); -Index: xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c +Index: xen-3.3.0-testing/xen/arch/x86/x86_64/traps.c =================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_64/traps.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c -@@ -136,7 +136,8 @@ void show_page_walk(unsigned long addr) +--- xen-3.3.0-testing.orig/xen/arch/x86/x86_64/traps.c ++++ xen-3.3.0-testing/xen/arch/x86/x86_64/traps.c +@@ -174,7 +174,8 @@ void show_page_walk(unsigned long addr) l4t = mfn_to_virt(mfn); l4e = l4t[l4_table_offset(addr)]; mfn = l4e_get_pfn(l4e); @@ -100,17 +100,17 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c printk(" L4[0x%03lx] = %"PRIpte" %016lx\n", l4_table_offset(addr), l4e_get_intpte(l4e), pfn); if ( !(l4e_get_flags(l4e) & _PAGE_PRESENT) ) -@@ -145,7 +146,8 @@ void show_page_walk(unsigned long addr) +@@ -183,7 +184,8 @@ void show_page_walk(unsigned long addr) l3t = mfn_to_virt(mfn); l3e = l3t[l3_table_offset(addr)]; mfn = l3e_get_pfn(l3e); - pfn = mfn_valid(mfn) ? get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + pfn = mfn_valid(mfn) && mpt_valid ? + get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L3[0x%03lx] = %"PRIpte" %016lx\n", - l3_table_offset(addr), l3e_get_intpte(l3e), pfn); - if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) ) -@@ -154,7 +156,8 @@ void show_page_walk(unsigned long addr) + printk(" L3[0x%03lx] = %"PRIpte" %016lx%s\n", + l3_table_offset(addr), l3e_get_intpte(l3e), pfn, + (l3e_get_flags(l3e) & _PAGE_PSE) ? " (PSE)" : ""); +@@ -194,7 +196,8 @@ void show_page_walk(unsigned long addr) l2t = mfn_to_virt(mfn); l2e = l2t[l2_table_offset(addr)]; mfn = l2e_get_pfn(l2e); @@ -120,7 +120,7 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c printk(" L2[0x%03lx] = %"PRIpte" %016lx %s\n", l2_table_offset(addr), l2e_get_intpte(l2e), pfn, (l2e_get_flags(l2e) & _PAGE_PSE) ? "(PSE)" : ""); -@@ -165,7 +168,8 @@ void show_page_walk(unsigned long addr) +@@ -205,7 +208,8 @@ void show_page_walk(unsigned long addr) l1t = mfn_to_virt(mfn); l1e = l1t[l1_table_offset(addr)]; mfn = l1e_get_pfn(l1e); @@ -130,11 +130,11 @@ Index: xen-3.2.1-testing/xen/arch/x86/x86_64/traps.c printk(" L1[0x%03lx] = %"PRIpte" %016lx\n", l1_table_offset(addr), l1e_get_intpte(l1e), pfn); } -Index: xen-3.2.1-testing/xen/include/asm-x86/mm.h +Index: xen-3.3.0-testing/xen/include/asm-x86/mm.h =================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/mm.h -+++ xen-3.2.1-testing/xen/include/asm-x86/mm.h -@@ -267,6 +267,7 @@ TYPE_SAFE(unsigned long,mfn); +--- xen-3.3.0-testing.orig/xen/include/asm-x86/mm.h ++++ xen-3.3.0-testing/xen/include/asm-x86/mm.h +@@ -277,6 +277,7 @@ TYPE_SAFE(unsigned long,mfn); #define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START) #define INVALID_M2P_ENTRY (~0UL) #define VALID_M2P(_e) (!((_e) & (1UL<<(BITS_PER_LONG-1)))) diff --git a/x86_emulate.patch b/x86_emulate.patch deleted file mode 100644 index 127aa0f..0000000 --- a/x86_emulate.patch +++ /dev/null @@ -1,342 +0,0 @@ -Index: xen-3.2.1-testing/xen/arch/x86/mm.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/mm.c -+++ xen-3.2.1-testing/xen/arch/x86/mm.c -@@ -3594,6 +3594,7 @@ static int ptwr_emulated_cmpxchg( - container_of(ctxt, struct ptwr_emulate_ctxt, ctxt)); - } - -+#ifdef __i386__ - static int ptwr_emulated_cmpxchg8b( - enum x86_segment seg, - unsigned long offset, -@@ -3609,13 +3610,16 @@ static int ptwr_emulated_cmpxchg8b( - offset, ((u64)old_hi << 32) | old, ((u64)new_hi << 32) | new, 8, 1, - container_of(ctxt, struct ptwr_emulate_ctxt, ctxt)); - } -+#else -+#define ptwr_emulated_cmpxchg8b NULL -+#endif - - static struct x86_emulate_ops ptwr_emulate_ops = { - .read = ptwr_emulated_read, - .insn_fetch = ptwr_emulated_read, - .write = ptwr_emulated_write, - .cmpxchg = ptwr_emulated_cmpxchg, -- .cmpxchg8b = ptwr_emulated_cmpxchg8b -+ .cmpxchg2 = ptwr_emulated_cmpxchg8b - }; - - /* Write page fault handler: check if guest is trying to modify a PTE. */ -Index: xen-3.2.1-testing/xen/arch/x86/mm/shadow/common.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/mm/shadow/common.c -+++ xen-3.2.1-testing/xen/arch/x86/mm/shadow/common.c -@@ -261,6 +261,7 @@ hvm_emulate_cmpxchg(enum x86_segment seg - v, addr, old, new, bytes, sh_ctxt); - } - -+#ifdef __i386__ - static int - hvm_emulate_cmpxchg8b(enum x86_segment seg, - unsigned long offset, -@@ -287,13 +288,16 @@ hvm_emulate_cmpxchg8b(enum x86_segment s - return v->arch.paging.mode->shadow.x86_emulate_cmpxchg8b( - v, addr, old_lo, old_hi, new_lo, new_hi, sh_ctxt); - } -+#else -+#define hvm_emulate_cmpxchg8b NULL -+#endif - - static struct x86_emulate_ops hvm_shadow_emulator_ops = { - .read = hvm_emulate_read, - .insn_fetch = hvm_emulate_insn_fetch, - .write = hvm_emulate_write, - .cmpxchg = hvm_emulate_cmpxchg, -- .cmpxchg8b = hvm_emulate_cmpxchg8b, -+ .cmpxchg2 = hvm_emulate_cmpxchg8b, - }; - - static int -@@ -351,6 +355,7 @@ pv_emulate_cmpxchg(enum x86_segment seg, - v, offset, old, new, bytes, sh_ctxt); - } - -+#ifdef __i386__ - static int - pv_emulate_cmpxchg8b(enum x86_segment seg, - unsigned long offset, -@@ -368,13 +373,16 @@ pv_emulate_cmpxchg8b(enum x86_segment se - return v->arch.paging.mode->shadow.x86_emulate_cmpxchg8b( - v, offset, old_lo, old_hi, new_lo, new_hi, sh_ctxt); - } -+#else -+#define pv_emulate_cmpxchg8b NULL -+#endif - - static struct x86_emulate_ops pv_shadow_emulator_ops = { - .read = pv_emulate_read, - .insn_fetch = pv_emulate_read, - .write = pv_emulate_write, - .cmpxchg = pv_emulate_cmpxchg, -- .cmpxchg8b = pv_emulate_cmpxchg8b, -+ .cmpxchg2 = pv_emulate_cmpxchg8b, - }; - - struct x86_emulate_ops *shadow_init_emulation( -@@ -388,7 +396,12 @@ struct x86_emulate_ops *shadow_init_emul - - if ( !is_hvm_vcpu(v) ) - { -+#ifndef CONFIG_COMPAT - sh_ctxt->ctxt.addr_size = sh_ctxt->ctxt.sp_size = BITS_PER_LONG; -+#else -+ sh_ctxt->ctxt.addr_size = sh_ctxt->ctxt.sp_size = -+ !is_pv_32on64_vcpu(v) ? BITS_PER_LONG : COMPAT_BITS_PER_LONG; -+#endif - return &pv_shadow_emulator_ops; - } - -Index: xen-3.2.1-testing/xen/arch/x86/mm/shadow/multi.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/mm/shadow/multi.c -+++ xen-3.2.1-testing/xen/arch/x86/mm/shadow/multi.c -@@ -4244,7 +4244,8 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, u - return rv; - } - --int -+#ifdef __i386__ -+static int - sh_x86_emulate_cmpxchg8b(struct vcpu *v, unsigned long vaddr, - unsigned long old_lo, unsigned long old_hi, - unsigned long new_lo, unsigned long new_hi, -@@ -4280,6 +4281,7 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v, - shadow_unlock(v->domain); - return rv; - } -+#endif - - - /**************************************************************************/ -@@ -4566,7 +4568,9 @@ struct paging_mode sh_paging_mode = { - .shadow.detach_old_tables = sh_detach_old_tables, - .shadow.x86_emulate_write = sh_x86_emulate_write, - .shadow.x86_emulate_cmpxchg = sh_x86_emulate_cmpxchg, -+#ifdef __i386__ - .shadow.x86_emulate_cmpxchg8b = sh_x86_emulate_cmpxchg8b, -+#endif - .shadow.make_monitor_table = sh_make_monitor_table, - .shadow.destroy_monitor_table = sh_destroy_monitor_table, - #if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC -Index: xen-3.2.1-testing/xen/arch/x86/x86_emulate.c -=================================================================== ---- xen-3.2.1-testing.orig/xen/arch/x86/x86_emulate.c -+++ xen-3.2.1-testing/xen/arch/x86/x86_emulate.c -@@ -31,7 +31,10 @@ - #include - #include - #include -+#include - #undef cmpxchg -+#undef cpuid -+#undef wbinvd - #endif - #include - -@@ -3330,60 +3333,64 @@ x86_emulate( - src.val = x86_seg_gs; - goto pop_seg; - -- case 0xc7: /* Grp9 (cmpxchg8b) */ --#if defined(__i386__) -- { -- unsigned long old_lo, old_hi; -+ case 0xc7: /* Grp9 (cmpxchg{8,16}b) */ - generate_exception_if((modrm_reg & 7) != 1, EXC_UD); - generate_exception_if(ea.type != OP_MEM, EXC_UD); -- if ( (rc = ops->read(ea.mem.seg, ea.mem.off+0, &old_lo, 4, ctxt)) || -- (rc = ops->read(ea.mem.seg, ea.mem.off+4, &old_hi, 4, ctxt)) ) -- goto done; -- if ( (old_lo != _regs.eax) || (old_hi != _regs.edx) ) -- { -- _regs.eax = old_lo; -- _regs.edx = old_hi; -- _regs.eflags &= ~EFLG_ZF; -- } -- else if ( ops->cmpxchg8b == NULL ) -- { -- rc = X86EMUL_UNHANDLEABLE; -- goto done; -- } -- else -+#ifdef __x86_64__ -+ if ( op_bytes != 8 ) - { -- if ( (rc = ops->cmpxchg8b(ea.mem.seg, ea.mem.off, old_lo, old_hi, -- _regs.ebx, _regs.ecx, ctxt)) != 0 ) -+ unsigned long old, new; -+ -+ if ( (rc = ops->read(ea.mem.seg, ea.mem.off, &old, 8, ctxt)) != 0 ) - goto done; -- _regs.eflags |= EFLG_ZF; -- } -- break; -- } --#elif defined(__x86_64__) -- { -- unsigned long old, new; -- generate_exception_if((modrm_reg & 7) != 1, EXC_UD); -- generate_exception_if(ea.type != OP_MEM, EXC_UD); -- if ( (rc = ops->read(ea.mem.seg, ea.mem.off, &old, 8, ctxt)) != 0 ) -- goto done; -- if ( ((uint32_t)(old>>0) != (uint32_t)_regs.eax) || -- ((uint32_t)(old>>32) != (uint32_t)_regs.edx) ) -- { -- _regs.eax = (uint32_t)(old>>0); -- _regs.edx = (uint32_t)(old>>32); -- _regs.eflags &= ~EFLG_ZF; -+ if ( ((uint32_t)(old>>0) != (uint32_t)_regs.eax) || -+ ((uint32_t)(old>>32) != (uint32_t)_regs.edx) ) -+ { -+ _regs.eax = (uint32_t)(old>>0); -+ _regs.edx = (uint32_t)(old>>32); -+ _regs.eflags &= ~EFLG_ZF; -+ } -+ else -+ { -+ new = (_regs.ecx<<32)|(uint32_t)_regs.ebx; -+ if ( (rc = ops->cmpxchg(ea.mem.seg, ea.mem.off, old, -+ new, 8, ctxt)) != 0 ) -+ goto done; -+ _regs.eflags |= EFLG_ZF; -+ } - } -+ else if ( !cpu_has_cmpxchg16b ) -+ generate_exception_if(1, EXC_UD); - else -+#endif - { -- new = (_regs.ecx<<32)|(uint32_t)_regs.ebx; -- if ( (rc = ops->cmpxchg(ea.mem.seg, ea.mem.off, old, -- new, 8, ctxt)) != 0 ) -+ unsigned long old_lo, old_hi; -+ -+ if ( (rc = ops->read(ea.mem.seg, ea.mem.off, -+ &old_lo, sizeof(old_lo), ctxt)) || -+ (rc = ops->read(ea.mem.seg, ea.mem.off+sizeof(old_lo), -+ &old_hi, sizeof(old_lo), ctxt)) ) - goto done; -- _regs.eflags |= EFLG_ZF; -+ if ( (old_lo != _regs.eax) || (old_hi != _regs.edx) ) -+ { -+ _regs.eax = old_lo; -+ _regs.edx = old_hi; -+ _regs.eflags &= ~EFLG_ZF; -+ } -+ else if ( ops->cmpxchg2 == NULL ) -+ { -+ rc = X86EMUL_UNHANDLEABLE; -+ goto done; -+ } -+ else -+ { -+ if ( (rc = ops->cmpxchg2(ea.mem.seg, ea.mem.off, old_lo, old_hi, -+ _regs.ebx, _regs.ecx, ctxt)) != 0 ) -+ goto done; -+ _regs.eflags |= EFLG_ZF; -+ } - } - break; -- } --#endif - - case 0xc8 ... 0xcf: /* bswap */ - dst.type = OP_REG; -@@ -3393,7 +3400,7 @@ x86_emulate( - { - default: /* case 2: */ - /* Undefined behaviour. Writes zero on all tested CPUs. */ -- dst.val = 0; -+ __asm__("data16 bswap %k0" : "+r" (dst.val)); - break; - case 4: - #ifdef __x86_64__ -Index: xen-3.2.1-testing/xen/include/asm-x86/cpufeature.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/cpufeature.h -+++ xen-3.2.1-testing/xen/include/asm-x86/cpufeature.h -@@ -149,6 +149,7 @@ - #define cpu_has_cyrix_arr boot_cpu_has(X86_FEATURE_CYRIX_ARR) - #define cpu_has_centaur_mcr boot_cpu_has(X86_FEATURE_CENTAUR_MCR) - #define cpu_has_clflush boot_cpu_has(X86_FEATURE_CLFLSH) -+#define cpu_has_cmpxchg16b 0 - #define cpu_has_page1gb 0 - #define cpu_has_efer (boot_cpu_data.x86_capability[1] & 0x20100800) - #else /* __x86_64__ */ -@@ -175,6 +176,7 @@ - #define cpu_has_cyrix_arr 0 - #define cpu_has_centaur_mcr 0 - #define cpu_has_clflush boot_cpu_has(X86_FEATURE_CLFLSH) -+#define cpu_has_cmpxchg16b boot_cpu_has(X86_FEATURE_CX16) - #define cpu_has_page1gb boot_cpu_has(X86_FEATURE_PAGE1GB) - #define cpu_has_efer 1 - #endif -Index: xen-3.2.1-testing/xen/include/asm-x86/x86_emulate.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/x86_emulate.h -+++ xen-3.2.1-testing/xen/include/asm-x86/x86_emulate.h -@@ -104,8 +104,9 @@ struct segment_register { - * some out-of-band mechanism, unknown to the emulator. The memop signals - * failure by returning X86EMUL_EXCEPTION to the emulator, which will - * then immediately bail. -- * 2. Valid access sizes are 1, 2, 4 and 8 bytes. On x86/32 systems only -- * cmpxchg8b_emulated need support 8-byte accesses. -+ * 2. Valid access sizes are 1, 2, 4, 8, and 16 bytes. On x86/32 systems only -+ * cmpxchg2_emulated need support 8-byte accesses. On x86/64 systems only -+ * cmpxchg2_emulated need support 16-byte accesses. - * 3. The emulator cannot handle 64-bit mode emulation on an x86/32 system. - */ - struct x86_emulate_ops -@@ -165,16 +166,17 @@ struct x86_emulate_ops - struct x86_emulate_ctxt *ctxt); - - /* -- * cmpxchg8b: Emulate an atomic (LOCKed) CMPXCHG8B operation. -+ * cmpxchg2: Emulate an atomic (LOCKed) CMPXCHG{8,16}B operation. - * @old: [IN ] Value expected to be current at @addr. - * @new: [IN ] Value to write to @addr. - * NOTES: -- * 1. This function is only ever called when emulating a real CMPXCHG8B. -- * 2. This function is *never* called on x86/64 systems. -- * 2. Not defining this function (i.e., specifying NULL) is equivalent -+ * 1. This function is only ever called when emulating a real CMPXCHG{8,16}B. -+ * 2. This function is *never* called on x86/64 systems for emulating -+ * CMPXCHG8B. -+ * 3. Not defining this function (i.e., specifying NULL) is equivalent - * to defining a function that always returns X86EMUL_UNHANDLEABLE. - */ -- int (*cmpxchg8b)( -+ int (*cmpxchg2)( - enum x86_segment seg, - unsigned long offset, - unsigned long old_lo, -Index: xen-3.2.1-testing/xen/include/asm-x86/paging.h -=================================================================== ---- xen-3.2.1-testing.orig/xen/include/asm-x86/paging.h -+++ xen-3.2.1-testing/xen/include/asm-x86/paging.h -@@ -83,12 +83,14 @@ struct shadow_paging_mode { - unsigned long new, - unsigned int bytes, - struct sh_emulate_ctxt *sh_ctxt); -+#ifdef __i386__ - int (*x86_emulate_cmpxchg8b )(struct vcpu *v, unsigned long va, - unsigned long old_lo, - unsigned long old_hi, - unsigned long new_lo, - unsigned long new_hi, - struct sh_emulate_ctxt *sh_ctxt); -+#endif - mfn_t (*make_monitor_table )(struct vcpu *v); - void (*destroy_monitor_table )(struct vcpu *v, mfn_t mmfn); - int (*guess_wrmap )(struct vcpu *v, diff --git a/xen-3.3.0-testing-src.tar.bz2 b/xen-3.3.0-testing-src.tar.bz2 index d26f2b1..788af01 100644 --- a/xen-3.3.0-testing-src.tar.bz2 +++ b/xen-3.3.0-testing-src.tar.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3dcdef0709301c1e6ad4f590b10f1734e33d6979942364cbf186a2074689b4b -size 7051282 +oid sha256:e63df7fa5cc4d603cf44b7562d2f03f0784f2951389eb44b752897f67b1ed24e +size 9818013 diff --git a/xen-api-auth.patch b/xen-api-auth.patch index f2d2acd..d5c183d 100644 --- a/xen-api-auth.patch +++ b/xen-api-auth.patch @@ -1,6 +1,7 @@ -diff -r 854b4e5a009f tools/python/xen/xend/XendAuthSessions.py ---- a/tools/python/xen/xend/XendAuthSessions.py Tue Feb 05 16:42:18 2008 -0700 -+++ b/tools/python/xen/xend/XendAuthSessions.py Fri Feb 22 17:24:01 2008 -0700 +Index: xen-3.3.0-testing/tools/python/xen/xend/XendAuthSessions.py +=================================================================== +--- xen-3.3.0-testing.orig/tools/python/xen/xend/XendAuthSessions.py ++++ xen-3.3.0-testing/tools/python/xen/xend/XendAuthSessions.py @@ -84,7 +84,7 @@ class XendAuthSessions: # if PAM doesn't exist, let's ignore it return False diff --git a/xen-config.diff b/xen-config.diff index 8617dd4..9dbeace 100644 --- a/xen-config.diff +++ b/xen-config.diff @@ -2,7 +2,24 @@ Index: xen-3.3.0-testing/Config.mk =================================================================== --- xen-3.3.0-testing.orig/Config.mk +++ xen-3.3.0-testing/Config.mk -@@ -89,7 +89,7 @@ CONFIG_QEMU ?= ioemu +@@ -84,20 +84,20 @@ QEMU_REMOTE=http://xenbits.xensource.com + + # Specify which qemu-dm to use. This may be `ioemu' to use the old + # Mercurial in-tree version, or a local directory, or a git URL. +-# CONFIG_QEMU ?= ioemu ++CONFIG_QEMU ?= ioemu-remote + # CONFIG_QEMU ?= ../qemu-xen.git +-ifeq ($(XEN_TARGET_ARCH),ia64) +-CONFIG_QEMU ?= ioemu +-else +-CONFIG_QEMU ?= $(QEMU_REMOTE) +-endif ++# ifeq ($(XEN_TARGET_ARCH),ia64) ++# CONFIG_QEMU ?= ioemu ++# else ++# CONFIG_QEMU ?= $(QEMU_REMOTE) ++# endif + # Optional components XENSTAT_XENTOP ?= y VTPM_TOOLS ?= n @@ -11,3 +28,6 @@ Index: xen-3.3.0-testing/Config.mk PYTHON_TOOLS ?= y CONFIG_MINITERM ?= n CONFIG_LOMOUNT ?= n + +--include $(XEN_ROOT)/.config ++#-include $(XEN_ROOT)/.config diff --git a/xen-destdir.diff b/xen-destdir.diff index f37e867..2ecace8 100644 --- a/xen-destdir.diff +++ b/xen-destdir.diff @@ -3,12 +3,12 @@ Index: xen-3.3.0-testing/docs/Makefile --- xen-3.3.0-testing.orig/docs/Makefile +++ xen-3.3.0-testing/docs/Makefile @@ -90,7 +90,8 @@ install: all - $(INSTALL_DIR) $(DESTDIR)$(mandir) - cp -dR man1 $(DESTDIR)$(mandir) - cp -dR man5 $(DESTDIR)$(mandir) -- [ ! -d html ] || cp -dR html $(DESTDIR)$(pkgdocdir) -+ $(INSTALL_DIR) $(DESTDIR)$(pkgdocdir)/html -+ cp -dR html.done/* $(DESTDIR)$(pkgdocdir)/html + $(INSTALL_DIR) $(DESTDIR)$(MANDIR) + cp -dR man1 $(DESTDIR)$(MANDIR) + cp -dR man5 $(DESTDIR)$(MANDIR) +- [ ! -d html ] || cp -dR html $(DESTDIR)$(DOCDIR) ++ $(INSTALL_DIR) $(DESTDIR)$(DOCDIR)/html ++ cp -dR html.done/* $(DESTDIR)$(DOCDIR)/html pdf/%.pdf: ps/%.ps $(INSTALL_DIR) $(@D) @@ -26,7 +26,7 @@ Index: xen-3.3.0-testing/tools/examples/Makefile =================================================================== --- xen-3.3.0-testing.orig/tools/examples/Makefile +++ xen-3.3.0-testing/tools/examples/Makefile -@@ -39,18 +39,6 @@ XEN_HOTPLUG_SCRIPTS = xen-backend.agent +@@ -47,18 +47,6 @@ XEN_HOTPLUG_SCRIPTS = xen-backend.agent UDEV_RULES_DIR = /etc/udev UDEV_RULES = xen-backend.rules @@ -45,13 +45,16 @@ Index: xen-3.3.0-testing/tools/examples/Makefile .PHONY: all all: -@@ -58,15 +46,15 @@ all: +@@ -66,7 +54,7 @@ all: build: .PHONY: install --install: all install-initd install-configs install-scripts $(HOTPLUGS) -+install: all install-initd install-configs install-scripts install-udev +-install: all install-readmes install-initd install-configs install-scripts $(HOTPLUGS) ++install: all install-readmes install-initd install-configs install-scripts install-udev + .PHONY: install-readmes + install-readmes: +@@ -80,10 +68,10 @@ install-readmes: .PHONY: install-initd install-initd: [ -d $(DESTDIR)/etc/init.d ] || $(INSTALL_DIR) $(DESTDIR)/etc/init.d @@ -64,7 +67,7 @@ Index: xen-3.3.0-testing/tools/examples/Makefile .PHONY: install-configs install-configs: $(XEN_CONFIGS) -@@ -107,8 +95,7 @@ install-udev: +@@ -124,8 +112,7 @@ install-udev: $(INSTALL_DIR) $(DESTDIR)$(UDEV_RULES_DIR)/rules.d set -e; for i in $(UDEV_RULES); \ do \ @@ -116,19 +119,6 @@ Index: xen-3.3.0-testing/tools/python/Makefile endif install-dtd: all -Index: xen-3.3.0-testing/docs/Docs.mk -=================================================================== ---- xen-3.3.0-testing.orig/docs/Docs.mk -+++ xen-3.3.0-testing/docs/Docs.mk -@@ -8,6 +8,6 @@ POD2MAN := pod2man - DOT := dot - NEATO := neato - --pkgdocdir := /usr/share/doc/xen --mandir := /usr/share/man -+pkgdocdir := $(DOCDIR) -+mandir := $(MANDIR) - Index: xen-3.3.0-testing/tools/xenstore/Makefile =================================================================== --- xen-3.3.0-testing.orig/tools/xenstore/Makefile diff --git a/xen-disable-qemu-monitor.diff b/xen-disable-qemu-monitor.diff index d47a685..99859c0 100644 --- a/xen-disable-qemu-monitor.diff +++ b/xen-disable-qemu-monitor.diff @@ -5,11 +5,11 @@ the "sendkey" command, among other useful things), remove all console commands that can read/write dom0's state. -Index: xen-3.3.0-testing/tools/ioemu/monitor.c +Index: xen-3.3.0-testing/tools/ioemu-remote/monitor.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/monitor.c -+++ xen-3.3.0-testing/tools/ioemu/monitor.c -@@ -1231,6 +1231,7 @@ static term_cmd_t term_cmds[] = { +--- xen-3.3.0-testing.orig/tools/ioemu-remote/monitor.c ++++ xen-3.3.0-testing/tools/ioemu-remote/monitor.c +@@ -1320,6 +1320,7 @@ static term_cmd_t term_cmds[] = { "device|all", "commit changes to the disk images (if -snapshot is used) or backing files" }, { "info", "s?", do_info, "subcommand", "show various information about the system state" }, @@ -17,20 +17,20 @@ Index: xen-3.3.0-testing/tools/ioemu/monitor.c { "q|quit", "", do_quit, "", "quit the emulator" }, { "eject", "-fB", do_eject, -@@ -1241,6 +1242,7 @@ static term_cmd_t term_cmds[] = { - "filename", "save screen into PPM image 'filename'" }, +@@ -1332,6 +1333,7 @@ static term_cmd_t term_cmds[] = { + "filename", "output logs to 'filename'" }, { "log", "s", do_log, - "item1[,...]", "activate logging of the specified items to '/tmp/qemu.log'" }, + "item1[,...]", "activate logging of the specified items to '/tmp/qemu.log'" }, +#endif - #ifndef CONFIG_DM { "savevm", "s?", do_savevm, - "tag|id", "save a VM snapshot. If no tag or id are provided, a new snapshot is created" }, -@@ -1274,12 +1276,14 @@ static term_cmd_t term_cmds[] = { - { "system_powerdown", "", do_system_powerdown, + "tag|id", "save a VM snapshot. If no tag or id are provided, a new snapshot is created" }, + { "loadvm", "s", do_loadvm, +@@ -1361,12 +1363,14 @@ static term_cmd_t term_cmds[] = { + "", "reset the system" }, + { "system_powerdown", "", do_system_powerdown, "", "send system power down event" }, - #endif /* !CONFIG_DM */ +#ifdef CONFIG_TRUSTED_CLIENT - { "sum", "ii", do_sum, + { "sum", "ii", do_sum, "addr size", "compute the checksum of a memory region" }, { "usb_add", "s", do_usb_add, "device", "add USB device (e.g. 'host:bus.addr' or 'host:vendor_id:product_id')" }, @@ -40,7 +40,7 @@ Index: xen-3.3.0-testing/tools/ioemu/monitor.c #ifdef CONFIG_PHP_DEBUG { "pci_add", "s", do_pci_add, "device", "insert PCI pass-through device by BDF,e.g. (dom, bus, dev, func) by hex '0x0, 0x3, 0x0, 0x0'" }, -@@ -1296,6 +1300,7 @@ static term_cmd_t term_cmds[] = { +@@ -1381,6 +1385,7 @@ static term_cmd_t term_cmds[] = { "state", "change mouse button state (1=L, 2=M, 4=R)" }, { "mouse_set", "i", do_mouse_set, "index", "set which mouse device receives events" }, @@ -48,26 +48,26 @@ Index: xen-3.3.0-testing/tools/ioemu/monitor.c #ifdef HAS_AUDIO { "wavcapture", "si?i?i?", do_wav_capture, "path [frequency bits channels]", -@@ -1303,6 +1308,7 @@ static term_cmd_t term_cmds[] = { +@@ -1388,6 +1393,7 @@ static term_cmd_t term_cmds[] = { #endif { "stopcapture", "i", do_stop_capture, "capture index", "stop capture" }, +#endif - #ifndef CONFIG_DM - { "memsave", "lis", do_memory_save, + { "memsave", "lis", do_memory_save, "addr size file", "save to disk virtual memory dump starting at 'addr' of size 'size'", }, -@@ -1345,6 +1351,7 @@ static term_cmd_t info_cmds[] = { - #endif /* !CONFIG_DM */ + { "pmemsave", "lis", do_physical_memory_save, +@@ -1434,6 +1440,7 @@ static term_cmd_t info_cmds[] = { + "", "show kqemu information", }, { "usb", "", usb_info, "", "show guest USB devices", }, +#ifdef CONFIG_TRUSTED_CLIENT { "usbhost", "", usb_host_info, "", "show host USB devices", }, { "profile", "", do_info_profile, -@@ -1361,6 +1368,7 @@ static term_cmd_t info_cmds[] = { - { "hvmiopage", "", sp_info, - "", "show HVM device model shared page info" }, - #endif /* CONFIG_DM */ +@@ -1458,6 +1465,7 @@ static term_cmd_t info_cmds[] = { + { "slirp", "", do_info_slirp, + "", "show SLIRP statistics", }, + #endif +#endif { NULL, NULL, }, }; diff --git a/xen-domUloader.diff b/xen-domUloader.diff index ac2e6ce..46f8c4e 100644 --- a/xen-domUloader.diff +++ b/xen-domUloader.diff @@ -9,7 +9,7 @@ Index: xen-3.3.0-testing/tools/python/xen/util/blkif.py -def _parse_uname(uname): - fn = taptype = None +def parse_uname(uname): -+ fn = tpy = taptype = None ++ fn = typ = taptype = None if uname.find(":") != -1: (typ, fn) = uname.split(":", 1) if typ == "phy" and not fn.startswith("/"): @@ -36,7 +36,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/DevController.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/server/DevController.py +++ xen-3.3.0-testing/tools/python/xen/xend/server/DevController.py -@@ -604,6 +604,31 @@ class DevController: +@@ -612,6 +612,31 @@ class DevController: return (Missing, None) @@ -148,7 +148,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py from xen.xend.XendError import XendError, VmError from xen.xend.XendDevices import XendDevices from xen.xend.XendTask import XendTask -@@ -1863,6 +1863,10 @@ class XendDomainInfo: +@@ -1875,6 +1875,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) @@ -159,7 +159,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py def _waitForDevice_destroy(self, deviceClass, devid, backpath): return self.getDeviceController(deviceClass).waitForDevice_destroy( devid, backpath) -@@ -2534,8 +2538,11 @@ class XendDomainInfo: +@@ -2557,8 +2561,11 @@ class XendDomainInfo: blexec = osdep.pygrub_path blcfg = None @@ -173,7 +173,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py if not disks: msg = "Had a bootloader specified, but no disks are bootable" -@@ -2546,13 +2553,10 @@ class XendDomainInfo: +@@ -2569,13 +2576,10 @@ class XendDomainInfo: devtype = devinfo[0] disk = devinfo[1]['uname'] @@ -190,7 +190,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py log.info("Mounting %s on %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) -@@ -2564,7 +2568,9 @@ class XendDomainInfo: +@@ -2587,7 +2591,9 @@ class XendDomainInfo: from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() @@ -201,7 +201,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py fn = BOOTLOADER_LOOPBACK_DEVICE try: -@@ -2575,7 +2581,7 @@ class XendDomainInfo: +@@ -2598,7 +2604,7 @@ class XendDomainInfo: log.info("Unmounting %s from %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) diff --git a/xen-hvm-default-bridge.diff b/xen-hvm-default-bridge.diff index 8338bbb..40c6091 100644 --- a/xen-hvm-default-bridge.diff +++ b/xen-hvm-default-bridge.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/examples/xend-config.sxp =================================================================== --- xen-3.3.0-testing.orig/tools/examples/xend-config.sxp +++ xen-3.3.0-testing/tools/examples/xend-config.sxp -@@ -142,7 +142,8 @@ +@@ -141,7 +141,8 @@ # # (network-script 'network-bridge netdev=eth1') # @@ -12,31 +12,33 @@ Index: xen-3.3.0-testing/tools/examples/xend-config.sxp # # (network-script 'network-bridge bridge=') # -Index: xen-3.3.0-testing/tools/ioemu/vl.c +Index: xen-3.3.0-testing/tools/ioemu-remote/vl.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.c -+++ xen-3.3.0-testing/tools/ioemu/vl.c -@@ -111,8 +111,6 @@ - #define DEFAULT_NETWORK_SCRIPT "/etc/xen/qemu-ifup" - #ifdef _BSD - #define DEFAULT_BRIDGE "bridge0" --#else --#define DEFAULT_BRIDGE "xenbr0" +--- xen-3.3.0-testing.orig/tools/ioemu-remote/vl.c ++++ xen-3.3.0-testing/tools/ioemu-remote/vl.c +@@ -134,8 +134,8 @@ int inet_aton(const char *cp, struct in_ + #include "exec-all.h" + + #ifndef DEFAULT_NETWORK_SCRIPT +-#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup" +-#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown" ++#define DEFAULT_NETWORK_SCRIPT "/etc/xen/qemu-ifup" ++#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/xen/qemu-ifdown" #endif #ifdef __sun__ #define SMBD_COMMAND "/usr/sfw/sbin/smbd" -@@ -4183,10 +4181,10 @@ static int net_client_init(const char *s - if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) { - pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT); +@@ -4997,10 +4997,10 @@ static int net_client_init(const char *s + pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT); } -- if (get_param_value(bridge, sizeof(bridge), "bridge", p) == 0) { -- pstrcpy(bridge, sizeof(bridge), DEFAULT_BRIDGE); + if (get_param_value(script_arg, sizeof(script_arg), "scriptarg", p) == 0 && +- get_param_value(script_arg, sizeof(script_arg), "bridge", p) == 0) { /* deprecated; for xend compatibility */ +- pstrcpy(script_arg, sizeof(script_arg), ""); - } -- ret = net_tap_init(vlan, ifname, setup_script, bridge); -+ if (get_param_value(bridge, sizeof(bridge), "bridge", p) == 0) -+ ret = net_tap_init(vlan, ifname, setup_script, NULL); +- ret = net_tap_init(vlan, ifname, setup_script, down_script, script_arg); ++ get_param_value(script_arg, sizeof(script_arg), "bridge", p) == 0) /* deprecated; for xend compatibility */ ++ ret = net_tap_init(vlan, ifname, setup_script, NULL, NULL); + else -+ ret = net_tap_init(vlan, ifname, setup_script, bridge); ++ ret = net_tap_init(vlan, ifname, setup_script, down_script, script_arg); } } else #endif @@ -44,7 +46,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/image.py +++ xen-3.3.0-testing/tools/python/xen/xend/image.py -@@ -766,15 +766,17 @@ class HVMImageHandler(ImageHandler): +@@ -764,14 +764,16 @@ class HVMImageHandler(ImageHandler): mac = devinfo.get('mac') if mac is None: raise VmError("MAC address not specified or generated.") @@ -57,19 +59,17 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py ret.append("-net") - ret.append("tap,vlan=%d,ifname=tap%d.%d,bridge=%s" % - (nics, self.vm.getDomid(), nics-1, bridge)) -- + net = "tap,vlan=%d,ifname=tap%d.%d" % (nics, self.vm.getDomid(), nics-1) + if bridge: + net += ",bridge=%s" % bridge + ret.append(net) -+ - return ret - def getDeviceModelArgs(self, restore = False): -Index: xen-3.3.0-testing/tools/ioemu/target-i386-dm/qemu-ifup + if nics == 0: + ret.append("-net") +Index: xen-3.3.0-testing/tools/ioemu-remote/i386-dm/qemu-ifup =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/target-i386-dm/qemu-ifup -+++ xen-3.3.0-testing/tools/ioemu/target-i386-dm/qemu-ifup +--- xen-3.3.0-testing.orig/tools/ioemu-remote/i386-dm/qemu-ifup ++++ xen-3.3.0-testing/tools/ioemu-remote/i386-dm/qemu-ifup @@ -1,11 +1,11 @@ #!/bin/sh diff --git a/xen-hvm-default-pae.diff b/xen-hvm-default-pae.diff index accec2f..1effb5b 100644 --- a/xen-hvm-default-pae.diff +++ b/xen-hvm-default-pae.diff @@ -4,7 +4,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/image.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/image.py +++ xen-3.3.0-testing/tools/python/xen/xend/image.py -@@ -869,7 +869,7 @@ class X86_HVM_ImageHandler(HVMImageHandl +@@ -871,7 +871,7 @@ class X86_HVM_ImageHandler(HVMImageHandl def configure(self, vmConfig): HVMImageHandler.configure(self, vmConfig) diff --git a/xen-ioemu-hvm-pv-support.diff b/xen-ioemu-hvm-pv-support.diff index 1dd7457..5889ae0 100644 --- a/xen-ioemu-hvm-pv-support.diff +++ b/xen-ioemu-hvm-pv-support.diff @@ -1,19 +1,19 @@ -Index: xen-3.3.0-testing/tools/ioemu/hw/ide.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/ide.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/ide.c -+++ xen-3.3.0-testing/tools/ioemu/hw/ide.c -@@ -406,6 +406,9 @@ typedef struct PCIIDEState { - int type; /* see IDE_TYPE_xxx */ +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/ide.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/ide.c +@@ -485,6 +485,9 @@ typedef struct PCIIDEState { } PCIIDEState; + +static PCIIDEState *principal_ide_controller; +extern FILE *logfile; + #if defined(__ia64__) #include -@@ -2305,6 +2308,27 @@ static void ide_reset(IDEState *s) - ide_dummy_transfer_stop(s); +@@ -2778,6 +2781,27 @@ static void ide_reset(IDEState *s) + s->media_changed = 0; } +void ide_unplug_harddisks(void) @@ -40,41 +40,33 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/ide.c struct partition { uint8_t boot_ind; /* 0x80 - active */ uint8_t head; /* starting head */ -@@ -2707,6 +2731,9 @@ void pci_cmd646_ide_init(PCIBus *bus, Bl +@@ -3290,6 +3314,10 @@ void pci_cmd646_ide_init(PCIBus *bus, Bl sizeof(PCIIDEState), - -1, + -1, NULL, NULL); + if (principal_ide_controller) -+ abort(); ++ abort(); + principal_ide_controller = d; ++ d->type = IDE_TYPE_CMD646; pci_conf = d->dev.config; pci_conf[0x00] = 0x95; // CMD646 -@@ -2884,6 +2911,9 @@ void pci_piix_ide_init(PCIBus *bus, Bloc - NULL, NULL); - d->type = IDE_TYPE_PIIX3; - -+ if (principal_ide_controller) -+ abort(); -+ principal_ide_controller = d; - pci_conf = d->dev.config; - pci_conf[0x00] = 0x86; // Intel - pci_conf[0x01] = 0x80; -@@ -2930,6 +2960,9 @@ void pci_piix3_ide_init(PCIBus *bus, Blo +@@ -3421,6 +3449,10 @@ void pci_piix3_ide_init(PCIBus *bus, Blo NULL, NULL); d->type = IDE_TYPE_PIIX3; + if (principal_ide_controller) + abort(); + principal_ide_controller = d; ++ pci_conf = d->dev.config; pci_conf[0x00] = 0x86; // Intel pci_conf[0x01] = 0x80; -Index: xen-3.3.0-testing/tools/ioemu/hw/pci.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/pci.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/pci.c -+++ xen-3.3.0-testing/tools/ioemu/hw/pci.c -@@ -594,6 +594,28 @@ void pci_nic_init(PCIBus *bus, NICInfo * +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/pci.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/pci.c +@@ -653,6 +653,28 @@ void pci_nic_init(PCIBus *bus, NICInfo * } } @@ -103,19 +95,22 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/pci.c typedef struct { PCIDevice dev; PCIBus *bus; -Index: xen-3.3.0-testing/tools/ioemu/hw/xen_platform.c +Index: xen-3.3.0-testing/tools/ioemu-remote/hw/xen_platform.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_platform.c -+++ xen-3.3.0-testing/tools/ioemu/hw/xen_platform.c -@@ -23,15 +23,53 @@ - * THE SOFTWARE. - */ - #include "vl.h" +--- xen-3.3.0-testing.orig/tools/ioemu-remote/hw/xen_platform.c ++++ xen-3.3.0-testing/tools/ioemu-remote/hw/xen_platform.c +@@ -26,6 +26,8 @@ + #include "hw.h" + #include "pci.h" + #include "irq.h" ++#include "sysemu.h" +#include #include - extern FILE *logfile; +@@ -71,12 +73,53 @@ static void xen_platform_ioport_writeb(v + } + } +static uint32_t ioport_base; + @@ -152,23 +147,28 @@ Index: xen-3.3.0-testing/tools/ioemu/hw/xen_platform.c + } +} + - static void platform_ioport_map(PCIDevice *pci_dev, int region_num, - uint32_t addr, uint32_t size, int type) + + static void platform_ioport_map(PCIDevice *pci_dev, int region_num, uint32_t addr, uint32_t size, int type) { -- /* nothing yet */ + ioport_base = addr; + + register_ioport_write(addr, 16, 4, platform_ioport_write, NULL); ++/* + PCIXenPlatformState *d = (PCIXenPlatformState *)pci_dev; ++ + register_ioport_write(addr, size, 1, xen_platform_ioport_writeb, d); + register_ioport_read(addr, size, 1, xen_platform_ioport_readb, d); ++*/ } static uint32_t platform_mmio_read(void *opaque, target_phys_addr_t addr) -Index: xen-3.3.0-testing/tools/ioemu/vl.c +Index: xen-3.3.0-testing/tools/ioemu-remote/vl.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.c -+++ xen-3.3.0-testing/tools/ioemu/vl.c -@@ -217,6 +217,20 @@ extern int domid; +--- xen-3.3.0-testing.orig/tools/ioemu-remote/vl.c ++++ xen-3.3.0-testing/tools/ioemu-remote/vl.c +@@ -259,6 +259,20 @@ static int event_pending = 1; - PCI_EMULATION_INFO *PciEmulationInfoHead = NULL; + #include "xen-vl-extra.c" +typedef struct IOHandlerRecord { + int fd; @@ -187,15 +187,15 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c /***********************************************************/ /* x86 ISA bus support */ -@@ -3449,6 +3463,7 @@ void net_slirp_smb(const char *exported_ - typedef struct TAPState { - VLANClientState *vc; +@@ -4054,6 +4068,7 @@ typedef struct TAPState { int fd; + char down_script[1024]; + char script_arg[1024]; + struct TAPState *next; } TAPState; static void tap_receive(void *opaque, const uint8_t *buf, int size) -@@ -3476,6 +3491,36 @@ static void tap_send(void *opaque) +@@ -4089,6 +4104,36 @@ static void tap_send(void *opaque) } } @@ -232,7 +232,7 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c /* fd support */ static TAPState *net_tap_fd_init(VLANState *vlan, int fd) -@@ -3487,6 +3532,8 @@ static TAPState *net_tap_fd_init(VLANSta +@@ -4100,6 +4145,8 @@ static TAPState *net_tap_fd_init(VLANSta return NULL; s->fd = fd; s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s); @@ -241,7 +241,7 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c qemu_set_fd_handler(s->fd, tap_send, NULL, s); snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: fd=%d", fd); return s; -@@ -4500,20 +4547,6 @@ void dumb_display_init(DisplayState *ds) +@@ -5672,20 +5719,6 @@ static void dumb_display_init(DisplaySta #define MAX_IO_HANDLERS 64 @@ -261,17 +261,18 @@ Index: xen-3.3.0-testing/tools/ioemu/vl.c - /* XXX: fd_read_poll should be suppressed, but an API change is necessary in the character devices to suppress fd_can_read(). */ - int qemu_set_fd_handler2(int fd, -Index: xen-3.3.0-testing/tools/ioemu/vl.h + int qemu_set_fd_handler2(int fd, +Index: xen-3.3.0-testing/tools/ioemu-remote/sysemu.h =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vl.h -+++ xen-3.3.0-testing/tools/ioemu/vl.h -@@ -1578,6 +1578,8 @@ void kqemu_record_dump(void); - extern char domain_name[]; +--- xen-3.3.0-testing.orig/tools/ioemu-remote/sysemu.h ++++ xen-3.3.0-testing/tools/ioemu-remote/sysemu.h +@@ -49,6 +49,9 @@ void do_loadvm(const char *name); + void do_delvm(const char *name); + void do_info_snapshots(void); - void destroy_hvm_domain(void); +void net_tap_shutdown_all(void); +void pci_unplug_netifs(void); ++ + void main_loop_wait(int timeout); - #ifdef __ia64__ - static inline void xc_domain_shutdown_hook(int xc_handle, uint32_t domid) + /* Polling handling */ diff --git a/xen-lowmem-emergency-pool.diff b/xen-lowmem-emergency-pool.diff index 022c680..35c2ecf 100644 --- a/xen-lowmem-emergency-pool.diff +++ b/xen-lowmem-emergency-pool.diff @@ -54,6 +54,6 @@ Index: xen-3.3.0-testing/xen/common/page_alloc.c +custom_param("lowmem_emergency_pool", parse_lowmem_emergency_pool); + +/* - * Bit width of the DMA heap. + * Bit width of the DMA heap -- used to override NUMA-node-first. + * allocation strategy, which can otherwise exhaust low memory. */ - static unsigned int dma_bitsize = CONFIG_DMA_BITSIZE; diff --git a/xen-max-free-mem.diff b/xen-max-free-mem.diff index 110695f..d85b4d8 100644 --- a/xen-max-free-mem.diff +++ b/xen-max-free-mem.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendNode.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendNode.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendNode.py -@@ -649,11 +649,35 @@ class XendNode: +@@ -650,11 +650,35 @@ class XendNode: info['cpu_mhz'] = info['cpu_khz'] / 1000 @@ -43,7 +43,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendNode.py ITEM_ORDER = ['nr_cpus', 'nr_nodes', -@@ -664,6 +688,9 @@ class XendNode: +@@ -665,6 +689,9 @@ class XendNode: 'virt_caps', 'total_memory', 'free_memory', @@ -59,13 +59,13 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/balloon.py +++ xen-3.3.0-testing/tools/python/xen/xend/balloon.py @@ -41,6 +41,8 @@ SLEEP_TIME_GROWTH = 0.1 # label actually shown in the PROC_XEN_BALLOON file. - labels = { 'current' : 'Current allocation', - 'target' : 'Requested target', -+ 'min-target' : 'Minimum target', -+ 'max-target' : 'Maximum target', - 'low-balloon' : 'Low-mem balloon', - 'high-balloon' : 'High-mem balloon', - 'limit' : 'Xen hard limit' } + #labels = { 'current' : 'Current allocation', + # 'target' : 'Requested target', ++# 'min-target' : 'Minimum target', ++# 'max-target' : 'Maximum target', + # 'low-balloon' : 'Low-mem balloon', + # 'high-balloon' : 'High-mem balloon', + # 'limit' : 'Xen hard limit' } @@ -67,6 +69,23 @@ def get_dom0_target_alloc(): raise VmError('Failed to query target memory allocation of dom0.') return kb @@ -94,7 +94,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1010,6 +1010,27 @@ class XendDomainInfo: +@@ -1016,6 +1016,27 @@ class XendDomainInfo: return None diff --git a/xen-no-dummy-nfs-ip.diff b/xen-no-dummy-nfs-ip.diff index ee051c4..85f9767 100644 --- a/xen-no-dummy-nfs-ip.diff +++ b/xen-no-dummy-nfs-ip.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/create.py +++ xen-3.3.0-testing/tools/python/xen/xm/create.py -@@ -1044,9 +1044,8 @@ def preprocess_access_control(vals): +@@ -1066,9 +1066,8 @@ def preprocess_access_control(vals): def preprocess_ip(vals): if vals.ip or vals.dhcp != 'off': diff --git a/xen-paths.diff b/xen-paths.diff index 6a508ed..40810cf 100644 --- a/xen-paths.diff +++ b/xen-paths.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/create.py +++ xen-3.3.0-testing/tools/python/xen/xm/create.py -@@ -68,7 +68,7 @@ gopts.opt('quiet', short='q', +@@ -70,7 +70,7 @@ gopts.opt('quiet', short='q', use="Quiet.") gopts.opt('path', val='PATH', diff --git a/xen-qemu-iscsi-fix.patch b/xen-qemu-iscsi-fix.patch index cdee465..c6380f6 100644 --- a/xen-qemu-iscsi-fix.patch +++ b/xen-qemu-iscsi-fix.patch @@ -1,16 +1,17 @@ -Index: xen-3.3.0-testing/tools/ioemu/xenstore.c +Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c =================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/xenstore.c -+++ xen-3.3.0-testing/tools/ioemu/xenstore.c -@@ -88,6 +88,7 @@ void xenstore_parse_domain_config(int hv +--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c ++++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c +@@ -153,7 +153,7 @@ void xenstore_parse_domain_config(int hv + char *buf = NULL, *path; char *fpath = NULL, *bpath = NULL, *btype = NULL, *dev = NULL, *params = NULL, *type = NULL, *drv = NULL; - int i, is_scsi, is_tap, is_hdN = 0; -+ int j; +- int i, any_hdN = 0, ret, is_tap; ++ int i, j, any_hdN = 0, ret, is_tap; unsigned int len, num, hd_index, pci_devid = 0; BlockDriverState *bs; BlockDriver *format; -@@ -179,12 +180,7 @@ void xenstore_parse_domain_config(int hv +@@ -238,12 +238,7 @@ void xenstore_parse_domain_config(int hv continue; free(type); type = xs_read(xsh, XBT_NULL, buf, &len); @@ -24,7 +25,7 @@ Index: xen-3.3.0-testing/tools/ioemu/xenstore.c /* read the name of the device */ if (pasprintf(&buf, "%s/type", bpath) == -1) continue; -@@ -192,6 +188,35 @@ void xenstore_parse_domain_config(int hv +@@ -251,6 +246,35 @@ void xenstore_parse_domain_config(int hv drv = xs_read(xsh, XBT_NULL, buf, &len); if (drv == NULL) continue; diff --git a/xen-tightvnc-args.diff b/xen-tightvnc-args.diff index b83ca70..0dbe0aa 100644 --- a/xen-tightvnc-args.diff +++ b/xen-tightvnc-args.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/create.py +++ xen-3.3.0-testing/tools/python/xen/xm/create.py -@@ -1138,8 +1138,7 @@ def spawn_vnc(display): +@@ -1122,8 +1122,7 @@ def spawn_vnc(display): returns the port that the vncviewer is listening on and sets the global vncpid. On failure, returns 0. Note that vncviewer is daemonized. """ @@ -10,5 +10,5 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/create.py - "-listen", "%d" % (VNC_BASE_PORT + display) ]) + vncargs = (["vncviewer", "-listen", "%d" % (display) ]) global vncpid - vncpid = daemonize("vncviewer", vncargs) + vncpid = utils.daemonize("vncviewer", vncargs) if vncpid == 0: diff --git a/xen-vnc-resize.patch b/xen-vnc-resize.patch deleted file mode 100644 index bb63cb5..0000000 --- a/xen-vnc-resize.patch +++ /dev/null @@ -1,53 +0,0 @@ -Index: xen-3.3.0-testing/tools/ioemu/vnc.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/vnc.c -+++ xen-3.3.0-testing/tools/ioemu/vnc.c -@@ -278,6 +278,7 @@ static void dequeue_framebuffer_update(V - static int is_empty_queue(VncState *vs); - static void free_queue(VncState *vs); - static void vnc_colourdepth(DisplayState *ds, int depth); -+static void vnc_write_newsize(VncState *vs); - - #if 0 - static inline void vnc_set_bit(uint32_t *d, int k) -@@ -407,11 +408,7 @@ static void vnc_dpy_resize_shared(Displa - vs->width = ds->width; - vs->height = ds->height; - if (vs->update_requested) { -- vnc_write_u8(vs, 0); /* msg id */ -- vnc_write_u8(vs, 0); -- vnc_write_u16(vs, 1); /* number of rects */ -- vnc_framebuffer_update(vs, 0, 0, ds->width, ds->height, -223); -- vnc_flush(vs); -+ vnc_write_newsize(vs); - vs->update_requested--; - } else { - enqueue_framebuffer_update(vs, 0, 0, ds->width, ds->height, -223); -@@ -429,6 +426,15 @@ static void vnc_dpy_resize(DisplayState - vnc_dpy_resize_shared(ds, w, h, 0, w * (ds->depth / 8), NULL); - } - -+static void vnc_write_newsize(VncState *vs) -+{ -+ vnc_write_u8(vs, 0); /* msg id */ -+ vnc_write_u8(vs, 0); -+ vnc_write_u16(vs, 1); /* number of rects */ -+ vnc_framebuffer_update(vs, 0, 0, vs->ds->width, vs->ds->height, -223); -+ vnc_flush(vs); -+} -+ - /* fastest code */ - static void vnc_write_pixels_copy(VncState *vs, void *pixels, int size) - { -@@ -1510,6 +1516,11 @@ static void set_encodings(VncState *vs, - break; - case -223: /* DesktopResize */ - vs->has_resize = 1; -+ if (vs->width != vs->ds->width || vs->height != vs->ds->height) { -+ vnc_write_newsize(vs); -+ vs->width = vs->ds->width; -+ vs->height = vs->ds->height; -+ } - break; - case -257: - vs->has_pointer_type_change = 1; diff --git a/xen-warnings.diff b/xen-warnings.diff index eb4e2d4..62e77e8 100644 --- a/xen-warnings.diff +++ b/xen-warnings.diff @@ -92,7 +92,7 @@ Index: xen-3.3.0-testing/tools/xenstore/xenstored_core.c TDB_CONTEXT *tdb_context(struct connection *conn) { -@@ -1803,10 +1803,10 @@ int main(int argc, char *argv[]) +@@ -1786,10 +1786,10 @@ int main(int argc, char *argv[]) remove_local = false; break; case 'S': @@ -175,25 +175,3 @@ Index: xen-3.3.0-testing/tools/libxen/src/xen_common.c } -Index: xen-3.3.0-testing/tools/ioemu/hw/pass-through.c -=================================================================== ---- xen-3.3.0-testing.orig/tools/ioemu/hw/pass-through.c -+++ xen-3.3.0-testing/tools/ioemu/hw/pass-through.c -@@ -1389,7 +1389,7 @@ static int pt_register_regions(struct pt - return 0; - } - --static int pt_unregister_regions(struct pt_dev *assigned_device) -+static void pt_unregister_regions(struct pt_dev *assigned_device) - { - int i, type, ret; - uint32_t e_size; -@@ -1434,7 +1434,7 @@ static int pt_unregister_regions(struct - } - - } -- -+ - } - - uint8_t find_cap_offset(struct pci_dev *pci_dev, uint8_t cap) diff --git a/xen-xm-top-needs-root.diff b/xen-xm-top-needs-root.diff index 217630b..ab5d942 100644 --- a/xen-xm-top-needs-root.diff +++ b/xen-xm-top-needs-root.diff @@ -5,7 +5,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xm/main.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xm/main.py +++ xen-3.3.0-testing/tools/python/xen/xm/main.py -@@ -1871,6 +1871,10 @@ def xm_debug_keys(args): +@@ -1933,6 +1933,10 @@ def xm_debug_keys(args): def xm_top(args): arg_check(args, "top", 0) diff --git a/xen-xmexample-nbd.diff b/xen-xmexample-nbd.diff index 4199126..e844999 100644 --- a/xen-xmexample-nbd.diff +++ b/xen-xmexample-nbd.diff @@ -1,7 +1,7 @@ -Index: xen-3.3.0-testing/tools/examples/Makefile +Index: xen-4.0.0-testing/tools/examples/Makefile =================================================================== ---- xen-3.3.0-testing.orig/tools/examples/Makefile -+++ xen-3.3.0-testing/tools/examples/Makefile +--- xen-4.0.0-testing.orig/tools/examples/Makefile ++++ xen-4.0.0-testing/tools/examples/Makefile @@ -13,7 +13,7 @@ XEN_CONFIGS += xm-config.xml XEN_CONFIGS += xmexample1 XEN_CONFIGS += xmexample2 diff --git a/xen.changes b/xen.changes index 5bd96ad..c76167e 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,44 @@ +------------------------------------------------------------------- +Thu Aug 14 17:58:06 MDT 2008 - jfehlig@novell.com + +- Added patch to prevent starting same domU from multiple hosts. + Feature is disabled by default - see /etc/xen/xend-config.sxp. + fate#305062 + +------------------------------------------------------------------- +Mon Aug 11 16:42:18 MDT 2008 - jfehlig@novell.com + +- Added python-openssl to Requires list for xen-tools. This + package is required if SSL relocation is enabled by user. + +------------------------------------------------------------------- +Mon Aug 11 14:44:03 MDT 2008 - carnold@novell.com + +- Updated to xen-unstable changeset 18309. Pre 3.3.0-rc4. + +------------------------------------------------------------------- +Sat Aug 9 13:22:37 MDT 2008 - jfehlig@novell.com + +- Disabled xend-relocation-ssl-server for now. Certificates must + be created and feature needs testing. + +------------------------------------------------------------------- +Fri Aug 8 15:34:04 MDT 2008 - carnold@novell.com + +- Update to xen-unstable changeset 18269 post RC3. Reverse + version back to 3.3.0 from 4.0.0. + +------------------------------------------------------------------- +Wed Aug 6 10:30:51 MDT 2008 - carnold@novell.com + +- Updated to xen-unstable changeset 18242. Version changes from + 3.3.0 to 4.0.0 + +------------------------------------------------------------------- +Thu Aug 4 10:25:01 MDT 2008 - carnold@novell.com + +- Updated to xen-unstable changeset 18210. Post 3.3.0-rc2. + ------------------------------------------------------------------- Tue Jul 8 16:39:42 MDT 2008 - carnold@novell.com diff --git a/xen.spec b/xen.spec index 13ae5a0..3024b4e 100644 --- a/xen.spec +++ b/xen.spec @@ -1,10 +1,17 @@ # -# spec file for package xen (Version 3.3.0_17990_01) +# spec file for package xen (Version 3.3.0_18314_02) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. -# This file and all modifications and additions to the pristine -# package are under the same license as the package itself. # +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + # Please submit bugfixes or comments via http://bugs.opensuse.org/ # @@ -14,14 +21,14 @@ Name: xen %define xvers 3.3 %define xvermaj 3 -%define changeset 17990 +%define changeset 18314 %define xen_build_dir xen-3.3.0-testing %if %sles_version %define with_kmp 1 %else %define with_kmp 0 %endif -BuildRequires: LibVNCServer-devel SDL-devel automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel transfig +BuildRequires: LibVNCServer-devel SDL-devel automake bin86 curl-devel dev86 git graphviz latex2html libjpeg-devel libxml2-devel ncurses-devel openssl openssl-devel pciutils-devel python-devel transfig %if %suse_version >= 1030 BuildRequires: texlive texlive-latex %else @@ -33,7 +40,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit %if %{?with_kmp}0 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif -Version: 3.3.0_17990_01 +Version: 3.3.0_18314_02 Release: 1 License: GPL v2 only Group: System/Kernel @@ -66,11 +73,11 @@ Patch101: xend-config.diff Patch102: xen-destdir.diff Patch103: xen-rpmoptflags.diff Patch104: xen-warnings.diff -Patch105: xen-changeset.diff -Patch106: xen-paths.diff -Patch107: xen-xmexample.diff -Patch108: xen-xmexample-nbd.diff -Patch109: xen-fixme-doc.diff +Patch106: xen-changeset.diff +Patch107: xen-paths.diff +Patch108: xen-xmexample.diff +Patch109: xen-xmexample-nbd.diff +Patch110: xen-fixme-doc.diff Patch111: xen-domUloader.diff Patch112: xen-no-dummy-nfs-ip.diff Patch113: serial-split.patch @@ -93,8 +100,7 @@ Patch134: xenapi-console-protocol.patch Patch135: xen-disable-qemu-monitor.diff Patch136: supported_module.diff Patch137: qemu-security-etch1.diff -Patch138: vnc-i18n-keys.diff -Patch139: rpmlint.diff +Patch138: rpmlint.diff Patch140: cdrom-removable.patch Patch150: bridge-opensuse.patch Patch151: bridge-vlan.diff @@ -104,33 +110,24 @@ Patch154: bridge-record-creation.patch Patch155: xend-core-dump-loc.diff Patch156: blktap.patch Patch157: xen-api-auth.patch -Patch158: pv_32_16_color_trans.patch -Patch159: xen-qemu-iscsi-fix.patch -Patch160: keymap-vm.patch -Patch161: xen-vnc-resize.patch +Patch158: xen-qemu-iscsi-fix.patch # Patches for snapshot support +Patch169: ioemu-blktap-fix-open.patch Patch170: snapshot-ioemu-save.patch Patch171: snapshot-ioemu-restore.patch Patch172: snapshot-xend.patch Patch173: ioemu-qcow2-multiblock-aio.patch Patch174: ioemu-blktap-image-format.patch -Patch175: blktapctrl-default-to-ioemu.patch -Patch176: ioemu-blktap-barriers.patch -# Maybe later -Patch200: hvm-ide-flush-o_direct.patch +Patch175: build-tapdisk-ioemu.patch +Patch176: blktapctrl-default-to-ioemu.patch +Patch177: ioemu-blktap-barriers.patch +# Jim's domain lock patch +Patch190: xend-domain-lock.patch # Patches from Jan -Patch240: xenctx.patch -Patch241: const-callback-arg.patch -Patch242: const-set-trap-table-arg.patch -Patch243: pv-drv-mkbuildtree.patch -Patch244: x86-compat-vcpu-op.patch -Patch245: x86-show-page-walk-early.patch -Patch246: svm-lmsl.patch -Patch247: x86_emulate.patch -Patch248: x86-pgtable-no-biglock.patch -Patch249: x86-extra-trap-info.patch +Patch240: x86-show-page-walk-early.patch +Patch241: svm-lmsl.patch +Patch242: x86-extra-trap-info.patch Patch250: 32on64-extra-mem.patch -Patch251: x86-domain-shutdown-latency.patch # PV Driver Patches Patch350: pv-driver-build.patch Patch351: xen-ioemu-hvm-pv-support.diff @@ -139,8 +136,6 @@ Patch352: pvdrv_emulation_control.patch Patch400: ns_tools.patch Patch401: ns_xen_base.patch Patch402: ns_xen_extension.patch -# Temporary patch - remove as soon as kernel is updated -Patch900: tmp-revert-blktapctrl.patch Url: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ BuildRoot: %{_tmppath}/%{name}-%{version}-build %define pysite %(python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib()") @@ -257,7 +252,7 @@ License: GPL v2 or later Summary: Xen Virtualization: Control tools for domain 0 Group: System/Kernel Requires: xen-libs = %{version} -Requires: bridge-utils multipath-tools python python-curses python-pam python-xml pyxml +Requires: bridge-utils multipath-tools python python-curses python-openssl python-pam python-xml pyxml #Requires: ipcalc # subpackage existed in 10.3 Provides: xen-tools-ioemu = 3.2 @@ -476,11 +471,11 @@ Authors: %patch102 -p1 %patch103 -p1 %patch104 -p1 -%patch105 -p1 %patch106 -p1 %patch107 -p1 %patch108 -p1 -%patch109 -p1 +#%patch109 -p1 Not Needed +%patch110 -p1 %patch111 -p1 %patch112 -p1 %patch113 -p1 @@ -504,20 +499,17 @@ Authors: %patch136 -p1 %patch137 -p1 %patch138 -p1 -%patch139 -p1 %patch140 -p1 %patch150 -p1 %patch151 -p1 %patch152 -p1 -#%patch153 -p1 +#%patch153 -p1 hostonly %patch154 -p1 %patch155 -p1 %patch156 -p1 %patch157 -p1 %patch158 -p1 -%patch159 -p1 -%patch160 -p1 -%patch161 -p1 +%patch169 -p1 %patch170 -p1 %patch171 -p1 %patch172 -p1 @@ -525,19 +517,12 @@ Authors: %patch174 -p1 %patch175 -p1 %patch176 -p1 -#%patch200 -p1 -#%patch240 -p1 Upstream? -#%patch241 -p1 Upstream? -#%patch242 -p1 Upstream? -#%patch243 -p1 Upstream? -#%patch244 -p1 Upstream? -#%patch245 -p1 Upstream? -#%patch246 -p1 if upstream, has since been modified -#%patch247 -p1 ?? -#%patch248 -p1 Upstream? -%patch249 -p1 -#%patch250 -p1 Upstream? -#%patch251 -p1 Upstream? +%patch177 -p1 +%patch190 -p1 +%patch240 -p1 +%patch241 -p1 +%patch242 -p1 +%patch250 -p1 %patch350 -p1 %patch351 -p1 %patch352 -p1 @@ -547,7 +532,6 @@ Authors: #%patch401 -p1 #%patch402 -p1 #%endif -%patch900 -p1 %build XEN_EXTRAVERSION=%version-%release @@ -652,12 +636,12 @@ ln -s /etc/init.d/xendomains $RPM_BUILD_ROOT/usr/sbin/rcxendomains mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d install -m644 %SOURCE18 $RPM_BUILD_ROOT/etc/modprobe.d/xen_loop # example config -mkdir -p $RPM_BUILD_ROOT/etc/xen/{vm,examples} +mkdir -p $RPM_BUILD_ROOT/etc/xen/{vm,examples,scripts} mv $RPM_BUILD_ROOT/etc/xen/xmexample* $RPM_BUILD_ROOT/etc/xen/examples -rm $RPM_BUILD_ROOT/etc/xen/examples/*nbd +rm -f $RPM_BUILD_ROOT/etc/xen/examples/*nbd install -m644 %SOURCE9 %SOURCE10 $RPM_BUILD_ROOT/etc/xen/examples/ # scripts -rm $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd +rm -f $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd install -m755 %SOURCE11 %SOURCE12 %SOURCE13 %SOURCE16 %SOURCE17 $RPM_BUILD_ROOT/etc/xen/scripts/ # Xen API remote authentication files install -d $RPM_BUILD_ROOT/etc/pam.d @@ -680,15 +664,19 @@ ln -s /var/lib/xen/images $RPM_BUILD_ROOT/etc/xen/images # Bootloader install -m755 %SOURCE8 $RPM_BUILD_ROOT/usr/lib/xen/boot/ # udev support +mkdir -p $RPM_BUILD_ROOT/etc/udev/rules.d mv $RPM_BUILD_ROOT/etc/udev/rules.d/xen-backend.rules $RPM_BUILD_ROOT/etc/udev/rules.d/40-xen.rules #%find_lang xen-vm # po files are misnamed upstream # Clean up unpackaged files -rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc/qemu/ +rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc/xen/qemu/ rm -rf $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/ps -rm $RPM_BUILD_ROOT/%{_mandir}/man1/qemu.* -rm $RPM_BUILD_ROOT/usr/sbin/netfix -rm $RPM_BUILD_ROOT/usr/lib*/xen/bin/qemu-dm.debug +rm -rf $RPM_BUILD_ROOT/usr/share/xen/man/man1/qemu/qemu* +rm -f $RPM_BUILD_ROOT/usr/share/xen/qemu/openbios-sparc32 +rm -f $RPM_BUILD_ROOT/usr/share/xen/qemu/openbios-sparc64 +rm -f $RPM_BUILD_ROOT/usr/sbin/netfix rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info +rm -rf $RPM_BUILD_ROOT/html +rm -rf $RPM_BUILD_ROOT/usr/share/doc/xen/README.* %files %defattr(-,root,root) @@ -721,6 +709,8 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info /usr/bin/xenstore* /usr/bin/xentrace* /usr/bin/pygrub +/usr/bin/qemu-img-xen +/usr/bin/tapdisk-ioemu /usr/sbin/blktapctrl /usr/sbin/flask-loadpolicy /usr/sbin/img2qcow @@ -729,10 +719,10 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info /usr/sbin/rcxend /usr/sbin/rcxendomains /usr/sbin/tapdisk -/usr/sbin/tapdisk-ioemu /usr/sbin/xen* /usr/sbin/xm /usr/sbin/xsview +/usr/sbin/fs-backend %dir %{_libdir}/xen %dir %{_libdir}/xen/bin %ifarch x86_64 @@ -771,6 +761,7 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info /etc/xen/images /etc/xen/qemu-ifup /etc/xen/scripts +/etc/xen/README* %config /etc/xen/vm %config /etc/xen/*.sxp %config /etc/xen/*.xml @@ -791,9 +782,12 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info %dir %pysite/grub # formerly tools-ioemu %dir %{_datadir}/xen +%dir %{_datadir}/xen/man +%dir %{_datadir}/xen/man/man1 %dir %{_datadir}/xen/qemu %dir %{_datadir}/xen/qemu/keymaps -%{_datadir}/xen/qemu/keymaps/* +%{_datadir}/xen/qemu/* +%{_datadir}/xen/man/man1/* %{_libdir}/xen/bin/qemu-dm %ifarch x86_64 /usr/lib/xen/bin/qemu-dm @@ -860,6 +854,26 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info /sbin/ldconfig %changelog +* Thu Aug 14 2008 jfehlig@novell.com +- Added patch to prevent starting same domU from multiple hosts. + Feature is disabled by default - see /etc/xen/xend-config.sxp. + fate#305062 +* Mon Aug 11 2008 jfehlig@novell.com +- Added python-openssl to Requires list for xen-tools. This + package is required if SSL relocation is enabled by user. +* Mon Aug 11 2008 carnold@novell.com +- Updated to xen-unstable changeset 18309. Pre 3.3.0-rc4. +* Sat Aug 09 2008 jfehlig@novell.com +- Disabled xend-relocation-ssl-server for now. Certificates must + be created and feature needs testing. +* Fri Aug 08 2008 carnold@novell.com +- Update to xen-unstable changeset 18269 post RC3. Reverse + version back to 3.3.0 from 4.0.0. +* Wed Aug 06 2008 carnold@novell.com +- Updated to xen-unstable changeset 18242. Version changes from + 3.3.0 to 4.0.0 +* Mon Aug 04 2008 carnold@novell.com +- Updated to xen-unstable changeset 18210. Post 3.3.0-rc2. * Tue Jul 08 2008 carnold@novell.com - Updated to xen-unstable changeset 17990. * Tue Jul 08 2008 kwolf@suse.de diff --git a/xenapi-console-protocol.patch b/xenapi-console-protocol.patch index da23710..a9091ac 100644 --- a/xenapi-console-protocol.patch +++ b/xenapi-console-protocol.patch @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -3216,6 +3216,14 @@ class XendDomainInfo: +@@ -3242,6 +3242,14 @@ class XendDomainInfo: if not config.has_key('backend'): config['backend'] = "00000000-0000-0000-0000-000000000000" diff --git a/xenctx.patch b/xenctx.patch deleted file mode 100644 index 501020c..0000000 --- a/xenctx.patch +++ /dev/null @@ -1,163 +0,0 @@ -Index: 2007-12-10/tools/xentrace/xenctx.c -=================================================================== ---- 2007-12-10.orig/tools/xentrace/xenctx.c 2007-11-26 16:57:02.000000000 +0100 -+++ 2007-12-10/tools/xentrace/xenctx.c 2007-12-10 09:19:27.000000000 +0100 -@@ -29,6 +29,7 @@ int xc_handle = 0; - int domid = 0; - int frame_ptrs = 0; - int stack_trace = 0; -+int disp_all = 0; - - #if defined (__i386__) - #if defined (__OpenBSD__) -@@ -243,12 +244,23 @@ void print_flags(uint64_t flags) - { - int i; - -- printf("flags: %08" PRIx64, flags); -+ printf("\nflags: %08" PRIx64, flags); - for (i = 21; i >= 0; i--) { - char *s = flag_values[i][(flags >> i) & 1]; - if (s != NULL) - printf(" %s", s); - } -+ printf("\n"); -+} -+ -+void print_special(unsigned long *regs, const char *name, unsigned int mask) -+{ -+ unsigned int i; -+ -+ printf("\n"); -+ for (i = 0; mask; mask >>= 1, ++i) -+ if (mask & 1) -+ printf("%s%u: " FMT_SIZE_T "\n", name, i, (size_t)regs[i]); - } - #endif - -@@ -257,12 +269,10 @@ void print_ctx(vcpu_guest_context_t *ctx - { - struct cpu_user_regs *regs = &ctx1->user_regs; - -- printf("eip: %08x ", regs->eip); -+ printf("cs:eip: %04x:%08x ", regs->cs, regs->eip); - print_symbol(regs->eip); - print_flags(regs->eflags); -- printf("\n"); -- -- printf("esp: %08x\n", regs->esp); -+ printf("ss:esp: %04x:%08x\n", regs->ss, regs->esp); - - printf("eax: %08x\t", regs->eax); - printf("ebx: %08x\t", regs->ebx); -@@ -273,47 +283,59 @@ void print_ctx(vcpu_guest_context_t *ctx - printf("edi: %08x\t", regs->edi); - printf("ebp: %08x\n", regs->ebp); - -- printf(" cs: %08x\t", regs->cs); -- printf(" ds: %08x\t", regs->ds); -- printf(" fs: %08x\t", regs->fs); -- printf(" gs: %08x\n", regs->gs); -+ printf(" ds: %04x\t", regs->ds); -+ printf(" es: %04x\t", regs->es); -+ printf(" fs: %04x\t", regs->fs); -+ printf(" gs: %04x\n", regs->gs); - -+ if (disp_all) { -+ print_special(ctx1->ctrlreg, "cr", 0x1d); -+ print_special(ctx1->debugreg, "dr", 0xcf); -+ } - } - #elif defined(__x86_64__) - void print_ctx(vcpu_guest_context_t *ctx1) - { - struct cpu_user_regs *regs = &ctx1->user_regs; - -- printf("rip: %08lx ", regs->rip); -+ printf("rip: %016lx ", regs->rip); - print_symbol(regs->rip); - print_flags(regs->rflags); -- printf("\n"); -- printf("rsp: %08lx\n", regs->rsp); -- -- printf("rax: %08lx\t", regs->rax); -- printf("rbx: %08lx\t", regs->rbx); -- printf("rcx: %08lx\t", regs->rcx); -- printf("rdx: %08lx\n", regs->rdx); -- -- printf("rsi: %08lx\t", regs->rsi); -- printf("rdi: %08lx\t", regs->rdi); -- printf("rbp: %08lx\n", regs->rbp); -- -- printf(" r8: %08lx\t", regs->r8); -- printf(" r9: %08lx\t", regs->r9); -- printf("r10: %08lx\t", regs->r10); -- printf("r11: %08lx\n", regs->r11); -- -- printf("r12: %08lx\t", regs->r12); -- printf("r13: %08lx\t", regs->r13); -- printf("r14: %08lx\t", regs->r14); -- printf("r15: %08lx\n", regs->r15); -- -- printf(" cs: %04x\t", regs->cs); -- printf(" ds: %04x\t", regs->ds); -- printf(" fs: %04x\t", regs->fs); -- printf(" gs: %04x\n", regs->gs); -+ printf("rsp: %016lx\n", regs->rsp); - -+ printf("rax: %016lx\t", regs->rax); -+ printf("rcx: %016lx\t", regs->rcx); -+ printf("rdx: %016lx\n", regs->rdx); -+ -+ printf("rbx: %016lx\t", regs->rbx); -+ printf("rsi: %016lx\t", regs->rsi); -+ printf("rdi: %016lx\n", regs->rdi); -+ -+ printf("rbp: %016lx\t", regs->rbp); -+ printf(" r8: %016lx\t", regs->r8); -+ printf(" r9: %016lx\n", regs->r9); -+ -+ printf("r10: %016lx\t", regs->r10); -+ printf("r11: %016lx\t", regs->r11); -+ printf("r12: %016lx\n", regs->r12); -+ -+ printf("r13: %016lx\t", regs->r13); -+ printf("r14: %016lx\t", regs->r14); -+ printf("r15: %016lx\n", regs->r15); -+ -+ printf(" cs: %04x\t", regs->cs); -+ printf(" ss: %04x\t", regs->ss); -+ printf(" ds: %04x\t", regs->ds); -+ printf(" es: %04x\n", regs->es); -+ -+ printf(" fs: %04x @ %016lx\n", regs->fs, ctx1->fs_base); -+ printf(" gs: %04x @ %016lx/%016lx\n", regs->gs, -+ ctx1->gs_base_kernel, ctx1->gs_base_user); -+ -+ if (disp_all) { -+ print_special(ctx1->ctrlreg, "cr", 0x1d); -+ print_special(ctx1->debugreg, "dr", 0xcf); -+ } - } - #elif defined(__ia64__) - -@@ -742,6 +764,8 @@ void usage(void) - #ifdef __ia64__ - printf(" -r LIST, --regs=LIST display more registers.\n"); - printf(" -a --all same as --regs=tlb,cr,ar,br,bk\n"); -+#else -+ printf(" -a --all display more registers\n"); - #endif - } - -@@ -811,6 +835,10 @@ int main(int argc, char **argv) - disp_bank_regs = 1; - disp_tlb = 1; - break; -+#else -+ case 'a': -+ disp_all = 1; -+ break; - #endif - case 'h': - usage(); diff --git a/xend-config.diff b/xend-config.diff index f74f91c..da3a3ab 100644 --- a/xend-config.diff +++ b/xend-config.diff @@ -31,7 +31,7 @@ Index: xen-3.3.0-testing/tools/examples/xend-config.sxp =================================================================== --- xen-3.3.0-testing.orig/tools/examples/xend-config.sxp +++ xen-3.3.0-testing/tools/examples/xend-config.sxp -@@ -54,12 +54,14 @@ +@@ -54,11 +54,12 @@ #(xend-http-server no) @@ -43,13 +43,10 @@ Index: xen-3.3.0-testing/tools/examples/xend-config.sxp +# encryption and authentication. #(xend-relocation-server no) -(xend-relocation-server yes) --#(xend-relocation-ssl-server no) -+# Enable xend-relocation-ssl-server for encrypted relocations. -+(xend-relocation-ssl-server yes) + #(xend-relocation-ssl-server no) #(xend-unix-path /var/lib/xend/xend-socket) - -@@ -181,7 +183,7 @@ +@@ -181,7 +182,7 @@ # dom0-min-mem is the lowest permissible memory level (in MB) for dom0. # This is a minimum both for auto-ballooning (as enabled by # enable-dom0-ballooning below) and for xm mem-set when applied to dom0. diff --git a/xend-core-dump-loc.diff b/xend-core-dump-loc.diff index dfde307..430532c 100644 --- a/xend-core-dump-loc.diff +++ b/xend-core-dump-loc.diff @@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1852,7 +1852,7 @@ class XendDomainInfo: +@@ -1864,7 +1864,7 @@ class XendDomainInfo: try: if not corefile: this_time = time.strftime("%Y-%m%d-%H%M.%S", time.localtime()) diff --git a/xend-domain-lock.patch b/xend-domain-lock.patch new file mode 100644 index 0000000..dd0d3d6 --- /dev/null +++ b/xend-domain-lock.patch @@ -0,0 +1,328 @@ +Index: xen-3.3.0-testing/tools/examples/domain-lock +=================================================================== +--- /dev/null ++++ xen-3.3.0-testing/tools/examples/domain-lock +@@ -0,0 +1,86 @@ ++#!/bin/bash ++ ++set +x ++ ++usage() { ++ echo "usage: domain-lock [-l|-u|-s] -p [-n ] [-i ] [-h ]" ++ echo "" ++ echo "-l lock" ++ echo "-u unlock" ++ echo "-s status (default)" ++ echo "-p Required argument indicating path for lock file" ++ echo "-n Virtual Machine name" ++ echo "-i Virtual Machine Id or UUID" ++ echo "-h Virtual Machine Server (Host) name" ++ exit 1 ++} ++ ++create_lock() { ++ local path=$1 ++ local name=$2 ++ local uuid=$3 ++ local host=$4 ++ ++ path=$path/lock ++ cat > $path < on domain startup ++# and removed when domain is stopped. By default, a lock file ++# is not created. Set to yes to enable lock file creation. ++# ++#(xend-domain-lock no) ++ ++# Path where domain lock is stored if xend-domain-lock is enabled. ++# Note: This path must be accessible to all VM Servers participating ++# in domain locking, e.g. by specifying a shared mount point. ++# Lock is placed in /. ++# Default is /var/lib/xend/domains/ ++# ++#(xend-domain-lock-path /var/lib/xend/domains) ++ ++# External locking utility for acquiring/releasing domain lock. ++# By default /etc/xen/scripts/domain-lock will be used if ++# xend-domain-lock is set to yes. Set to path of custom ++# locking utility to override the default. Locking utility ++# should accept ++# <-l | -u | -s> -p [-n ] [-i ] ++# [-h ] ++# command line options. Utility should return zero on success, ++# non-zero on error. ++# -l lock Acquire (create) lock file ++# -u unlock Remove lock file ++# -s status Default action. If lock file exists, print contents on ++# stdout and return 0) ++# -p path Required. Path where lock file should be written. ++# -n vm-name Name of domain ++# -i vm-id Id or UUID of domain ++# -h vm-host Name of host machine (dom0) ++# ++# The /etc/xen/scripts/domain-lock default utility will create ++# //lock and write , , ++# and (if supplied) to the lock file in that order. ++# ++#(xend-domain-lock-utility domain-lock) +Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py +=================================================================== +--- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-3.3.0-testing/tools/python/xen/xend/XendDomainInfo.py +@@ -30,11 +30,13 @@ import threading + import re + import copy + import os ++import stat ++import shutil + import traceback + from types import StringTypes + + import xen.lowlevel.xc +-from xen.util import asserts ++from xen.util import asserts, mkdir + from xen.util.blkif import parse_uname + import xen.util.xsm.xsm as security + from xen.util import xsconstants +@@ -421,6 +423,7 @@ class XendDomainInfo: + + if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, XEN_API_VM_POWER_STATE_SUSPENDED, XEN_API_VM_POWER_STATE_CRASHED): + try: ++ self.acquire_running_lock(); + XendTask.log_progress(0, 30, self._constructDomain) + XendTask.log_progress(31, 60, self._initDomain) + +@@ -453,6 +456,7 @@ class XendDomainInfo: + state = self._stateGet() + if state in (DOM_STATE_SUSPENDED, DOM_STATE_HALTED): + try: ++ self.acquire_running_lock(); + self._constructDomain() + self._storeVmDetails() + self._createDevices() +@@ -2317,6 +2321,11 @@ class XendDomainInfo: + + self._stateSet(DOM_STATE_HALTED) + self.domid = None # Do not push into _stateSet()! ++ ++ try: ++ self.release_running_lock() ++ except: ++ log.exception("Failed to release domain lock.") + finally: + self.refresh_shutdown_lock.release() + +@@ -3555,6 +3564,74 @@ class XendDomainInfo: + def has_device(self, dev_class, dev_uuid): + return (dev_uuid in self.info['%s_refs' % dev_class.lower()]) + ++ # Check if domain has a lock file present ++ def is_dom_locked(self, path): ++ status = os.system('%s -s -p %s' % \ ++ (xoptions.get_xend_domain_lock_utility(), \ ++ path)) ++ ++ return status == 0 ++ ++ # Return name of host contained in lock file. Host should be last ++ # entry in the lock file. ++ def get_lock_host(self, path): ++ fin = os.popen(xoptions.get_xend_domain_lock_utility() + \ ++ ' -s -p ' + path, 'r') ++ hostname = "unknown" ++ ++ try: ++ line = fin.readline() ++ hostname = line.split()[-1] ++ finally: ++ fin.close() ++ return hostname ++ ++ # Acquire a lock for the domain. No-op if domain locking is turned off. ++ def acquire_running_lock(self): ++ if not xoptions.get_xend_domain_lock(): ++ return ++ ++ path = xoptions.get_xend_domain_lock_path() ++ path = os.path.join(path, self.get_uuid()) ++ ++ if self.is_dom_locked(path): ++ raise XendError("The VM is locked and appears to be running on host %s." % self.get_lock_host(path)) ++ ++ try: ++ if not os.path.exists(path): ++ mkdir.parents(path, stat.S_IRWXU) ++ except: ++ log.exception("%s could not be created." % path) ++ raise XendError("%s could not be created." % path) ++ ++ status = os.system('%s -l -p %s -n %s -i %s -h %s' % \ ++ (xoptions.get_xend_domain_lock_utility(), \ ++ path, \ ++ self.info['name_label'], \ ++ self.info['uuid'], \ ++ XendNode.instance().get_name())) ++ if status != 0: ++ raise XendError('Acquire running lock failed: %s' % status) ++ ++ # Release lock for domain. Should be called at end of domain cleanup ++ def release_running_lock(self): ++ if not xoptions.get_xend_domain_lock(): ++ return ++ ++ path = xoptions.get_xend_domain_lock_path() ++ path = os.path.join(path, self.get_uuid()) ++ status = os.system('%s -u -p %s' % \ ++ (xoptions.get_xend_domain_lock_utility(), \ ++ path)) ++ if status != 0: ++ log.exception("Release running lock failed: %s" % status) ++ try: ++ if len(os.listdir(path)) == 0: ++ shutil.rmtree(path) ++ except: ++ log.exception("Failed to remove unmanaged directory %s." % path) ++ ++ + def __str__(self): + return '' % \ + (str(self.domid), self.info['name_label'], +Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomain.py +=================================================================== +--- xen-3.3.0-testing.orig/tools/python/xen/xend/XendDomain.py ++++ xen-3.3.0-testing/tools/python/xen/xend/XendDomain.py +@@ -1294,6 +1294,7 @@ class XendDomain: + POWER_STATE_NAMES[DOM_STATE_RUNNING], + POWER_STATE_NAMES[dominfo._stateGet()]) + ++ dominfo.release_running_lock(); + """ The following call may raise a XendError exception """ + dominfo.testMigrateDevices(True, dst) + +Index: xen-3.3.0-testing/tools/python/xen/xend/XendOptions.py +=================================================================== +--- xen-3.3.0-testing.orig/tools/python/xen/xend/XendOptions.py ++++ xen-3.3.0-testing/tools/python/xen/xend/XendOptions.py +@@ -135,6 +135,17 @@ class XendOptions: + """Default rotation count of qemu-dm log file.""" + qemu_dm_logrotate_count = 10 + ++ """Default for the flag indicating whether xend should create ++ a lock file for domains when they are started.""" ++ xend_domain_lock = 'no' ++ ++ """Default domain lock storage path.""" ++ xend_domain_lock_path_default = '/var/lib/xend/domains' ++ ++ """Default script to acquire/release domain lock""" ++ xend_domain_lock_utility = osdep.scripts_dir + "/domain-lock" ++ ++ + def __init__(self): + self.configure() + +@@ -358,6 +369,19 @@ class XendOptions: + return self.get_config_int("qemu-dm-logrotate-count", + self.qemu_dm_logrotate_count) + ++ def get_xend_domain_lock(self): ++ """Get the flag indicating whether xend should create a lock file ++ for domains when they are started.""" ++ return self.get_config_bool("xend-domain-lock", self.xend_domain_lock) ++ ++ def get_xend_domain_lock_path(self): ++ """ Get the path for domain lock storage ++ """ ++ return self.get_config_string("xend-domain-lock-path", self.xend_domain_lock_path_default) ++ ++ def get_xend_domain_lock_utility(self): ++ return self.get_config_string('xend-domain-lock-utility', self.xend_domain_lock_utility) ++ + + class XendOptionsFile(XendOptions): + +Index: xen-3.3.0-testing/tools/examples/Makefile +=================================================================== +--- xen-3.3.0-testing.orig/tools/examples/Makefile ++++ xen-3.3.0-testing/tools/examples/Makefile +@@ -36,6 +36,7 @@ XEN_SCRIPTS += vtpm vtpm-delete + XEN_SCRIPTS += xen-hotplug-cleanup + XEN_SCRIPTS += external-device-migrate + XEN_SCRIPTS += vscsi ++XEN_SCRIPTS += domain-lock + XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh + XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh + XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh diff --git a/xm-test-cleanup.diff b/xm-test-cleanup.diff index 8b4e003..1a14826 100644 --- a/xm-test-cleanup.diff +++ b/xm-test-cleanup.diff @@ -1,7 +1,7 @@ -Index: xen-unstable/tools/xm-test/tests/save/01_save_basic_pos.py +Index: xen-3.3.0-testing/tools/xm-test/tests/save/01_save_basic_pos.py =================================================================== ---- xen-unstable.orig/tools/xm-test/tests/save/01_save_basic_pos.py -+++ xen-unstable/tools/xm-test/tests/save/01_save_basic_pos.py +--- xen-3.3.0-testing.orig/tools/xm-test/tests/save/01_save_basic_pos.py ++++ xen-3.3.0-testing/tools/xm-test/tests/save/01_save_basic_pos.py @@ -35,3 +35,9 @@ if s != 0: # Make sure it's gone if isDomainRunning(domain.getName()):