This commit is contained in:
parent
9683113742
commit
9794955703
@ -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
|
||||
@@ -2251,7 +2251,7 @@ class XendDomainInfo:
|
||||
@@ -2255,7 +2255,7 @@ class XendDomainInfo:
|
||||
vtd_mem = ((vtd_mem + 1023) / 1024) * 1024
|
||||
|
||||
# Make sure there's enough RAM available for the domain
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: 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 @@
|
||||
+++ xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py 2008-08-29 06:25:55.000000000 -0600
|
||||
@@ -0,0 +1,243 @@
|
||||
+#!/usr/bin/env python
|
||||
+# -*- mode: python; -*-
|
||||
+#============================================================================
|
||||
@ -42,6 +42,8 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+from xen.xend import XendLogging
|
||||
+from xen.xend.XendLogging import log
|
||||
+
|
||||
+DEVICE_TYPES = ['vbd', 'tap']
|
||||
+
|
||||
+class HalDaemon:
|
||||
+ """The Hald block device watcher for XEN
|
||||
+ """
|
||||
@ -52,6 +54,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+ """Default level of information to be logged."""
|
||||
+ loglevel_default = 'INFO'
|
||||
+
|
||||
+
|
||||
+ def __init__(self):
|
||||
+
|
||||
+ XendLogging.init(self.logfile_default, self.loglevel_default)
|
||||
@ -59,7 +62,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+
|
||||
+ self.udi_dict = {}
|
||||
+ self.debug = 0
|
||||
+ self.dbpath = "/local/domain/0/backend/vbd"
|
||||
+ self.dbpath = "/local/domain/0/backend"
|
||||
+ self.bus = dbus.SystemBus()
|
||||
+ self.hal_manager_obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
|
||||
+ self.hal_manager = dbus.Interface( self.hal_manager_obj, 'org.freedesktop.Hal.Manager')
|
||||
@ -100,7 +103,7 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+ device_names = self.hal_manager.GetAllDevices()
|
||||
+ i = 0;
|
||||
+ for name in device_names:
|
||||
+ #log.debug("device name, device=%s",name)
|
||||
+ #log.debug("device name, device=%s",name)
|
||||
+ dev_obj = self.bus.get_object ('org.freedesktop.Hal', name)
|
||||
+ dev = dbus.Interface (dev_obj, 'org.freedesktop.Hal.Device')
|
||||
+ dev_properties = dev_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
|
||||
@ -182,43 +185,45 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/HalDaemon.py
|
||||
+ # Set or clear xenstore media-present depending on the action argument
|
||||
+ # for every vbd that has this block device
|
||||
+ def change_xenstore(self,action, device, major, minor):
|
||||
+ domains = xstransact.List(self.dbpath)
|
||||
+ log.debug('domains: %s', domains)
|
||||
+ for domain in domains: # for each domain
|
||||
+ devices = xstransact.List( self.dbpath + '/' + domain)
|
||||
+ log.debug('devices: %s',devices)
|
||||
+ for device in devices: # for each vbd device
|
||||
+ str = device.split('/')
|
||||
+ vbd_type = None;
|
||||
+ vbd_physical_device = None
|
||||
+ vbd_media = None
|
||||
+ vbd_device_path = self.dbpath + '/' + domain + '/' + device
|
||||
+ listing = xstransact.List(vbd_device_path)
|
||||
+ for entry in listing: # for each entry
|
||||
+ item = self.dbpath + '/' + entry
|
||||
+ value = xstransact.Read( vbd_device_path + '/' + entry)
|
||||
+ log.debug('%s=%s',item,value)
|
||||
+ if item.find('media-present') != -1:
|
||||
+ vbd_media = item;
|
||||
+ vbd_media_path = item
|
||||
+ if item.find('physical-device') != -1:
|
||||
+ vbd_physical_device = value;
|
||||
+ if item.find('type') != -1:
|
||||
+ vbd_type = value;
|
||||
+ if vbd_type is not None and vbd_physical_device is not None and vbd_media is not None :
|
||||
+ inode = vbd_physical_device.split(':')
|
||||
+ imajor = parse_hex(inode[0])
|
||||
+ iminor = parse_hex(inode[1])
|
||||
+ log.debug("action:%s major:%s- minor:%s- imajor:%s- iminor:%s- inode: %s",
|
||||
+ action,major,minor, imajor, iminor, inode)
|
||||
+ if int(imajor) == int(major) and int(iminor) == int(minor):
|
||||
+ if action == "add":
|
||||
+ xs_dict = {'media': "1"}
|
||||
+ xstransact.Write(vbd_device_path, 'media-present', "1" )
|
||||
+ log.debug("wrote xenstore media-present 1 path:%s",vbd_media_path)
|
||||
+ else:
|
||||
+ xstransact.Write(vbd_device_path, 'media-present', "0" )
|
||||
+ log.debug("wrote xenstore media 0 path:%s",vbd_media_path)
|
||||
+ for type in DEVICE_TYPES:
|
||||
+ path = self.dbpath + '/' + type
|
||||
+ domains = xstransact.List(path)
|
||||
+ log.debug('domains: %s', domains)
|
||||
+ for domain in domains: # for each domain
|
||||
+ devices = xstransact.List( path + '/' + domain)
|
||||
+ log.debug('devices: %s',devices)
|
||||
+ for device in devices: # for each vbd device
|
||||
+ str = device.split('/')
|
||||
+ vbd_type = None;
|
||||
+ vbd_physical_device = None
|
||||
+ vbd_media = None
|
||||
+ vbd_device_path = path + '/' + domain + '/' + device
|
||||
+ listing = xstransact.List(vbd_device_path)
|
||||
+ for entry in listing: # for each entry
|
||||
+ item = path + '/' + entry
|
||||
+ value = xstransact.Read( vbd_device_path + '/' + entry)
|
||||
+ log.debug('%s=%s',item,value)
|
||||
+ if item.find('media-present') != -1:
|
||||
+ vbd_media = item;
|
||||
+ vbd_media_path = item
|
||||
+ if item.find('physical-device') != -1:
|
||||
+ vbd_physical_device = value;
|
||||
+ if item.find('type') != -1:
|
||||
+ vbd_type = value;
|
||||
+ if vbd_type is not None and vbd_physical_device is not None and vbd_media is not None :
|
||||
+ inode = vbd_physical_device.split(':')
|
||||
+ imajor = parse_hex(inode[0])
|
||||
+ iminor = parse_hex(inode[1])
|
||||
+ log.debug("action:%s major:%s- minor:%s- imajor:%s- iminor:%s- inode: %s",
|
||||
+ action,major,minor, imajor, iminor, inode)
|
||||
+ if int(imajor) == int(major) and int(iminor) == int(minor):
|
||||
+ if action == "add":
|
||||
+ xs_dict = {'media': "1"}
|
||||
+ xstransact.Write(vbd_device_path, 'media-present', "1" )
|
||||
+ log.debug("wrote xenstore media-present 1 path:%s",vbd_media_path)
|
||||
+ else:
|
||||
+ xstransact.Write(vbd_device_path, 'media-present', "0" )
|
||||
+ log.debug("wrote xenstore media 0 path:%s",vbd_media_path)
|
||||
+
|
||||
+def mylog( fmt, *args):
|
||||
+ f = open('/tmp/haldaemon.log', 'a')
|
||||
@ -244,7 +249,7 @@ 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 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
|
||||
+++ xen-3.3.0-testing/tools/python/xen/xend/server/Hald.py 2008-08-29 06:11:48.000000000 -0600
|
||||
@@ -0,0 +1,125 @@
|
||||
+#============================================================================
|
||||
+# This library is free software; you can redistribute it and/or
|
||||
@ -373,8 +378,8 @@ 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 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
|
||||
--- xen-3.3.0-testing.orig/tools/python/xen/xend/server/SrvServer.py 2008-08-22 08:34:00.000000000 -0600
|
||||
+++ xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py 2008-08-29 06:11:48.000000000 -0600
|
||||
@@ -56,6 +56,7 @@
|
||||
|
||||
from SrvRoot import SrvRoot
|
||||
@ -394,8 +399,8 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/server/SrvServer.py
|
||||
root = SrvDir()
|
||||
Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c
|
||||
===================================================================
|
||||
--- 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
|
||||
--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c 2008-08-22 08:35:31.000000000 -0600
|
||||
+++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c 2008-08-29 06:11:48.000000000 -0600
|
||||
@@ -297,6 +297,16 @@
|
||||
bdrv_set_type_hint(bs, BDRV_TYPE_CDROM);
|
||||
if (pasprintf(&buf, "%s/params", bpath) != -1)
|
||||
|
@ -33,9 +33,9 @@ Index: xen-3.3.0-testing/tools/Makefile
|
||||
===================================================================
|
||||
--- xen-3.3.0-testing.orig/tools/Makefile
|
||||
+++ xen-3.3.0-testing/tools/Makefile
|
||||
@@ -23,7 +23,7 @@ SUBDIRS-y += blktap
|
||||
SUBDIRS-y += libfsimage
|
||||
@@ -24,7 +24,7 @@ SUBDIRS-y += libfsimage
|
||||
SUBDIRS-$(LIBXENAPI_BINDINGS) += libxen
|
||||
SUBDIRS-y += fs-back
|
||||
|
||||
-ifeq (ioemu,$(CONFIG_QEMU))
|
||||
+ifeq ($(XEN_COMPILE_ARCH)$(CONFIG_IOEMU),$(XEN_TARGET_ARCH)y)
|
||||
|
@ -11,31 +11,3 @@ Index: xen-3.3.0-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.3.0-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
|
||||
|
||||
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) && CONFIG_SLE_VERSION < 10
|
||||
#define setup_xen_features xen_setup_features
|
||||
#endif
|
||||
|
||||
Index: xen-3.3.0-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
|
||||
|
||||
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
|
||||
+#if defined(CONFIG_SUSE_KERNEL) \
|
||||
+ ? LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16) \
|
||||
+ : LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
|
||||
/* Simplified asprintf. */
|
||||
char *kasprintf(gfp_t gfp, const char *fmt, ...)
|
||||
{
|
||||
|
113
qemu-img-snapshot.patch
Normal file
113
qemu-img-snapshot.patch
Normal file
@ -0,0 +1,113 @@
|
||||
Index: xen-3.3.0-testing/tools/ioemu-remote/qemu-img.c
|
||||
===================================================================
|
||||
--- xen-3.3.0-testing.orig/tools/ioemu-remote/qemu-img.c
|
||||
+++ xen-3.3.0-testing/tools/ioemu-remote/qemu-img.c
|
||||
@@ -57,6 +57,7 @@ static void help(void)
|
||||
" commit [-f fmt] filename\n"
|
||||
" convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] filename [filename2 [...]] output_filename\n"
|
||||
" info [-f fmt] filename\n"
|
||||
+ " snapshot [-l|-a snapshot|-d snapshot] filename\n"
|
||||
"\n"
|
||||
"Command parameters:\n"
|
||||
" 'filename' is a disk image filename\n"
|
||||
@@ -694,6 +695,91 @@ static int img_info(int argc, char **arg
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#define SNAPSHOT_LIST 1
|
||||
+#define SNAPSHOT_APPLY 2
|
||||
+#define SNAPSHOT_DELETE 3
|
||||
+
|
||||
+static void img_snapshot(int argc, char **argv)
|
||||
+{
|
||||
+ BlockDriverState *bs;
|
||||
+ char *filename, *snapshot_name = NULL;
|
||||
+ char c;
|
||||
+ int ret;
|
||||
+ int action = 0;
|
||||
+
|
||||
+ /* Parse commandline parameters */
|
||||
+ for(;;) {
|
||||
+ c = getopt(argc, argv, "la:d:h");
|
||||
+ if (c == -1)
|
||||
+ break;
|
||||
+ switch(c) {
|
||||
+ case 'h':
|
||||
+ help();
|
||||
+ return;
|
||||
+ case 'l':
|
||||
+ if (action) {
|
||||
+ help();
|
||||
+ return;
|
||||
+ }
|
||||
+ action = SNAPSHOT_LIST;
|
||||
+ break;
|
||||
+ case 'a':
|
||||
+ if (action) {
|
||||
+ help();
|
||||
+ return;
|
||||
+ }
|
||||
+ action = SNAPSHOT_APPLY;
|
||||
+ snapshot_name = optarg;
|
||||
+ break;
|
||||
+ case 'd':
|
||||
+ if (action) {
|
||||
+ help();
|
||||
+ return;
|
||||
+ }
|
||||
+ action = SNAPSHOT_DELETE;
|
||||
+ snapshot_name = optarg;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (optind >= argc)
|
||||
+ help();
|
||||
+ filename = argv[optind++];
|
||||
+
|
||||
+ /* Open the image */
|
||||
+ bs = bdrv_new("");
|
||||
+ if (!bs)
|
||||
+ error("Not enough memory");
|
||||
+
|
||||
+ if (bdrv_open2(bs, filename, 0, NULL) < 0) {
|
||||
+ error("Could not open '%s'", filename);
|
||||
+ }
|
||||
+
|
||||
+ /* Perform the requested action */
|
||||
+ switch(action) {
|
||||
+ case SNAPSHOT_LIST:
|
||||
+ dump_snapshots(bs);
|
||||
+ break;
|
||||
+
|
||||
+ case SNAPSHOT_APPLY:
|
||||
+ ret = bdrv_snapshot_goto(bs, snapshot_name);
|
||||
+ if (ret)
|
||||
+ error("Could not apply snapshot '%s': %d (%s)",
|
||||
+ snapshot_name, strerror(ret), ret);
|
||||
+ break;
|
||||
+
|
||||
+ case SNAPSHOT_DELETE:
|
||||
+ ret = bdrv_snapshot_delete(bs, snapshot_name);
|
||||
+ if (ret)
|
||||
+ error("Could not delete snapshot '%s': %d (%s)",
|
||||
+ snapshot_name, strerror(ret), ret);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* Cleanup */
|
||||
+ bdrv_delete(bs);
|
||||
+}
|
||||
+
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *cmd;
|
||||
@@ -711,6 +797,8 @@ int main(int argc, char **argv)
|
||||
img_convert(argc, argv);
|
||||
} else if (!strcmp(cmd, "info")) {
|
||||
img_info(argc, argv);
|
||||
+ } else if (!strcmp(cmd, "snapshot")) {
|
||||
+ img_snapshot(argc, argv);
|
||||
} else {
|
||||
help();
|
||||
}
|
@ -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
|
||||
@@ -71,7 +71,7 @@ install-initd:
|
||||
@@ -70,7 +70,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
|
||||
|
24
snapshot-ioemu-delete.patch
Normal file
24
snapshot-ioemu-delete.patch
Normal file
@ -0,0 +1,24 @@
|
||||
Index: xen-3.3.0-testing/tools/ioemu-remote/xenstore.c
|
||||
===================================================================
|
||||
--- xen-3.3.0-testing.orig/tools/ioemu-remote/xenstore.c
|
||||
+++ xen-3.3.0-testing/tools/ioemu-remote/xenstore.c
|
||||
@@ -652,6 +652,19 @@ static void xenstore_process_dm_command_
|
||||
}
|
||||
|
||||
snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
|
||||
+ } else if (!strncmp(command, "snapshot-delete", len)) {
|
||||
+
|
||||
+ if (pasprintf(&path,
|
||||
+ "/local/domain/0/device-model/%u/parameter", domid) == -1) {
|
||||
+ fprintf(logfile, "out of memory reading dm command parameter\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
+ par = xs_read(xsh, XBT_NULL, path, &len);
|
||||
+ if (!par)
|
||||
+ goto out;
|
||||
+ // TODO Error handling
|
||||
+ do_delvm(par);
|
||||
+ xenstore_record_dm_state("snapshot-deleted");
|
||||
} else if (!strncmp(command, "continue", len)) {
|
||||
fprintf(logfile, "dm-command: continue after state save\n");
|
||||
xen_pause_requested = 0;
|
@ -295,7 +295,15 @@ 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
|
||||
@@ -1396,6 +1396,148 @@ class XendDomain:
|
||||
@@ -52,6 +52,7 @@ from xen.xend.xenstore.xstransact import
|
||||
from xen.xend.xenstore.xswatch import xswatch
|
||||
from xen.util import mkdir
|
||||
from xen.xend import uuid
|
||||
+from xen.xend import sxp
|
||||
|
||||
xc = xen.lowlevel.xc.xc()
|
||||
xoptions = XendOptions.instance()
|
||||
@@ -1396,6 +1397,164 @@ class XendDomain:
|
||||
raise XendError("can't write guest state file %s: %s" %
|
||||
(dst, ex[1]))
|
||||
|
||||
@ -324,6 +332,10 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomain.py
|
||||
+ POWER_STATE_NAMES[DOM_STATE_RUNNING],
|
||||
+ POWER_STATE_NAMES[dominfo._stateGet()])
|
||||
+
|
||||
+ if not os.path.exists(self._managed_config_path(dominfo.get_uuid())):
|
||||
+ raise XendError("Domain is not managed by Xend lifecycle " +
|
||||
+ "support.")
|
||||
+
|
||||
+ snap_path = os.path.join(xoptions.get_xend_domains_path(),
|
||||
+ dominfo.get_uuid(), "snapshots")
|
||||
+ mkdir.parents(snap_path, stat.S_IRWXU)
|
||||
@ -421,25 +433,37 @@ Index: xen-3.3.0-testing/tools/python/xen/xend/XendDomain.py
|
||||
+ @rtype: None
|
||||
+ @raise XendInvalidDomain: Domain is not valid
|
||||
+ """
|
||||
+ try:
|
||||
+ dominfo = self.domain_lookup_nr(domid)
|
||||
+ if not dominfo:
|
||||
+ raise XendInvalidDomain(str(domid))
|
||||
+ dominfo = self.domain_lookup_nr(domid)
|
||||
+ if not dominfo:
|
||||
+ raise XendInvalidDomain(str(domid))
|
||||
+
|
||||
+ snap_file = os.path.join(xoptions.get_xend_domains_path(),
|
||||
+ dominfo.get_uuid(), "snapshots", name)
|
||||
+
|
||||
+ if not os.access(snap_file, os.F_OK):
|
||||
+ raise XendError("Snapshot %s does not exist for domain %s" %
|
||||
+ (name, str(domid)))
|
||||
+ snap_file = os.path.join(xoptions.get_xend_domains_path(),
|
||||
+ dominfo.get_uuid(), "snapshots", name)
|
||||
+
|
||||
+ # Warning!
|
||||
+ # Need to "remove" snapshot from qcow2 image file. How
|
||||
+ # should we do this?
|
||||
+ os.unlink(snap_file)
|
||||
+ if not os.access(snap_file, os.F_OK):
|
||||
+ raise XendError("Snapshot %s does not exist for domain %s" %
|
||||
+ (name, str(domid)))
|
||||
+
|
||||
+ except:
|
||||
+ return
|
||||
+ # Need to "remove" snapshot from qcow2 image file.
|
||||
+ # For running domains, this is left to ioemu. For stopped domains
|
||||
+ # we must invoke qemu-img for all devices ourselves
|
||||
+ if dominfo._stateGet() != DOM_STATE_HALTED:
|
||||
+ dominfo.image.signalDeviceModel("snapshot-delete",
|
||||
+ "snapshot-deleted", name)
|
||||
+ else:
|
||||
+ for dev_type, dev_info in dominfo.info.all_devices_sxpr():
|
||||
+ if dev_type != 'tap':
|
||||
+ continue
|
||||
+
|
||||
+ # Fetch the filename and strip off tap:xyz:
|
||||
+ image_file = sxp.child_value(dev_info, 'uname')
|
||||
+ image_file = image_file.split(':')[2]
|
||||
+
|
||||
+ os.system("qemu-img-xen snapshot -d %s %s" %
|
||||
+ (name, image_file));
|
||||
+
|
||||
+
|
||||
+ os.unlink(snap_file)
|
||||
+
|
||||
def domain_pincpu(self, domid, vcpu, cpumap):
|
||||
"""Set which cpus vcpu can use
|
||||
|
@ -67,7 +67,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/Makefile
|
||||
+OBJS := $(XEN_TARGET_ARCH)/entry.o
|
||||
+OBJS += main.o console.o vsprintf.o string.o ctype.o
|
||||
+
|
||||
+CFLAGS += -g -I$(XEN_ROOT)/tools/libxc -I$(XEN_TARGET_ARCH)
|
||||
+CFLAGS += -g -I$(XEN_ROOT)/tools/libxc -I$(XEN_TARGET_ARCH) -I$(XEN_INCLUDE)
|
||||
+
|
||||
+ifeq ($(XEN_TARGET_ARCH),x86_32)
|
||||
+HLP_LDFLAGS := -melf_i386
|
||||
@ -132,12 +132,12 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/console.c
|
||||
+
|
||||
+ cons = intf->out_cons;
|
||||
+ prod = intf->out_prod;
|
||||
+ mb();
|
||||
+ xen_mb();
|
||||
+
|
||||
+ while ((sent < len) && ((prod - cons) < sizeof(intf->out)))
|
||||
+ intf->out[MASK_XENCONS_IDX(prod++, intf->out)] = data[sent++];
|
||||
+
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+ intf->out_prod = prod;
|
||||
+
|
||||
+ if (0 != notify_remote_via_evtchn(console_evtchn))
|
||||
@ -456,7 +456,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+ return;
|
||||
+
|
||||
+ memset(xenstore_page, 0, PAGE_SIZE);
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+ printk("xs: debug fixup [zero page] done\r\n");
|
||||
+}
|
||||
+#endif
|
||||
@ -541,7 +541,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+static void fillup_memory_p2m(void)
|
||||
+{
|
||||
+ struct xen_memory_reservation reservation = {
|
||||
+ .address_bits = 0,
|
||||
+ .mem_flags = 0,
|
||||
+ .extent_order = 0,
|
||||
+ .nr_extents = 1,
|
||||
+ .domid = DOMID_SELF,
|
||||
@ -696,7 +696,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+ else
|
||||
+ map_page_32(page, mfn, flags);
|
||||
+ xen_tlb_flush();
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+}
|
||||
+
|
||||
+static void map_virt_base(void)
|
||||
@ -706,7 +706,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+ else
|
||||
+ map_virt_base_32();
|
||||
+ xen_tlb_flush();
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+}
|
||||
+
|
||||
+static void fixup_pagetables_32(void)
|
||||
@ -822,7 +822,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+ pte[pte_off] = (mfn << PAGE_SHIFT) | flags;
|
||||
+
|
||||
+ xen_tlb_flush();
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+}
|
||||
+
|
||||
+static void map_virt_base(void)
|
||||
@ -857,7 +857,7 @@ Index: xen-3.3.0-testing/tools/xcutils/helper/main.c
|
||||
+ pgd_low++;
|
||||
+ }
|
||||
+ xen_tlb_flush();
|
||||
+ wmb();
|
||||
+ xen_wmb();
|
||||
+}
|
||||
+
|
||||
+static void fixup_pagetables(void)
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e63df7fa5cc4d603cf44b7562d2f03f0784f2951389eb44b752897f67b1ed24e
|
||||
size 9818013
|
||||
oid sha256:c53af8d91df0454b584aa771232a715bd068467c2841a3d44812fd9e70cb497e
|
||||
size 9822192
|
||||
|
@ -2,7 +2,7 @@ Index: xen-3.3.0-testing/Config.mk
|
||||
===================================================================
|
||||
--- xen-3.3.0-testing.orig/Config.mk
|
||||
+++ xen-3.3.0-testing/Config.mk
|
||||
@@ -84,20 +84,20 @@ QEMU_REMOTE=http://xenbits.xensource.com
|
||||
@@ -85,20 +85,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.
|
||||
|
@ -1,22 +0,0 @@
|
||||
Index: xen-unstable/xen/include/public/foreign/Makefile
|
||||
===================================================================
|
||||
--- xen-unstable.orig/xen/include/public/foreign/Makefile
|
||||
+++ xen-unstable/xen/include/public/foreign/Makefile
|
||||
@@ -17,8 +17,6 @@ ifeq ($(CROSS_COMPILE),)
|
||||
check-headers: checker
|
||||
./checker > $(XEN_TARGET_ARCH).size
|
||||
diff -u reference.size $(XEN_TARGET_ARCH).size
|
||||
-checker: checker.c $(headers)
|
||||
- $(HOSTCC) $(HOSTCFLAGS) -o $@ $<
|
||||
else
|
||||
check-headers:
|
||||
@echo "cross build: skipping check"
|
||||
@@ -33,5 +31,8 @@ x86_64.h: ../arch-x86/xen-x86_64.h ../ar
|
||||
ia64.h: ../arch-ia64.h ../xen.h $(scripts)
|
||||
python mkheader.py $* $@ $(filter %.h,$^)
|
||||
|
||||
+checker: checker.c $(headers)
|
||||
+ $(HOSTCC) $(HOSTCFLAGS) -o $@ $<
|
||||
+
|
||||
checker.c: $(scripts)
|
||||
python mkchecker.py $(XEN_TARGET_ARCH) $@ $(architectures)
|
@ -1,13 +0,0 @@
|
||||
Index: xen-4.0.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
|
||||
XEN_CONFIGS += xmexample.hvm
|
||||
-XEN_CONFIGS += xmexample.vti
|
||||
+XEN_CONFIGS += xmexample.nbd
|
||||
XEN_CONFIGS += xend-pci-quirks.sxp
|
||||
XEN_CONFIGS += xend-pci-permissive.sxp
|
||||
|
12
xen-xmexample-vti.diff
Normal file
12
xen-xmexample-vti.diff
Normal file
@ -0,0 +1,12 @@
|
||||
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
|
||||
@@ -20,7 +20,6 @@ XEN_CONFIGS += xmexample.hvm-stubdom
|
||||
XEN_CONFIGS += xmexample.hvm-dm
|
||||
XEN_CONFIGS += xmexample.pv-grub
|
||||
XEN_CONFIGS += xmexample.nbd
|
||||
-XEN_CONFIGS += xmexample.vti
|
||||
XEN_CONFIGS += xend-pci-quirks.sxp
|
||||
XEN_CONFIGS += xend-pci-permissive.sxp
|
||||
|
40
xen.changes
40
xen.changes
@ -1,3 +1,43 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 29 06:39:21 MDT 2008 - plc@novell.com
|
||||
|
||||
- Added 'tap' to the type of devices for HalDaemon.py to
|
||||
scan for change of xenstore attribute media-present.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 27 12:21:19 MDT 2008 - jfehlig@novell.com
|
||||
|
||||
- Don't create pv vif device if emulated network device is
|
||||
explicitly specified in guest config.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 22 08:37:49 MDT 2008 - carnold@novell.com
|
||||
|
||||
- Updated to xen-unstable changeset 18358 Xen 3.3.0 FCS.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 20 13:59:45 MDT 2008 - carnold@novell.com
|
||||
|
||||
- Updated to xen-unstable changeset 18353 RC7.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Aug 20 15:08:19 CEST 2008 - kwolf@suse.de
|
||||
|
||||
- Implementation of xm snapshot-delete
|
||||
snapshot-ioemu-delete.patch, snapshot-xend.patch
|
||||
- Add snapshot options to qemu-img-xen
|
||||
qemu-img-snapshot.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Aug 19 10:27:05 MDT 2008 - carnold@novell.com
|
||||
|
||||
- Enable kboot and kexec patches.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Aug 18 11:13:55 MDT 2008 - carnold@novell.com
|
||||
|
||||
- Updated to xen-unstable changeset 18335 RC5.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Aug 18 17:17:25 CEST 2008 - carnold@suse.de
|
||||
|
||||
|
@ -264,7 +264,7 @@ 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:
|
||||
@@ -1295,6 +1295,7 @@ class XendDomain:
|
||||
POWER_STATE_NAMES[DOM_STATE_RUNNING],
|
||||
POWER_STATE_NAMES[dominfo._stateGet()])
|
||||
|
||||
@ -318,7 +318,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
|
||||
@@ -36,6 +36,7 @@ XEN_SCRIPTS += vtpm vtpm-delete
|
||||
@@ -35,6 +35,7 @@ XEN_SCRIPTS += vtpm vtpm-delete
|
||||
XEN_SCRIPTS += xen-hotplug-cleanup
|
||||
XEN_SCRIPTS += external-device-migrate
|
||||
XEN_SCRIPTS += vscsi
|
||||
|
18
xend-vif-fix.patch
Normal file
18
xend-vif-fix.patch
Normal file
@ -0,0 +1,18 @@
|
||||
Index: xen-3.3.0-testing/tools/python/xen/xend/server/netif.py
|
||||
===================================================================
|
||||
--- xen-3.3.0-testing.orig/tools/python/xen/xend/server/netif.py
|
||||
+++ xen-3.3.0-testing/tools/python/xen/xend/server/netif.py
|
||||
@@ -101,6 +101,13 @@ class NetifController(DevController):
|
||||
def __init__(self, vm):
|
||||
DevController.__init__(self, vm)
|
||||
|
||||
+ def createDevice(self, config):
|
||||
+ typ = config.get('type', '')
|
||||
+ if typ == 'ioemu':
|
||||
+ return 0
|
||||
+
|
||||
+ DevController.createDevice(self, config)
|
||||
+
|
||||
def getDeviceDetails(self, config):
|
||||
"""@see DevController.getDeviceDetails"""
|
||||
|
Loading…
Reference in New Issue
Block a user