From 393ad2e586dac8e3694cb21393f83dbafc853b0304ed51abb73406ae211c9d76 Mon Sep 17 00:00:00 2001 From: Charles Arnold Date: Fri, 30 Jul 2010 22:30:24 +0000 Subject: [PATCH] - bnc#623833 - Error in Xend-API method VM_set_actions_after_crash 21866-xenapi.patch - bnc#625003 - Fix vm config options coredump-{restart,destroy} Added hunk to xm-create-xflag.patch - bnc#605186 - Squelch harmless error messages in block-iscsi - bnc#623438 - Add ability to control SCSI device path scanning in xend 21847-pscsi.patch 21723-get-domu-state.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=68 --- 21723-get-domu-state.patch | 188 +++++++++++++++++++++++++++++++++++++ 21847-pscsi.patch | 130 +++++++++++++++++++++++++ 21866-xenapi.patch | 90 ++++++++++++++++++ block-iscsi | 4 +- cpu-pools-python.patch | 24 ++--- domu-usb-controller.patch | 2 +- hv_tools.patch | 26 +++-- snapshot-xend.patch | 2 +- xen-max-free-mem.diff | 4 +- xen.changes | 26 ++++- xen.spec | 8 +- xend-domain-lock.patch | 11 ++- xm-create-xflag.patch | 15 +++ xm-save-check-file.patch | 2 +- 14 files changed, 498 insertions(+), 34 deletions(-) create mode 100644 21723-get-domu-state.patch create mode 100644 21847-pscsi.patch create mode 100644 21866-xenapi.patch diff --git a/21723-get-domu-state.patch b/21723-get-domu-state.patch new file mode 100644 index 0000000..922e954 --- /dev/null +++ b/21723-get-domu-state.patch @@ -0,0 +1,188 @@ +# HG changeset patch +# User Ian Jackson +# Date 1277819571 -3600 +# Node ID a60c604b5829db6285ff89d8163478330ac12ee2 +# Parent 7b00193bd0334606b6f6779c3f14a1667a952fe4 +tools/xend, xm: add a command to get the state of VMs + +add a command "domstate" to get the state of Vms, which may have one state of +{'shutoff', 'idle','shutdown','running','crashed','paused' or 'paused by +admin"}. + +For case of pause, I distinguish it into two conditions. One is "paused" the +other is "paused by admin". +"pasued by admin" means that users pause a domain voluntary by "xm paused +VM" or " API" + +Signed-off-by James (Song Wei) + +Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomain.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendDomain.py +@@ -250,6 +250,18 @@ class XendDomain: + @return: path to config file. + """ + return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE) ++ def domain_setpauseflag(self, dom, flag=False): ++ try: ++ dominfo = self.domain_lookup_nr(dom) ++ dominfo.paused_by_admin = flag ++ except Exception, err: ++ log.debug("error in in setpauseflag") ++ def domain_getpauseflag(self, dom): ++ try: ++ dominfo = self.domain_lookup_nr(dom) ++ return dominfo.paused_by_admin ++ except Exception, err: ++ log.debug("error in in getpauseflag") + + def _managed_check_point_path(self, domuuid): + """Returns absolute path to check point file for managed domain. +Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py +@@ -327,6 +327,8 @@ class XendDomainInfo: + @type info: dictionary + @ivar domid: Domain ID (if VM has started) + @type domid: int or None ++ @ivar paused_by_admin: Is this Domain paused by command or API ++ @type paused_by_admin: bool + @ivar guest_bitsize: the bitsize of guest + @type guest_bitsize: int or None + @ivar alloc_mem: the memory domain allocated when booting +@@ -390,6 +392,7 @@ class XendDomainInfo: + self.domid = domid + self.guest_bitsize = None + self.alloc_mem = None ++ self.paused_by_admin = False + + maxmem = self.info.get('memory_static_max', 0) + memory = self.info.get('memory_dynamic_max', 0) +Index: xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/server/SrvDomain.py ++++ xen-4.0.0-testing/tools/python/xen/xend/server/SrvDomain.py +@@ -225,6 +225,20 @@ class SrvDomain(SrvDir): + self.acceptCommand(req) + return self.xd.domain_reset(self.dom.getName()) + ++ def op_do_get_pauseflag(self, op, req): ++ self.acceptCommand(req) ++ return req.threadRequest(self.do_get_pauseflag, op, req) ++ ++ def do_get_pauseflag(self, _, req): ++ return self.xd.domain_getpauseflag(self.dom.getName(), req) ++ ++ def op_do_set_pauseflag(self, op, req): ++ self.acceptCommand(req) ++ return req.threadRequest(self.do_set_pauseflag, op, req) ++ ++ def do_set_pauseflag(self, _, req): ++ return self.xd.domain_setpauseflag(self.dom.getName(), req) ++ + def op_usb_add(self, op, req): + self.acceptCommand(req) + return req.threadRequest(self.do_usb_add, op, req) +Index: xen-4.0.0-testing/tools/python/xen/xm/main.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xm/main.py ++++ xen-4.0.0-testing/tools/python/xen/xm/main.py +@@ -165,6 +165,8 @@ SUBCOMMAND_HELP = { + #usb + 'usb-add' : (' <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'), + 'usb-del' : (' <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'), ++ #domstate ++ 'domstate' : (' ', 'get the state of a domain'), + + # device commands + +@@ -370,6 +372,7 @@ common_commands = [ + "uptime", + "usb-add", + "usb-del", ++ "domstate", + "vcpu-set", + ] + +@@ -404,6 +407,7 @@ domain_commands = [ + "uptime", + "usb-add", + "usb-del", ++ "domstate", + "vcpu-list", + "vcpu-pin", + "vcpu-set", +@@ -901,7 +905,6 @@ def getDomains(domain_names, state, full + return "-" + state_str = "".join([state_on_off(state) + for state in states]) +- + dom_rec.update({'name': dom_rec['name_label'], + 'memory_actual': int(dom_metrics_rec['memory_actual'])/1024, + 'vcpus': dom_metrics_rec['VCPUs_number'], +@@ -1395,8 +1398,10 @@ def xm_pause(args): + + if serverType == SERVER_XEN_API: + server.xenapi.VM.pause(get_single_vm(dom)) ++ server.xenapi.VM.set_pauseflag(get_single_vm(dom), True) + else: + server.xend.domain.pause(dom) ++ server.xend.domain.setpauseflag(dom, True) + + def xm_unpause(args): + arg_check(args, "unpause", 1) +@@ -1404,8 +1409,10 @@ def xm_unpause(args): + + if serverType == SERVER_XEN_API: + server.xenapi.VM.unpause(get_single_vm(dom)) ++ server.xenapi.VM.set_pauseflag(get_single_vm(dom), False) + else: + server.xend.domain.unpause(dom) ++ server.xend.domain.setpauseflag(dom, False) + + def xm_dump_core(args): + live = False +@@ -1515,6 +1522,32 @@ def xm_usb_add(args): + arg_check(args, "usb-add", 2) + server.xend.domain.usb_add(args[0],args[1]) + ++def xm_domstate(args): ++ arg_check(args, "domstate", 1) ++ (opitons, params) = getopt.gnu_getopt(args, 's', ['domname=']) ++ doms = getDomains(params, 'all') ++ d = parse_doms_info(doms[0]) ++ state = d['state'] ++ if state: ++ if state.find('s') > 0: ++ print 'shutoff' ++ elif state.find('b') > 0: ++ print 'idle' ++ elif state.find('d') > 0: ++ print 'shutdown' ++ elif state.find('r') > 0: ++ print 'running' ++ elif state.find('c') > 0: ++ print 'crashed' ++ elif state.find('p') > 0: ++ if server.xend.domain.getpauseflag(args[0]): ++ print 'paused by admin' ++ else: ++ print 'paused' ++ else: ++ print 'shutoff' ++ return ++ + def xm_usb_del(args): + arg_check(args, "usb-del", 2) + server.xend.domain.usb_del(args[0],args[1]) +@@ -3538,6 +3571,8 @@ commands = { + #usb + "usb-add": xm_usb_add, + "usb-del": xm_usb_del, ++ #domstate ++ "domstate": xm_domstate, + } + + ## The commands supported by a separate argument parser in xend.xm. diff --git a/21847-pscsi.patch b/21847-pscsi.patch new file mode 100644 index 0000000..f7d9df6 --- /dev/null +++ b/21847-pscsi.patch @@ -0,0 +1,130 @@ +# HG changeset patch +# User "Dube, Lutz" +# Date 1279902875 -3600 +# Node ID 4814e16ea4105502332407e3379c49da92018899 +# Parent e23302fcb83c72f93ec01285bd7f4f1641eb67e4 +tools/xend: Fix performance of xend with more than 10000 FC device paths + +On server startup xend start or a later xend restart needs approx. 30 min to +start/restart. Without attached FC devices xend start/restart needs only some +seconds. + +server type: Fujitsu Primergy RX600-S5 + +The time gets lost in xen/xend/XendNode.py line 329 while calling +vscsi_util.get_all_scsi_device(). + +329 for pscsi_record in vscsi_util.get_all_scsi_devices(): +330 scsi_id = pscsi_record['scsi_id'] +331 if scsi_id: +332 saved_HBA_uuid = None + +I think, in most cases we don't need all the PSCSI devices registered in +xend, but only a few of it. +So a good solution for this perforamce issue is to scan only the SCSI device +paths we need, controlled by a new option in xend-config.sxp. + +I have made a patch to allow specification of scsi devices we need in xend +in the config file xend-config.sxp. +The new options pscsi-device-mask expects a list of device ids oder partial +device ids like the option of lsscsi, e.g. +(pscsi-device-mask (': "Well done" +Committed-by: Ian Jackson + +Index: xen-4.0.0-testing/tools/examples/xend-config.sxp +=================================================================== +--- xen-4.0.0-testing.orig/tools/examples/xend-config.sxp ++++ xen-4.0.0-testing/tools/examples/xend-config.sxp +@@ -277,3 +277,11 @@ + # we have to realize this may incur security issue and we can't make sure the + # device assignment could really work properly even after we do this. + #(pci-passthrough-strict-check yes) ++ ++# If we have a very big scsi device configuration, start of xend is slow, ++# because xend scans all the device paths to build its internal PSCSI device ++# list. If we need only a few devices for assigning to a guest, we can reduce ++# the scan to this device. Set list list of device paths in same syntax like in ++# command lsscsi, e.g. ('16:0:0:0' '15:0') ++# (pscsi-device-mask ('*')) ++ +Index: xen-4.0.0-testing/tools/python/xen/util/vscsi_util.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/util/vscsi_util.py ++++ xen-4.0.0-testing/tools/python/xen/util/vscsi_util.py +@@ -148,11 +148,12 @@ def _vscsi_get_scsidevices_by_sysfs(): + return devices + + +-def vscsi_get_scsidevices(): ++def vscsi_get_scsidevices(mask=""): + """ get all scsi devices information """ + +- devices = _vscsi_get_scsidevices_by_lsscsi("") +- if devices: ++ devices = _vscsi_get_scsidevices_by_lsscsi("[%s]" % mask) ++ if devices or (len(mask) and mask[0] != "*"): ++ # devices found or partial device scan + return devices + return _vscsi_get_scsidevices_by_sysfs() + +@@ -274,9 +275,9 @@ def get_scsi_device(pHCTL): + return _make_scsi_record(scsi_info) + return None + +-def get_all_scsi_devices(): ++def get_all_scsi_devices(mask=""): + scsi_records = [] +- for scsi_info in vscsi_get_scsidevices(): ++ for scsi_info in vscsi_get_scsidevices(mask): + scsi_record = _make_scsi_record(scsi_info) + scsi_records.append(scsi_record) + return scsi_records +Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendNode.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendNode.py +@@ -323,7 +323,12 @@ class XendNode: + pscsi_table = {} + pscsi_HBA_table = {} + +- for pscsi_record in vscsi_util.get_all_scsi_devices(): ++ pscsi_records = [] ++ for pscsi_mask in xendoptions().get_pscsi_device_mask(): ++ pscsi_records += vscsi_util.get_all_scsi_devices(pscsi_mask) ++ log.debug("pscsi record count: %s" % len(pscsi_records)) ++ ++ for pscsi_record in pscsi_records: + scsi_id = pscsi_record['scsi_id'] + if scsi_id: + saved_HBA_uuid = None +Index: xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendOptions.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py +@@ -164,6 +164,9 @@ class XendOptions: + """ + print >>sys.stderr, "xend [ERROR]", fmt % args + ++ """Default mask for pscsi device scan.""" ++ xend_pscsi_device_mask = ['*'] ++ + + def configure(self): + self.set_config() +@@ -430,6 +433,10 @@ class XendOptions: + return self.get_config_bool("pci-passthrough-strict-check", + self.pci_dev_assign_strict_check_default) + ++ def get_pscsi_device_mask(self): ++ return self.get_config_value("pscsi-device-mask", ++ self.xend_pscsi_device_mask) ++ + class XendOptionsFile(XendOptions): + + """Default path to the config file.""" diff --git a/21866-xenapi.patch b/21866-xenapi.patch new file mode 100644 index 0000000..d9a5377 --- /dev/null +++ b/21866-xenapi.patch @@ -0,0 +1,90 @@ +# HG changeset patch +# User Lutz Dube +# Date 1280245980 -3600 +# Node ID e017930af272c888f2a562f842af4e142a973d5f +# Parent 5078f2c1e3d6a3a06ecf352a068eb496f09a2a98 +xend (XenAPI): Error in Xend-API method VM_set_actions_after_crash + +Xend-API defines the method VM_set_actions_after_crash with valid +action names coredump_and_destroy, coredump_and_restart,... . These +values have to be converted into internal representation +"coredump-destroy", "coredump-restart", ... otherwise start of the +domain is rejected. Same error occurs, if I try to create a VM using +the Xend-API with actions_after_crash set to coredump_and_destroy. + +Could you please apply my patch to xen-4-0-testing, too. + +Signed-off-by: Lutz Dube Lutz.Dube@ts.fujitsu.com +Acked-by: Jim Fehlig +Committed-by: Ian Jackson + +Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py +@@ -1667,7 +1667,8 @@ class XendAPI(object): + def VM_set_actions_after_crash(self, session, vm_ref, action): + if action not in XEN_API_ON_CRASH_BEHAVIOUR: + return xen_api_error(['VM_ON_CRASH_BEHAVIOUR_INVALID', vm_ref]) +- return self.VM_set('actions_after_crash', session, vm_ref, action) ++ return self.VM_set('actions_after_crash', session, vm_ref, ++ XEN_API_ON_CRASH_BEHAVIOUR_LEGACY[action]) + + def VM_set_HVM_boot_policy(self, session, vm_ref, value): + if value != "" and value != "BIOS order": +Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPIConstants.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py +@@ -63,6 +63,18 @@ XEN_API_ON_CRASH_BEHAVIOUR_FILTER = { + 'rename_restart' : 'rename_restart', + } + ++XEN_API_ON_CRASH_BEHAVIOUR_LEGACY = { ++ 'destroy' : 'destroy', ++ 'coredump-destroy' : 'coredump-destroy', ++ 'coredump_and_destroy' : 'coredump-destroy', ++ 'restart' : 'restart', ++ 'coredump-restart' : 'coredump-restart', ++ 'coredump_and_restart' : 'coredump-restart', ++ 'preserve' : 'preserve', ++ 'rename-restart' : 'rename-restart', ++ 'rename_restart' : 'rename-restart', ++} ++ + XEN_API_VBD_MODE = ['RO', 'RW'] + XEN_API_VDI_TYPE = ['system', 'user', 'ephemeral'] + XEN_API_VBD_TYPE = ['CD', 'Disk'] +Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py +@@ -41,6 +41,7 @@ from xen.util.pci import pci_opts_list_f + from xen.xend.XendSXPDev import dev_dict_to_sxp + from xen.util import xsconstants + from xen.util import auxbin ++from xen.xend.XendAPIConstants import * + import xen.util.fileuri + + log = logging.getLogger("xend.XendConfig") +@@ -62,6 +63,11 @@ def reverse_dict(adict): + def bool0(v): + return v != '0' and v != 'False' and bool(v) + ++def convert_on_crash(v): ++ v = str(v) ++ return XEN_API_ON_CRASH_BEHAVIOUR_LEGACY[v] \ ++ if v in XEN_API_ON_CRASH_BEHAVIOUR else v ++ + # Recursively copy a data struct, scrubbing out VNC passwords. + # Will scrub any dict entry with a key of 'vncpasswd' or any + # 2-element list whose first member is 'vncpasswd'. It will +@@ -211,7 +217,7 @@ XENAPI_CFG_TYPES = { + 'VCPUs_live': int, + 'actions_after_shutdown': str, + 'actions_after_reboot': str, +- 'actions_after_crash': str, ++ 'actions_after_crash': convert_on_crash, + 'PV_bootloader': str, + 'PV_kernel': str, + 'PV_ramdisk': str, diff --git a/block-iscsi b/block-iscsi index 6f14d7f..3f99c67 100644 --- a/block-iscsi +++ b/block-iscsi @@ -22,7 +22,7 @@ find_sdev() { unset dev for session in /sys/class/iscsi_session/session*; do - if [ "$1" = "`cat $session/targetname`" ]; then + if [ "$1" = "`cat $session/targetname 2>/dev/null`" ]; then dev=`basename $session/device/target*/*:0:*/block*/*` return fi @@ -35,7 +35,7 @@ find_sdev_rev() for session in /sys/class/iscsi_session/session*; do dev=`basename $session/device/target*/*:0:*/block*/*` if [ "$dev" = "$1" ]; then - tgt=`cat $session/targetname` + tgt=`cat $session/targetname 2>/dev/null` return fi done diff --git a/cpu-pools-python.patch b/cpu-pools-python.patch index ee42f7e..99596c2 100644 --- a/cpu-pools-python.patch +++ b/cpu-pools-python.patch @@ -516,7 +516,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py except Exception, ex: log.exception(ex) -@@ -1835,7 +1870,9 @@ class XendAPI(object): +@@ -1836,7 +1871,9 @@ class XendAPI(object): 'is_control_domain': xeninfo.info['is_control_domain'], 'metrics': xeninfo.get_metrics(), 'security_label': xeninfo.get_security_label(), @@ -527,7 +527,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py } return xen_api_success(record) -@@ -1933,6 +1970,25 @@ class XendAPI(object): +@@ -1934,6 +1971,25 @@ class XendAPI(object): xendom.domain_restore(src, bool(paused)) return xen_api_success_void() @@ -1465,7 +1465,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py -@@ -128,6 +128,7 @@ XENAPI_CFG_TO_LEGACY_CFG = { +@@ -134,6 +134,7 @@ XENAPI_CFG_TO_LEGACY_CFG = { 'PV_bootloader': 'bootloader', 'PV_bootloader_args': 'bootloader_args', 'Description': 'description', @@ -1473,7 +1473,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py } LEGACY_CFG_TO_XENAPI_CFG = reverse_dict(XENAPI_CFG_TO_LEGACY_CFG) -@@ -234,6 +235,7 @@ XENAPI_CFG_TYPES = { +@@ -240,6 +241,7 @@ XENAPI_CFG_TYPES = { 'superpages' : int, 'memory_sharing': int, 'Description': str, @@ -1481,7 +1481,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py } # List of legacy configuration keys that have no equivalent in the -@@ -279,6 +281,7 @@ LEGACY_CFG_TYPES = { +@@ -285,6 +287,7 @@ LEGACY_CFG_TYPES = { 'bootloader': str, 'bootloader_args': str, 'description': str, @@ -1489,7 +1489,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py } # Values that should be stored in xenstore's /vm/ that is used -@@ -300,6 +303,7 @@ LEGACY_XENSTORE_VM_PARAMS = [ +@@ -306,6 +309,7 @@ LEGACY_XENSTORE_VM_PARAMS = [ 'on_xend_stop', 'bootloader', 'bootloader_args', @@ -1497,7 +1497,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py ] ## -@@ -408,6 +412,7 @@ class XendConfig(dict): +@@ -414,6 +418,7 @@ class XendConfig(dict): 'other_config': {}, 'platform': {}, 'target': 0, @@ -1634,7 +1634,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py def _init_networks(self): # Initialise networks -@@ -361,6 +364,18 @@ class XendNode: +@@ -366,6 +369,18 @@ class XendNode: for physical_host, pscsi_HBA_uuid in pscsi_HBA_table.items(): XendPSCSI_HBA(pscsi_HBA_uuid, {'physical_host': physical_host}) @@ -1653,7 +1653,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py def add_network(self, interface): # TODO -@@ -581,6 +596,7 @@ class XendNode: +@@ -586,6 +601,7 @@ class XendNode: self.save_PPCIs() self.save_PSCSIs() self.save_PSCSI_HBAs() @@ -1661,7 +1661,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py def save_PIFs(self): pif_records = dict([(pif_uuid, XendAPIStore.get( -@@ -623,6 +639,12 @@ class XendNode: +@@ -628,6 +644,12 @@ class XendNode: for pscsi_HBA_uuid in XendPSCSI_HBA.get_all()]) self.state_store.save_state('pscsi_HBA', pscsi_HBA_records) @@ -1674,7 +1674,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py def shutdown(self): return 0 -@@ -934,6 +956,7 @@ class XendNode: +@@ -939,6 +961,7 @@ class XendNode: self.format_node_to_memory(info, 'node_to_memory') info['node_to_dma32_mem'] = \ self.format_node_to_memory(info, 'node_to_dma32_mem') @@ -1682,7 +1682,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py # FIXME: These are hard-coded to be the inverse of the getXenMemory # functions in image.py. Find a cleaner way. -@@ -953,6 +976,7 @@ class XendNode: +@@ -958,6 +981,7 @@ class XendNode: 'virt_caps', 'total_memory', 'free_memory', diff --git a/domu-usb-controller.patch b/domu-usb-controller.patch index 4434ce9..ec1eaa0 100644 --- a/domu-usb-controller.patch +++ b/domu-usb-controller.patch @@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py -@@ -1855,7 +1855,14 @@ class XendConfig(dict): +@@ -1861,7 +1861,14 @@ class XendConfig(dict): ports = sxp.child(dev_sxp, 'port') for port in ports[1:]: try: diff --git a/hv_tools.patch b/hv_tools.patch index 9af0428..7a86790 100644 --- a/hv_tools.patch +++ b/hv_tools.patch @@ -1,5 +1,7 @@ ---- a/tools/python/xen/lowlevel/xc/xc.c -+++ b/tools/python/xen/lowlevel/xc/xc.c +Index: xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/lowlevel/xc/xc.c ++++ xen-4.0.0-testing/tools/python/xen/lowlevel/xc/xc.c @@ -944,16 +944,16 @@ static PyObject *pyxc_hvm_build(XcObject #endif int i; @@ -30,9 +32,11 @@ return Py_BuildValue("{}"); } ---- a/tools/python/xen/xend/XendConfig.py -+++ b/tools/python/xen/xend/XendConfig.py -@@ -151,6 +151,7 @@ XENAPI_PLATFORM_CFG_TYPES = { +Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py +@@ -157,6 +157,7 @@ XENAPI_PLATFORM_CFG_TYPES = { 'nographic': int, 'nomigrate': int, 'pae' : int, @@ -40,8 +44,10 @@ 'rtc_timeoffset': int, 'parallel': str, 'serial': str, ---- a/tools/python/xen/xend/image.py -+++ b/tools/python/xen/xend/image.py +Index: xen-4.0.0-testing/tools/python/xen/xend/image.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.0.0-testing/tools/python/xen/xend/image.py @@ -839,6 +839,7 @@ class HVMImageHandler(ImageHandler): self.apic = int(vmConfig['platform'].get('apic', 0)) @@ -66,8 +72,10 @@ acpi = self.acpi, apic = self.apic) rc['notes'] = { 'SUSPEND_CANCEL': 1 } ---- a/tools/python/xen/xm/create.py -+++ b/tools/python/xen/xm/create.py +Index: xen-4.0.0-testing/tools/python/xen/xm/create.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.0.0-testing/tools/python/xen/xm/create.py @@ -242,6 +242,10 @@ gopts.var('viridian', val='VIRIDIAN', use="""Expose Viridian interface to x86 HVM guest? (Default is 0).""") diff --git a/snapshot-xend.patch b/snapshot-xend.patch index c86cf13..ed3ba45 100644 --- a/snapshot-xend.patch +++ b/snapshot-xend.patch @@ -325,7 +325,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-4.0.0-testing/tools/python/xen/xend/XendConfig.py -@@ -236,6 +236,7 @@ XENAPI_CFG_TYPES = { +@@ -242,6 +242,7 @@ XENAPI_CFG_TYPES = { 'memory_sharing': int, 'Description': str, 'pool_name' : str, diff --git a/xen-max-free-mem.diff b/xen-max-free-mem.diff index 42b79a2..5d16737 100644 --- a/xen-max-free-mem.diff +++ b/xen-max-free-mem.diff @@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendNode.py +++ xen-4.0.0-testing/tools/python/xen/xend/XendNode.py -@@ -911,15 +911,39 @@ class XendNode: +@@ -916,15 +916,39 @@ class XendNode: info['cpu_mhz'] = info['cpu_khz'] / 1000 @@ -47,7 +47,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendNode.py ITEM_ORDER = ['nr_cpus', 'nr_nodes', 'cores_per_socket', -@@ -929,6 +953,9 @@ class XendNode: +@@ -934,6 +958,9 @@ class XendNode: 'virt_caps', 'total_memory', 'free_memory', diff --git a/xen.changes b/xen.changes index 1ad131b..4bfe29f 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,27 @@ +------------------------------------------------------------------- +Tue Jul 27 16:32:57 MDT 2010 - jfehlig@novell.com + +- bnc#623833 - Error in Xend-API method VM_set_actions_after_crash + 21866-xenapi.patch + +------------------------------------------------------------------- +Tue Jul 27 15:39:17 MDT 2010 - jfehlig@novell.com + +- bnc#625003 - Fix vm config options coredump-{restart,destroy} + Added hunk to xm-create-xflag.patch + +------------------------------------------------------------------- +Mon Jul 26 16:49:39 MDT 2010 - jfehlig@novell.com + +- bnc#605186 - Squelch harmless error messages in block-iscsi + +------------------------------------------------------------------- +Mon Jul 26 16:45:21 MDT 2010 - jfehlig@novell.com + +- bnc#623438 - Add ability to control SCSI device path scanning + in xend + 21847-pscsi.patch + ------------------------------------------------------------------- Wed Jul 21 11:46:41 MDT 2010 - carnold@novell.com @@ -48,7 +72,7 @@ Tue Jul 6 11:31:33 MDT 2010 - carnold@novell.com Fri Jun 25 15:43:35 CST 2010 - jsong@novell.com - bnc#599550 - Xen cannot distinguish the status of 'pause' - addcommand_domstate.patch + 21723-get-domu-state.patch ------------------------------------------------------------------- Tue Jun 22 11:50:35 MDT 2010 - jfehlig@novell.com diff --git a/xen.spec b/xen.spec index 90a9740..312e05e 100644 --- a/xen.spec +++ b/xen.spec @@ -133,7 +133,10 @@ Patch55: 21700-32on64-vm86-gpf.patch Patch56: 21705-trace-printk.patch Patch57: 21706-trace-security.patch Patch58: 21712-amd-osvw.patch -Patch59: 21744-x86-cpufreq-range-check.patch +Patch59: 21723-get-domu-state.patch +Patch60: 21744-x86-cpufreq-range-check.patch +Patch61: 21847-pscsi.patch +Patch62: 21866-xenapi.patch # Our patches Patch300: xen-config.diff Patch301: xend-config.diff @@ -639,6 +642,9 @@ Authors: %patch57 -p1 %patch58 -p1 %patch59 -p1 +%patch60 -p1 +%patch61 -p1 +%patch62 -p1 %patch300 -p1 %patch301 -p1 %patch302 -p1 diff --git a/xend-domain-lock.patch b/xend-domain-lock.patch index 14c0a5e..49710df 100644 --- a/xend-domain-lock.patch +++ b/xend-domain-lock.patch @@ -2,11 +2,10 @@ Index: xen-4.0.0-testing/tools/examples/xend-config.sxp =================================================================== --- xen-4.0.0-testing.orig/tools/examples/xend-config.sxp +++ xen-4.0.0-testing/tools/examples/xend-config.sxp -@@ -304,3 +304,62 @@ - # we have to realize this may incur security issue and we can't make sure the +@@ -305,6 +305,65 @@ # device assignment could really work properly even after we do this. #(pci-passthrough-strict-check yes) -+ + +# Domain Locking +# In a multihost environment, domain locking prevents simultaneously +# running a domain on more than one host. @@ -65,6 +64,10 @@ Index: xen-4.0.0-testing/tools/examples/xend-config.sxp +# before starting vm1 on HostA. +# +#(xend-domain-lock-utility domain-lock) ++ + # If we have a very big scsi device configuration, start of xend is slow, + # because xend scans all the device paths to build its internal PSCSI device + # list. If we need only a few devices for assigning to a guest, we can reduce Index: xen-4.0.0-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py @@ -200,7 +203,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendOptions.py def __init__(self): self.configure() -@@ -398,6 +409,24 @@ class XendOptions: +@@ -401,6 +412,24 @@ class XendOptions: else: return None diff --git a/xm-create-xflag.patch b/xm-create-xflag.patch index a344f3a..e637b87 100644 --- a/xm-create-xflag.patch +++ b/xm-create-xflag.patch @@ -29,3 +29,18 @@ Index: xen-4.0.0-testing/tools/python/xen/xm/create.py from xml.dom.ext import PrettyPrint as XMLPrettyPrint XMLPrettyPrint(doc) +Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py +=================================================================== +--- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPIConstants.py ++++ xen-4.0.0-testing/tools/python/xen/xend/XendAPIConstants.py +@@ -45,8 +45,10 @@ XEN_API_ON_NORMAL_EXIT = [ + XEN_API_ON_CRASH_BEHAVIOUR = [ + 'destroy', + 'coredump_and_destroy', ++ 'coredump_destroy', + 'restart', + 'coredump_and_restart', ++ 'coredump_restart', + 'preserve', + 'rename_restart' + ] diff --git a/xm-save-check-file.patch b/xm-save-check-file.patch index 1ea10f6..8f227bb 100644 --- a/xm-save-check-file.patch +++ b/xm-save-check-file.patch @@ -2,7 +2,7 @@ Index: xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py =================================================================== --- xen-4.0.0-testing.orig/tools/python/xen/xend/XendAPI.py +++ xen-4.0.0-testing/tools/python/xen/xend/XendAPI.py -@@ -1922,10 +1922,10 @@ class XendAPI(object): +@@ -1923,10 +1923,10 @@ class XendAPI(object): bool(live), port, node, ssl, bool(chs)) return xen_api_success_void()