Hello community, here is the log from the commit of package xen checked in at Fri Aug 31 16:05:17 CEST 2007. -------- --- arch/i386/xen/xen.changes 2007-08-13 18:26:04.000000000 +0200 +++ /mounts/work_src_done/STABLE/xen/xen.changes 2007-08-30 00:21:44.000000000 +0200 @@ -1,0 +2,24 @@ +Wed Aug 29 16:20:48 MDT 2007 - ccoffing@novell.com + +- Update block-iscsi to match changes to open-iscsi. + +------------------------------------------------------------------- +Mon Aug 27 16:49:48 MDT 2007 - carnold@novell.com + +- #289275 - domu will not reboot if pci= is passed in at boot time. + +------------------------------------------------------------------- +Fri Aug 24 11:30:49 MDT 2007 - carnold@novell.com + +- #297345: Added several upstream patches for hvm migration. + +------------------------------------------------------------------- +Fri Aug 17 18:28:34 MDT 2007 - jfehlig@novell.com + +- Added upstream c/s 15128, 15153, 15477, and 15716. These patches + provide foundation for bug #238986 +- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream + c/s number and moved it to "upstream patches" section of spec + file. + +------------------------------------------------------------------- Old: ---- rtl8139-data-corruption.patch xend_dev_destroy_cleanup.patch New: ---- 15054-hvm-save-restore.patch 15128_xend_dev_disconnect.patch 15152-save-restore-fix-cpu-affinity.patch 15153_xend_dom_teardown.patch 15217-hvm-save-restore.patch 15228-hvm-usb-windows-crash.patch 15230-hvm-usb-windows-crash.patch 15234-hvm-usb-windows-crash.patch 15257-hvm-save-restore.patch 15277-hvm-intel2amd-windows-migrate.patch 15383-hvm-usb-windows-crash.patch 15418-hvm-usb-windows-crash.patch 15469-hvm-save-restore.patch 15477_dev_attach.patch 15528-hvm-sles9-install.patch 15595-rtl8139-data-corruption.patch 15596-rtl8139-crc-fix.patch 15645-hvm-save-restore.patch 15689_dev_destroy_cleanup.patch 15691-hvm-save-restore.patch 15716_dev_detach.patch dmi-table.patch fix_15716.patch keymap_nl-be.patch pci-passthru-reboot-fix.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xen.spec ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:40.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:40.000000000 +0200 @@ -34,7 +34,7 @@ BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif Version: 3.1.0_15042 -Release: 32 +Release: 38 License: GPL v2 only Group: System/Kernel Autoreqprov: on @@ -58,36 +58,57 @@ Source18: network-multinet # Upstream patches Patch0: 15048-localtime.diff -Patch1: 15059-check-libvncserver.patch -Patch2: 15060-check-xenapi.patch -Patch3: 15061-kill-sh_mapcache.patch -Patch4: 15157_xend_device_destroy.patch -Patch5: 15173-32on64-runstate.patch -Patch6: 15183-32on64-multicall.patch -Patch7: 15189-pmtimer.patch -Patch8: 15190-clocksource-opt.patch -Patch9: 15250_xend_device_destroy.patch -Patch10: 15273_libxenapi.patch -Patch11: 15274_xenapi.patch -Patch12: 15275_xenapi.patch -Patch13: 15381-log-svm-npt.patch -Patch14: 15389-32on64-memop-error-path.patch -Patch15: 15390-32on64-setup-error-path.patch -Patch16: 15391-32on64-setup-pgtable.patch -Patch17: 15410-domain-restore.patch -Patch18: 15416-x86_64-failsafe.patch -Patch19: 15433-pae-ptwr-check.patch -Patch20: 15444-vmxassist-p2r.patch -Patch21: 15480-man-xm.patch -Patch22: rtl8139-data-corruption.patch -Patch23: 15168-check-dup-domians.patch -Patch24: 15587-domid-reset.patch -Patch25: 15609-save-mem-values.patch -Patch26: 15642_uuid_unique.patch -Patch27: 15649_xenapi.patch -Patch28: 15650_xenapi.patch -Patch29: 15651_xenapi.patch -Patch30: 15693-32on64-gnttab-err.patch +Patch1: 15054-hvm-save-restore.patch +Patch2: 15059-check-libvncserver.patch +Patch3: 15060-check-xenapi.patch +Patch4: 15061-kill-sh_mapcache.patch +Patch5: 15128_xend_dev_disconnect.patch +Patch6: 15152-save-restore-fix-cpu-affinity.patch +Patch7: 15153_xend_dom_teardown.patch +Patch8: 15157_xend_device_destroy.patch +Patch9: 15168-check-dup-domians.patch +Patch10: 15173-32on64-runstate.patch +Patch11: 15183-32on64-multicall.patch +Patch12: 15189-pmtimer.patch +Patch13: 15190-clocksource-opt.patch +Patch14: 15217-hvm-save-restore.patch +Patch15: 15228-hvm-usb-windows-crash.patch +Patch16: 15230-hvm-usb-windows-crash.patch +Patch17: 15234-hvm-usb-windows-crash.patch +Patch18: 15250_xend_device_destroy.patch +Patch19: 15257-hvm-save-restore.patch +Patch20: 15273_libxenapi.patch +Patch21: 15274_xenapi.patch +Patch22: 15275_xenapi.patch +Patch23: 15277-hvm-intel2amd-windows-migrate.patch +Patch24: 15381-log-svm-npt.patch +Patch25: 15383-hvm-usb-windows-crash.patch +Patch26: 15389-32on64-memop-error-path.patch +Patch27: 15390-32on64-setup-error-path.patch +Patch28: 15391-32on64-setup-pgtable.patch +Patch29: 15410-domain-restore.patch +Patch30: 15416-x86_64-failsafe.patch +Patch31: 15418-hvm-usb-windows-crash.patch +Patch32: 15433-pae-ptwr-check.patch +Patch33: 15444-vmxassist-p2r.patch +Patch34: 15469-hvm-save-restore.patch +Patch35: 15477_dev_attach.patch +Patch36: 15480-man-xm.patch +Patch37: 15528-hvm-sles9-install.patch +Patch38: 15587-domid-reset.patch +Patch39: 15595-rtl8139-data-corruption.patch +Patch40: 15596-rtl8139-crc-fix.patch +Patch41: 15609-save-mem-values.patch +Patch42: 15642_uuid_unique.patch +Patch43: 15645-hvm-save-restore.patch +Patch44: 15649_xenapi.patch +Patch45: 15650_xenapi.patch +Patch46: 15651_xenapi.patch +Patch47: 15689_dev_destroy_cleanup.patch +Patch48: 15691-hvm-save-restore.patch +Patch49: 15693-32on64-gnttab-err.patch +Patch50: 15716_dev_detach.patch +Patch51: fix_15716.patch # Our patches Patch100: xen-config.diff Patch101: xend-config.diff @@ -128,42 +149,44 @@ Patch143: vnc-i18n-keys.diff Patch144: rpmlint.diff Patch145: cdrom-removable.patch -Patch146: xend_dev_destroy_cleanup.patch Patch150: bridge-suse.diff Patch151: bridge-bonding.diff Patch152: bridge-hostonly.diff Patch153: bridge-vlan.diff +Patch154: pci-passthru-reboot-fix.patch +Patch155: keymap_nl-be.patch # Patches from Jan -Patch180: inval-sh-ldt.patch -Patch181: 32on64-cpuid.patch -Patch182: 32on64-ioemu.patch -Patch186: intpte_t-cast.patch -Patch187: ptwr-sanity.patch -Patch188: hvm-pio-read.patch -Patch189: hvm-shared-info-size.patch -Patch190: hvm-hypercall-context.patch -Patch191: hvm-efer.patch -Patch192: hvm-hypercall-debug.patch -Patch193: svm-reg-save.patch -Patch194: vmx-no-cstar.patch -Patch195: hvm-debug-msg.patch -Patch196: guest-copy.patch -Patch197: x86-page-cacheability.patch -Patch198: realmode.patch -Patch199: edd.patch -Patch200: edid.patch -Patch201: 32on64-call-gates.patch -Patch202: x86-nmi-inject.patch -Patch203: x86_emulate.patch -Patch204: vgacon-keep.patch -Patch205: vgacon-50-lines.patch -Patch206: x86-extra-trap-info.patch -Patch207: x86-machine-check.patch -Patch208: x86-emul-rf.patch -Patch209: vmx-check-descr.patch -Patch210: x86_64-syscall-clear-df.patch -Patch211: 32on64-extra-mem.patch -Patch212: blktap.patch +Patch200: inval-sh-ldt.patch +Patch201: 32on64-cpuid.patch +Patch202: 32on64-ioemu.patch +Patch203: intpte_t-cast.patch +Patch204: ptwr-sanity.patch +Patch205: hvm-pio-read.patch +Patch206: hvm-shared-info-size.patch +Patch207: hvm-hypercall-context.patch +Patch208: hvm-efer.patch +Patch209: hvm-hypercall-debug.patch +Patch210: svm-reg-save.patch +Patch211: vmx-no-cstar.patch +Patch212: hvm-debug-msg.patch +Patch213: guest-copy.patch +Patch214: x86-page-cacheability.patch +Patch215: realmode.patch +Patch216: edd.patch +Patch217: edid.patch +Patch218: 32on64-call-gates.patch +Patch219: x86-nmi-inject.patch +Patch220: x86_emulate.patch +Patch221: vgacon-keep.patch +Patch222: vgacon-50-lines.patch +Patch223: x86-extra-trap-info.patch +Patch224: x86-machine-check.patch +Patch225: x86-emul-rf.patch +Patch226: vmx-check-descr.patch +Patch227: x86_64-syscall-clear-df.patch +Patch228: 32on64-extra-mem.patch +Patch229: blktap.patch +Patch230: dmi-table.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()") @@ -566,6 +589,27 @@ %patch28 -p1 %patch29 -p1 %patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 %patch100 -p1 %patch101 -p1 %patch102 -p1 @@ -605,28 +649,12 @@ %patch143 -p1 %patch144 -p1 %patch145 -p1 -%patch146 -p1 %patch150 -p1 %patch151 -p1 %patch152 -p1 %patch153 -p1 -%patch180 -p1 -%patch181 -p1 -%patch182 -p1 -%patch186 -p1 -%patch187 -p1 -%patch188 -p1 -%patch189 -p1 -%patch190 -p1 -%patch191 -p1 -%patch192 -p1 -%patch193 -p1 -%patch194 -p1 -%patch195 -p1 -%patch196 -p1 -%patch197 -p1 -%patch198 -p1 -%patch199 -p1 +%patch154 -p1 +%patch155 -p1 %patch200 -p1 %patch201 -p1 %patch202 -p1 @@ -640,6 +668,24 @@ %patch210 -p1 %patch211 -p1 %patch212 -p1 +%patch213 -p1 +%patch214 -p1 +%patch215 -p1 +%patch216 -p1 +%patch217 -p1 +%patch218 -p1 +%patch219 -p1 +%patch220 -p1 +%patch221 -p1 +%patch222 -p1 +%patch223 -p1 +%patch224 -p1 +%patch225 -p1 +%patch226 -p1 +%patch227 -p1 +%patch228 -p1 +%patch229 -p1 +%patch230 -p1 %build XEN_EXTRAVERSION=%version-%release @@ -951,6 +997,18 @@ /sbin/ldconfig %changelog +* Wed Aug 29 2007 - ccoffing@novell.com +- Update block-iscsi to match changes to open-iscsi. +* Mon Aug 27 2007 - carnold@novell.com +- #289275 - domu will not reboot if pci= is passed in at boot time. +* Fri Aug 24 2007 - carnold@novell.com +- #297345: Added several upstream patches for hvm migration. +* Fri Aug 17 2007 - jfehlig@novell.com +- Added upstream c/s 15128, 15153, 15477, and 15716. These patches + provide foundation for bug #238986 +- Renamed xend_dev_destroy_cleanup.patch to reflect the upstream + c/s number and moved it to "upstream patches" section of spec + file. * Mon Aug 13 2007 - carnold@novell.com - hvm svm: Log into 'xm dmesg' that SVM NPT is enabled. * Fri Aug 10 2007 - ccoffing@novell.com ++++++ 15054-hvm-save-restore.patch ++++++ # HG changeset patch # User Steven Hand <steven@xensource.com> # Date 1179152192 -3600 # Node ID 9c2a616722da143f8abcd0eabb45159341f3cce0 # Parent 3ecf516896719b667833183a4aa87975824b931b HVM save/restore: handle larger domain ids. Signed-off-by: Steven Hand <steven@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/helper2.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/helper2.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/helper2.c @@ -615,7 +615,7 @@ int main_loop(void) extern int suspend_requested; CPUState *env = cpu_single_env; int evtchn_fd = xc_evtchn_fd(xce_handle); - char qemu_file[20]; + char qemu_file[32]; buffered_io_timer = qemu_new_timer(rt_clock, handle_buffered_io, cpu_single_env); ++++++ 15128_xend_dev_disconnect.patch ++++++ # HG changeset patch # User Steven Hand <steven@xensource.com> # Date 1179844370 -3600 # Node ID f6928d6369999cd063edd361d592579c2483196b # Parent 98cf6c05c32a59ad3f4fcd505ca60348589e6096 This patch fixes the issue with waiting for devices to disconnect during the end stage of migration in Xend. The problem was cause by a deletion of the VM domain ID which is used by testDevicecompleComplete ->deviceIDs->backendRoot() to get the virtual backend device path. The virtual backend device path is used to check if a device still exists in xenstore. Signed-off-by: Yung Giang <yung.giang@gmail.com> Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -1680,7 +1680,6 @@ class XendDomainInfo: try: if self.domid is not None: xc.domain_destroy(self.domid) - self.domid = None for state in DOM_STATES_OLD: self.info[state] = 0 self._stateSet(DOM_STATE_HALTED) ++++++ 15152-save-restore-fix-cpu-affinity.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1180011729 -3600 # Node ID 853853686147c4e863551b5742ca424e2929599a # Parent 6223d154e55f6cf7144c758979e6d3364d5d436e xend: Fix CPU affinity reset across save/restore. Fixes bug #936. Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com> Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py @@ -587,30 +587,46 @@ class XendConfig(dict): else: cfg['cpus'] = str(cfg['cpu']) - # convert 'cpus' string to list of ints - # 'cpus' supports a list of ranges (0-3), seperated by - # commas, and negation, (^1). - # Precedence is settled by order of the string: - # "0-3,^1" -> [0,2,3] - # "0-3,^1,1" -> [0,1,2,3] - try: - if 'cpus' in cfg and type(cfg['cpus']) != list: - cpus = [] - for c in cfg['cpus'].split(','): - if c.find('-') != -1: - (x, y) = c.split('-') - for i in range(int(x), int(y)+1): - cpus.append(int(i)) - else: - # remove this element from the list - if c[0] == '^': - cpus = [x for x in cpus if x != int(c[1:])] + # Convert 'cpus' to list of ints + if 'cpus' in cfg: + cpus = [] + if type(cfg['cpus']) == list: + # If sxp_cfg was created from config.sxp, + # the form of 'cpus' is list of string. + # Convert 'cpus' to list of ints. + # ['1'] -> [1] + # ['0','2','3'] -> [0,2,3] + try: + for c in cfg['cpus']: + cpus.append(int(c)) + + cfg['cpus'] = cpus + except ValueError, e: + raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e)) + else: + # Convert 'cpus' string to list of ints + # 'cpus' supports a list of ranges (0-3), + # seperated by commas, and negation, (^1). + # Precedence is settled by order of the + # string: + # "0-3,^1" -> [0,2,3] + # "0-3,^1,1" -> [0,1,2,3] + try: + for c in cfg['cpus'].split(','): + if c.find('-') != -1: + (x, y) = c.split('-') + for i in range(int(x), int(y)+1): + cpus.append(int(i)) else: - cpus.append(int(c)) - - cfg['cpus'] = cpus - except ValueError, e: - raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e)) + # remove this element from the list + if c[0] == '^': + cpus = [x for x in cpus if x != int(c[1:])] + else: + cpus.append(int(c)) + + cfg['cpus'] = cpus + except ValueError, e: + raise XendConfigError('cpus = %s: %s' % (cfg['cpus'], e)) if 'security' in cfg and isinstance(cfg['security'], str): cfg['security'] = sxp.from_string(cfg['security']) @@ -842,6 +858,8 @@ class XendConfig(dict): if name in self and self[name] not in (None, []): if typ == dict: s = self[name].items() + elif typ == list: + s = self[name] else: s = str(self[name]) sxpr.append([name, s]) ++++++ 15153_xend_dom_teardown.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1180011958 -3600 # Node ID f07c1bb86d6c54458ff944e71453173cbf567ed2 # Parent 853853686147c4e863551b5742ca424e2929599a xend: Tear down domain if device hotplug fails during startup If creating an unmanaged guest (eg xm create), if device hotplug fails during the startup of the guest, then the guest will be torn down again. If creating and starting a managed guest (eg xm new && xm start), then if device hotplug fails, the still born guest gets left in 'paused' state. This confuses users no end, who go an unpause and then get all upset when it shortly crashes (due to lack of disk or network devices). The attached patch fixes XenDomain.py's domain_start() method so that if waitForDevices() fails, then the entire domain is torn down. This is the same approach used in xm create. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Index: xen-3.1-testing/tools/python/xen/xend/XendDomain.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomain.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomain.py @@ -985,10 +985,16 @@ class XendDomain: dominfo.start(is_managed = True) finally: self.domains_lock.release() - dominfo.waitForDevices() + + try: + dominfo.waitForDevices() + except Exception, ex: + log.warn("Failed to setup devices for " + str(dominfo) + ": " + str(ex)) + dominfo.destroy() + raise + if not start_paused: dominfo.unpause() - def domain_delete(self, domid): """Remove a managed domain from database ++++++ 15168-check-dup-domians.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:41.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:41.000000000 +0200 @@ -10,7 +10,7 @@ =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2057,7 +2057,7 @@ class XendDomainInfo: +@@ -2069,7 +2069,7 @@ class XendDomainInfo: raise VmError('Invalid VM Name') dom = XendDomain.instance().domain_lookup_nr(name) ++++++ 15217-hvm-save-restore.patch ++++++ # HG changeset patch # User Tim Deegan <Tim.Deegan@xensource.com> # Date 1180973352 -3600 # Node ID 7a16a499152ce67fb36b4e101b7d2d953d1f6362 # Parent 6f13c3be08fa4c044868144672783f7b1341999a [HVM] Save/restore: trigger FPU state save based on v->fpu_initialised and not on the i387_valid flag, which has no meaning in this context. Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com> Index: xen-3.1-testing/xen/arch/x86/hvm/hvm.c =================================================================== --- xen-3.1-testing.orig/xen/arch/x86/hvm/hvm.c +++ xen-3.1-testing/xen/arch/x86/hvm/hvm.c @@ -272,7 +272,7 @@ static int hvm_save_cpu_ctxt(struct doma /* Other vcpu register state */ vc = &v->arch.guest_context; - if ( vc->flags & VGCF_i387_valid ) + if ( v->fpu_initialised ) memcpy(ctxt.fpu_regs, &vc->fpu_ctxt, sizeof(ctxt.fpu_regs)); else memset(ctxt.fpu_regs, 0, sizeof(ctxt.fpu_regs)); @@ -364,7 +364,7 @@ static int hvm_load_cpu_ctxt(struct doma vc->debugreg[6] = ctxt.dr6; vc->debugreg[7] = ctxt.dr7; - vc->flags = VGCF_i387_valid | VGCF_online; + vc->flags = VGCF_online; v->fpu_initialised = 1; /* Auxiliary processors should be woken immediately. */ ++++++ 15228-hvm-usb-windows-crash.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1181157846 -3600 # Node ID 677731eb734d8d7afa37a2e31ca2ed85fbebc2a5 # Parent f5a71c9771a81f220926ac11e4c9a2a27530c20a [HVM] Prevent usb driver crashes in Windows Use atomic updates to read/write usb controller data. This can be done because: a) word copies on x86 are atomic b) The USB spec requires word alignment This will need to be enhanced once USB 1.2 is supported. Signed-off-by: Steve Ofsthun <sofsthun@virtualiron.com> Update to copy 'longword'-sized atoms. Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c @@ -434,6 +434,31 @@ int iomem_index(target_phys_addr_t addr) extern unsigned long *logdirty_bitmap; extern unsigned long logdirty_bitmap_size; +/* + * Replace the standard byte memcpy with a word memcpy for appropriately sized + * memory copy operations. Some users (USB-UHCI) can not tolerate the possible + * word tearing that can result from a guest concurrently writing a memory + * structure while the qemu device model is modifying the same location. + * Forcing a word-sized read/write prevents the guest from seeing a partially + * written word-sized atom. + */ +void memcpy_words(void *dst, void *src, size_t n) +{ + while (n >= sizeof(long)) { + *((long *)dst)++ = *((long *)src)++; + n -= sizeof(long); + } + + if (n & 4) + *((uint32_t *)dst)++ = *((uint32_t *)src)++; + + if (n & 2) + *((uint16_t *)dst)++ = *((uint16_t *)src)++; + + if (n & 1) + *((uint8_t *)dst)++ = *((uint8_t *)src)++; +} + void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, int len, int is_write) { @@ -470,7 +495,7 @@ void cpu_physical_memory_rw(target_phys_ } } else if ((ptr = phys_ram_addr(addr)) != NULL) { /* Writing to RAM */ - memcpy(ptr, buf, l); + memcpy_words(ptr, buf, l); if (logdirty_bitmap != NULL) { /* Record that we have dirtied this frame */ unsigned long pfn = addr >> TARGET_PAGE_BITS; @@ -506,7 +531,7 @@ void cpu_physical_memory_rw(target_phys_ } } else if ((ptr = phys_ram_addr(addr)) != NULL) { /* Reading from RAM */ - memcpy(buf, ptr, l); + memcpy_words(buf, ptr, l); } else { /* Neither RAM nor known MMIO space */ memset(buf, 0xff, len); ++++++ 15230-hvm-usb-windows-crash.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1181210543 -3600 # Node ID b090c290d9f8fc579be32ddd68f2bcd96e05aa03 # Parent 6d45351273da0b49ed328ef8077446c4ceedf3ff tools: Fix some type issues GCC 4.1.0 warnings. FC5's gcc 4.1.0 can't make some files in tools/ due to its stronger type checking. From: Dexuan Cui <dexuan.cui@intel.com> Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c @@ -445,18 +445,29 @@ extern unsigned long logdirty_bitmap_siz void memcpy_words(void *dst, void *src, size_t n) { while (n >= sizeof(long)) { - *((long *)dst)++ = *((long *)src)++; + *((long *)dst) = *((long *)src); + dst = ((long *)dst) + 1; + src = ((long *)src) + 1; n -= sizeof(long); } - if (n & 4) - *((uint32_t *)dst)++ = *((uint32_t *)src)++; - - if (n & 2) - *((uint16_t *)dst)++ = *((uint16_t *)src)++; + if (n & 4) { + *((uint32_t *)dst) = *((uint32_t *)src); + dst = ((uint32_t *)dst) + 1; + src = ((uint32_t *)src) + 1; + } + + if (n & 2) { + *((uint16_t *)dst) = *((uint16_t *)src); + dst = ((uint16_t *)dst) + 1; + src = ((uint16_t *)src) + 1; + } - if (n & 1) - *((uint8_t *)dst)++ = *((uint8_t *)src)++; + if (n & 1) { + *((uint8_t *)dst) = *((uint8_t *)src); + dst = ((uint8_t *)dst) + 1; + src = ((uint8_t *)src) + 1; + } } void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, ++++++ 15234-hvm-usb-windows-crash.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1181211324 -3600 # Node ID 1cae82505e9e11bcf47f0857917cd20b2d0bad26 # Parent 3a413f011b8f5dc53825d6882cdf95d47a4212b1 ioemu: Tiny indentation fix. Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c @@ -455,7 +455,7 @@ void memcpy_words(void *dst, void *src, *((uint32_t *)dst) = *((uint32_t *)src); dst = ((uint32_t *)dst) + 1; src = ((uint32_t *)src) + 1; - } + } if (n & 2) { *((uint16_t *)dst) = *((uint16_t *)src); ++++++ 15257-hvm-save-restore.patch ++++++ # HG changeset patch # User Tim Deegan <Tim.Deegan@xensource.com> # Date 1181570210 -3600 # Node ID ed254cf78f7ca758539ba3314932fbbd808807d2 # Parent 2c8c6ca1296b82e31bb0a50fcf9f63d0bfa11176 [QEMU] Fix up ioemu timer save/restore after version changes. Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com> Index: xen-3.1-testing/tools/ioemu/vl.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/vl.c +++ xen-3.1-testing/tools/ioemu/vl.c @@ -872,7 +872,7 @@ static void timer_save(QEMUFile *f, void static int timer_load(QEMUFile *f, void *opaque, int version_id) { - if (version_id != 1) + if (version_id != 1 && version_id != 2) return -EINVAL; if (cpu_ticks_enabled) { return -EINVAL; ++++++ 15277-hvm-intel2amd-windows-migrate.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1181832897 -3600 # Node ID 912f7e312ec2a56c89ef5a949b6ecc72f5df74a6 # Parent 4d838167960694f1b9fcaec54590aef0e1f0a7ee hvm svm: Fix for BSOD when "migrating" from Intel to AMD. The Intel processor driver for Windows (XP and later at least) reads an MSR that AMD doesn't have. This causes GP-fault in kernel mode, which causes blue-screen-of-death on Windows. This prevents a disk-image that was installed on Intel from starting on an AMD processor. This patch "fixes" the problem by allowing reads from the msr, returning all zero's (which is a valid, if not particulary meaningful, value for this register). Signed-off-by: Mats Petersson <mats.petersson@amd.com> Index: xen-3.1-testing/xen/arch/x86/hvm/svm/svm.c =================================================================== --- xen-3.1-testing.orig/xen/arch/x86/hvm/svm/svm.c +++ xen-3.1-testing/xen/arch/x86/hvm/svm/svm.c @@ -2000,6 +2000,15 @@ static inline void svm_do_msr_access( msr_content = v->arch.hvm_svm.cpu_shadow_efer; break; + case MSR_IA32_EBC_FREQUENCY_ID: + /* + * This Intel-only register may be accessed if this HVM guest + * has been migrated from an Intel host. The value zero is not + * particularly meaningful, but at least avoids the guest crashing! + */ + msr_content = 0; + break; + default: if ( rdmsr_hypervisor_regs(ecx, &eax, &edx) || rdmsr_safe(ecx, eax, edx) == 0 ) Index: xen-3.1-testing/xen/include/asm-x86/msr.h =================================================================== --- xen-3.1-testing.orig/xen/include/asm-x86/msr.h +++ xen-3.1-testing/xen/include/asm-x86/msr.h @@ -93,6 +93,7 @@ static inline void wrmsrl(unsigned int m #define MSR_IA32_TIME_STAMP_COUNTER 0x10 #define MSR_IA32_PLATFORM_ID 0x17 #define MSR_IA32_EBL_CR_POWERON 0x2a +#define MSR_IA32_EBC_FREQUENCY_ID 0x2c #define MSR_IA32_APICBASE 0x1b #define MSR_IA32_APICBASE_BSP (1<<8) ++++++ 15383-hvm-usb-windows-crash.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1182265695 -3600 # Node ID 896b536d66c9952fac4bd1c9a6e3f562debec19d # Parent cb747a35e057ad2536fc560d21d43a1ade1faae5 ioemu: Assembler memcpy() for x86, and lowest-common-denominator memcpy() function for all others, avoiding noisy longword copies on ia64. Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c @@ -442,19 +442,40 @@ extern unsigned long logdirty_bitmap_siz * Forcing a word-sized read/write prevents the guest from seeing a partially * written word-sized atom. */ -void memcpy_words(void *dst, void *src, size_t n) +#if defined(__x86_64__) || defined(__i386__) +static void memcpy_words(void *dst, void *src, size_t n) { - while (n >= sizeof(long)) { - *((long *)dst) = *((long *)src); - dst = ((long *)dst) + 1; - src = ((long *)src) + 1; - n -= sizeof(long); - } - - if (n & 4) { + asm ( + " movl %%edx,%%ecx \n" +#ifdef __x86_64 + " shrl $3,%%ecx \n" + " andl $7,%%edx \n" + " rep movsq \n" + " test $4,%%edx \n" + " jz 1f \n" + " movsl \n" +#else /* __i386__ */ + " shrl $2,%%ecx \n" + " andl $3,%%edx \n" + " rep movsl \n" +#endif + "1: test $2,%%edx \n" + " jz 1f \n" + " movsw \n" + "1: test $1,%%edx \n" + " jz 1f \n" + " movsb \n" + "1: \n" + : : "S" (src), "D" (dst), "d" (n) : "ecx" ); +} +#else +static void memcpy_words(void *dst, void *src, size_t n) +{ + while (n >= sizeof(uint32_t)) { *((uint32_t *)dst) = *((uint32_t *)src); dst = ((uint32_t *)dst) + 1; src = ((uint32_t *)src) + 1; + n -= sizeof(uint32_t); } if (n & 2) { @@ -469,6 +490,7 @@ void memcpy_words(void *dst, void *src, src = ((uint8_t *)src) + 1; } } +#endif void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, int len, int is_write) ++++++ 15418-hvm-usb-windows-crash.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1182786759 -3600 # Node ID 3f76b2f76c2ad605c448a5535780a17cbefd0b05 # Parent 015d9abeacfb39c73c9aa488c2def2f66ab06e2b ioemu: Fix ifdef __x86_64__ Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/target-i386-dm/exec-dm.c +++ xen-3.1-testing/tools/ioemu/target-i386-dm/exec-dm.c @@ -447,7 +447,7 @@ static void memcpy_words(void *dst, void { asm ( " movl %%edx,%%ecx \n" -#ifdef __x86_64 +#ifdef __x86_64__ " shrl $3,%%ecx \n" " andl $7,%%edx \n" " rep movsq \n" ++++++ 15469-hvm-save-restore.patch ++++++ # HG changeset patch # User Tim Deegan <Tim.Deegan@xensource.com> # Date 1183643173 -3600 # Node ID 936aa542053d050c246825993b1213243ea2fb00 # Parent d54d47fc8c6cdea23437476407bec05d85742760 [HVM] Shadow: avoid xen crash if guest uses special memory for pagetables (just crash the guest and don't do any more PTE propagations). Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com> Index: xen-3.1-testing/xen/arch/x86/mm/shadow/common.c =================================================================== --- xen-3.1-testing.orig/xen/arch/x86/mm/shadow/common.c +++ xen-3.1-testing/xen/arch/x86/mm/shadow/common.c @@ -474,7 +474,9 @@ void shadow_promote(struct vcpu *v, mfn_ ASSERT(mfn_valid(gmfn)); /* We should never try to promote a gmfn that has writeable mappings */ - ASSERT(sh_remove_write_access(v, gmfn, 0, 0) == 0); + ASSERT((page->u.inuse.type_info & PGT_type_mask) != PGT_writable_page + || (page->u.inuse.type_info & PGT_count_mask) == 0 + || v->domain->is_shutting_down); /* Is the page already shadowed? */ if ( !test_and_set_bit(_PGC_page_table, &page->count_info) ) @@ -1818,11 +1820,12 @@ int sh_remove_write_access(struct vcpu * perfc_incr(shadow_writeable_bf); hash_foreach(v, callback_mask, callbacks, gmfn); - /* If that didn't catch the mapping, something is very wrong */ + /* If that didn't catch the mapping, then there's some non-pagetable + * mapping -- ioreq page, grant mapping, &c. */ if ( (mfn_to_page(gmfn)->u.inuse.type_info & PGT_count_mask) != 0 ) { - SHADOW_ERROR("can't find all writeable mappings of mfn %lx: " - "%lu left\n", mfn_x(gmfn), + SHADOW_ERROR("can't remove write access to mfn %lx: guest has " + "%lu special-use mappings of it\n", mfn_x(gmfn), (mfn_to_page(gmfn)->u.inuse.type_info&PGT_count_mask)); domain_crash(v->domain); } Index: xen-3.1-testing/xen/arch/x86/mm/shadow/multi.c =================================================================== --- xen-3.1-testing.orig/xen/arch/x86/mm/shadow/multi.c +++ xen-3.1-testing/xen/arch/x86/mm/shadow/multi.c @@ -2719,10 +2719,21 @@ static int sh_page_fault(struct vcpu *v, if ( guest_walk_tables(v, va, &gw, 1) != 0 ) { - SHADOW_PRINTK("malformed guest pagetable!"); + SHADOW_PRINTK("malformed guest pagetable\n"); print_gw(&gw); } + /* It's possible that the guest has put pagetables in memory that it has + * already used for some special purpose (ioreq pages, or granted pages). + * If that happens we'll have killed the guest already but it's still not + * safe to propagate entries out of the guest PT so get out now. */ + if ( unlikely(d->is_shutting_down) ) + { + SHADOW_PRINTK("guest is shutting down\n"); + shadow_unlock(d); + return 0; + } + sh_audit_gw(v, &gw); // We do not look at the gw->l1e, as that will not exist for superpages. ++++++ 15477_dev_attach.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1183729265 -3600 # Node ID 3196b63a7301b264d45b82ac347b1bef854680b3 # Parent f20ee5bc9d28cab8a27e2bd073b72033adb7f9a7 xend: Fix xm block/network-attach command for inactive managed domain Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com> Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -500,9 +500,18 @@ class XendDomainInfo: dev_uuid = self.info.device_add(dev_type, cfg_sxp = dev_config) dev_config_dict = self.info['devices'][dev_uuid][1] log.debug("XendDomainInfo.device_create: %s" % scrub_password(dev_config_dict)) - dev_config_dict['devid'] = devid = \ - self._createDevice(dev_type, dev_config_dict) - self._waitForDevice(dev_type, devid) + + if self.domid is not None: + try: + dev_config_dict['devid'] = devid = \ + self._createDevice(dev_type, dev_config_dict) + self._waitForDevice(dev_type, devid) + except VmError, ex: + raise ex + else: + devid = None + + xen.xend.XendDomain.instance().managed_config_save(self) return self.getDeviceController(dev_type).sxpr(devid) def device_configure(self, dev_sxp, devid = None): ++++++ 15528-hvm-sles9-install.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1184147295 -3600 # Node ID 637ff26be6ff820d185d8cdc5cc344aea6b5c9e2 # Parent ff51ff907f8cce9d10296507e6c4c666cf603876 Make QEMU consistently report write caching support for emulated IDE drives to fix a hang during SLES 9 HVM guest installation. Without this, the SLES 9 installer kernels (32 and 64 bit) were getting inconsistent information from QEMU as to whether the (emulated) IDE drives support write caching (which they do). So part of the kernel thought write caching was enabled (and enabled the usage of barrier writes) and part of it didn't, which triggered a bug in which the same barrier write is submitted over and over again ... Fixed by setting another bit in the WIN_IDENTIFY (IDE drive "identify" command) response to indicate we really, truly support write caching. Signed-off-by: David Lively <dlively@virtualiron.com> Signed-off-by: Ben Guthro <bguthro@virtualiron.com> Index: xen-3.1-testing/tools/ioemu/hw/ide.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/hw/ide.c +++ xen-3.1-testing/tools/ioemu/hw/ide.c @@ -676,7 +676,8 @@ static void ide_identify(IDEState *s) /* 13=flush_cache_ext,12=flush_cache,10=lba48 */ put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10)); put_le16(p + 84, (1 << 14)); - put_le16(p + 85, (1 << 14)); + /* 14=nop 5=write_cache */ + put_le16(p + 85, (1 << 14) | (1 << 5)); /* 13=flush_cache_ext,12=flush_cache,10=lba48 */ put_le16(p + 86, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10)); put_le16(p + 87, (1 << 14)); ++++++ 15587-domid-reset.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:42.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:42.000000000 +0200 @@ -17,7 +17,7 @@ =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -1562,6 +1562,7 @@ class XendDomainInfo: +@@ -1571,6 +1571,7 @@ class XendDomainInfo: log.exception("Removing domain path failed.") self._stateSet(DOM_STATE_HALTED) ++++++ 15595-rtl8139-data-corruption.patch ++++++ Bugzilla #254646 Index: xen-3.0.4-testing/tools/ioemu/hw/rtl8139.c =================================================================== --- xen-3.0.4-testing.orig/tools/ioemu/hw/rtl8139.c +++ xen-3.0.4-testing/tools/ioemu/hw/rtl8139.c @@ -754,7 +754,7 @@ static void rtl8139_write_buffer(RTL8139 int wrapped = MOD2(s->RxBufAddr + size, s->RxBufferSize); /* write packet data */ - if (wrapped && s->RxBufferSize < 65536 && !rtl8139_RxWrap(s)) + if (wrapped && !(s->RxBufferSize < 65536 && rtl8139_RxWrap(s))) { DEBUG_PRINT((">>> RTL8139: rx packet wrapped in buffer at %d\n", size-wrapped)); ++++++ 15596-rtl8139-crc-fix.patch ++++++ # HG changeset patch # User Tim Deegan <Tim.Deegan@xensource.com> # Date 1184592534 -3600 # Node ID d99903a98ad018c9aed180480577f56ce015fd30 # Parent 1158b6115b1413aa5d92ebe5b4ab2640eded40e3 [HVM] Qemu rtl8139: correct rx CRC calculation Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com> Index: xen-3.1-testing/tools/ioemu/hw/rtl8139.c =================================================================== --- xen-3.1-testing.orig/tools/ioemu/hw/rtl8139.c 2007-08-20 15:15:42.000000000 -0600 +++ xen-3.1-testing/tools/ioemu/hw/rtl8139.c 2007-08-20 15:15:43.000000000 -0600 @@ -53,9 +53,8 @@ /* debug RTL8139 card C+ mode only */ //#define DEBUG_RTL8139CP 1 -/* RTL8139 provides frame CRC with received packet, this feature seems to be - ignored by most drivers, disabled by default */ -//#define RTL8139_CALCULATE_RXCRC 1 +/* Calculate CRCs propoerly on Rx packets */ +#define RTL8139_CALCULATE_RXCRC 1 /* Uncomment to enable on-board timer interrupts */ //#define RTL8139_ONBOARD_TIMER 1 @@ -1030,7 +1029,7 @@ /* write checksum */ #if defined (RTL8139_CALCULATE_RXCRC) - val = cpu_to_le32(crc32(~0, buf, size)); + val = cpu_to_le32(crc32(0, buf, size)); #else val = 0; #endif @@ -1136,7 +1135,7 @@ /* write checksum */ #if defined (RTL8139_CALCULATE_RXCRC) - val = cpu_to_le32(crc32(~0, buf, size)); + val = cpu_to_le32(crc32(0, buf, size)); #else val = 0; #endif ++++++ 15645-hvm-save-restore.patch ++++++ # HG changeset patch # User Tim Deegan <Tim.Deegan@xensource.com> # Date 1185447632 -3600 # Node ID 07655ed2fe58ebf883b8a4b5c2dccf15576f4778 # Parent 3ec3e2840a29bb6d4c64b8094248381712370f17 [HVM] Save/restore: don't leak shared-memory segments after HVM live-migrate. Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com> Index: xen-3.1-testing/tools/xcutils/xc_save.c =================================================================== --- xen-3.1-testing.orig/tools/xcutils/xc_save.c +++ xen-3.1-testing/tools/xcutils/xc_save.c @@ -54,8 +54,18 @@ static int suspend(int domid) static char *qemu_active_path; static char *qemu_next_active_path; +static int qemu_shmid = -1; static struct xs_handle *xs; + +/* Mark the shared-memory segment for destruction */ +static void qemu_destroy_buffer(void) +{ + if (qemu_shmid != -1) + shmctl(qemu_shmid, IPC_RMID, NULL); + qemu_shmid = -1; +} + /* Get qemu to change buffers. */ static void qemu_flip_buffer(int domid, int next_active) { @@ -97,22 +107,23 @@ static void * init_qemu_maps(int domid, { key_t key; char key_ascii[17] = {0,}; - int shmid = -1; void *seg; char *path, *p; /* Make a shared-memory segment */ - while (shmid == -1) - { + do { key = rand(); /* No security, just a sequence of numbers */ - shmid = shmget(key, 2 * bitmap_size, + qemu_shmid = shmget(key, 2 * bitmap_size, IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSR); - if (shmid == -1 && errno != EEXIST) + if (qemu_shmid == -1 && errno != EEXIST) errx(1, "can't get shmem to talk to qemu-dm"); - } + } while (qemu_shmid == -1); + + /* Remember to tidy up after ourselves */ + atexit(qemu_destroy_buffer); /* Map it into our address space */ - seg = shmat(shmid, NULL, 0); + seg = shmat(qemu_shmid, NULL, 0); if (seg == (void *) -1) errx(1, "can't map shmem to talk to qemu-dm"); memset(seg, 0, 2 * bitmap_size); ++++++ 15649_xenapi.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:42.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:43.000000000 +0200 @@ -6,10 +6,11 @@ Fix Xen API console methods that use undefined variables. Signed-off-by: Jim Fehlig <jfehlig@novell.com> -diff -r f035c4d9880a -r e63b331d8698 tools/python/xen/xend/XendAPI.py ---- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:04:35 2007 +0100 -+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100 -@@ -2378,11 +2378,13 @@ class XendAPI(object): +Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py +=================================================================== +--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py +@@ -2291,11 +2291,13 @@ class XendAPI(object): return xen_api_success(cons) def console_get_location(self, session, console_ref): ++++++ 15650_xenapi.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:43.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:43.000000000 +0200 @@ -6,10 +6,11 @@ Implement missing Xen API method Console.get_other_config. Signed-off-by: Jim Fehlig <jfehlig@novell.com> -diff -r e63b331d8698 -r 2450743f51b2 tools/python/xen/xend/XendAPI.py ---- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:10 2007 +0100 -+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100 -@@ -2394,6 +2394,12 @@ class XendAPI(object): +Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py +=================================================================== +--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py +@@ -2307,6 +2307,12 @@ class XendAPI(object): vm = xendom.get_vm_with_dev_uuid('console', console_ref) return xen_api_success(vm.get_uuid()) ++++++ 15651_xenapi.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:43.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:43.000000000 +0200 @@ -6,10 +6,11 @@ Implement Xen API method Console.set_other_config. Signed-off-by: Jim Fehlig <jfehlig@novell.com> -diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py ---- a/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:30 2007 +0100 -+++ b/tools/python/xen/xend/XendAPI.py Fri Jul 27 09:06:58 2007 +0100 -@@ -2438,6 +2438,13 @@ class XendAPI(object): +Index: xen-3.1-testing/tools/python/xen/xend/XendAPI.py +=================================================================== +--- xen-3.1-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-3.1-testing/tools/python/xen/xend/XendAPI.py +@@ -2351,6 +2351,13 @@ class XendAPI(object): except XendError, exn: return xen_api_error(['INTERNAL_ERROR', str(exn)]) @@ -23,22 +24,23 @@ # Xen API: Class SR # ---------------------------------------------------------------- SR_attr_ro = ['VDIs', -diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py ---- a/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:30 2007 +0100 -+++ b/tools/python/xen/xend/XendConfig.py Fri Jul 27 09:06:58 2007 +0100 -@@ -128,6 +128,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic', - 'soundhw','stdvga', 'usb', 'usbdevice', 'vnc', +Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py +=================================================================== +--- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py +@@ -124,6 +124,11 @@ XENAPI_PLATFORM_CFG = [ 'acpi', 'apic', 'vncconsole', 'vncdisplay', 'vnclisten', 'vncpasswd', 'vncunused', 'xauthority'] -+ + +# Xen API console 'other_config' keys. +XENAPI_CONSOLE_OTHER_CFG = ['vncunused', 'vncdisplay', 'vnclisten', + 'vncpasswd', 'type', 'display', 'xauthority', + 'keymap'] - ++ # List of XendConfig configuration keys that have no direct equivalent # in the old world. -@@ -1121,9 +1126,7 @@ class XendConfig(dict): + +@@ -1023,9 +1028,7 @@ class XendConfig(dict): # with vfb other_config = {} @@ -49,7 +51,7 @@ if key in dev_info: other_config[key] = dev_info[key] target['devices'][dev_uuid][1]['other_config'] = other_config -@@ -1311,6 +1314,13 @@ class XendConfig(dict): +@@ -1208,6 +1211,13 @@ class XendConfig(dict): for dev_uuid, (dev_type, dev_info) in self['devices'].items(): if dev_uuid == console_uuid: dev_info[key] = value @@ -63,10 +65,11 @@ break def console_get_all(self, protocol): -diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendDomainInfo.py ---- a/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:30 2007 +0100 -+++ b/tools/python/xen/xend/XendDomainInfo.py Fri Jul 27 09:06:58 2007 +0100 -@@ -2633,6 +2633,9 @@ class XendDomainInfo: +Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py +=================================================================== +--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py +@@ -2488,6 +2488,9 @@ class XendDomainInfo: return dev_uuid ++++++ xend_dev_destroy_cleanup.patch -> 15689_dev_destroy_cleanup.patch ++++++ --- arch/i386/xen/xend_dev_destroy_cleanup.patch 2007-08-02 21:09:55.000000000 +0200 +++ /mounts/work_src_done/STABLE/xen/15689_dev_destroy_cleanup.patch 2007-08-18 02:23:17.000000000 +0200 @@ -1,19 +1,19 @@ # HG changeset patch -# User Jim Fehlig <jfehlig@novell.com> -# Date 1186081049 21600 -# Node ID 430ae0d3a333ff4d212df7c2313caa03e8f4dd51 -# Parent 88bb0d305308a2cab31fd8559a6a2719db1ea55a +# User kfraser@localhost.localdomain +# Date 1186391554 -3600 +# Node ID f8d5c509f156cbe3a6a1683f21a75e560e7ba369 +# Parent 92e43b36d211606435587420d08b6b949911ce18 Fix/cleanup destroyDevice code path in xend. When calling destroyDevice code path (e.g. xm block-detach dom devid), allow specifying an integer device id or a device name such as xvdN or -/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching devices -from dom0. Bootloaders may do this to unmount a disk previously -mounted in dom0. +/dev/xvdN. Allowing the /dev/xvdN form is useful when detaching +devices from dom0. Bootloaders may do this to unmount a disk +previously mounted in dom0. -Move examination of device ID format into the DevController, permitting -device controllers to determine a valid device ID instead of higher -level code. +Move examination of device ID format into the DevController, +permitting device controllers to determine a valid device ID instead +of higher level code. Signed-off-by: Jim Fehlig <jfehlig@novell.com> @@ -21,7 +21,7 @@ =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -544,18 +544,8 @@ class XendDomainInfo: +@@ -553,18 +553,8 @@ class XendDomainInfo: self.getDeviceController(devclass).waitForDevices() def destroyDevice(self, deviceClass, devid, force = False): @@ -115,3 +115,84 @@ except ValueError: devid_end = type(devid) is str and devid.split('/')[-1] or None +Index: xen-3.1-testing/tools/security/policies/default-security_policy.xml +=================================================================== +--- /dev/null ++++ xen-3.1-testing/tools/security/policies/default-security_policy.xml +@@ -0,0 +1,30 @@ ++<?xml version="1.0" ?> ++<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd"> ++ <PolicyHeader> ++ <PolicyName>DEFAULT</PolicyName> ++ <Version>1.0</Version> ++ </PolicyHeader> ++ <SimpleTypeEnforcement> ++ <SimpleTypeEnforcementTypes> ++ <Type>SystemManagement</Type> ++ </SimpleTypeEnforcementTypes> ++ </SimpleTypeEnforcement> ++ <ChineseWall> ++ <ChineseWallTypes> ++ <Type>SystemManagement</Type> ++ </ChineseWallTypes> ++ </ChineseWall> ++ <SecurityLabelTemplate> ++ <SubjectLabels bootstrap="SystemManagement"> ++ <VirtualMachineLabel> ++ <Name>SystemManagement</Name> ++ <SimpleTypeEnforcementTypes> ++ <Type>SystemManagement</Type> ++ </SimpleTypeEnforcementTypes> ++ <ChineseWallTypes> ++ <Type/> ++ </ChineseWallTypes> ++ </VirtualMachineLabel> ++ </SubjectLabels> ++ </SecurityLabelTemplate> ++</SecurityPolicyDefinition> +Index: xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml +=================================================================== +--- /dev/null ++++ xen-3.1-testing/tools/security/policies/default-ul-security_policy.xml +@@ -0,0 +1,41 @@ ++<?xml version="1.0" ?> ++<SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd"> ++ <PolicyHeader> ++ <PolicyName>DEFAULT-UL</PolicyName> ++ <Version>1.0</Version> ++ </PolicyHeader> ++ <SimpleTypeEnforcement> ++ <SimpleTypeEnforcementTypes> ++ <Type>SystemManagement</Type> ++ <Type>__UNLABELED__</Type> ++ </SimpleTypeEnforcementTypes> ++ </SimpleTypeEnforcement> ++ <ChineseWall> ++ <ChineseWallTypes> ++ <Type>SystemManagement</Type> ++ </ChineseWallTypes> ++ </ChineseWall> ++ <SecurityLabelTemplate> ++ <SubjectLabels bootstrap="SystemManagement"> ++ <VirtualMachineLabel> ++ <Name>SystemManagement</Name> ++ <SimpleTypeEnforcementTypes> ++ <Type>SystemManagement</Type> ++ <Type>__UNLABELED__</Type> ++ </SimpleTypeEnforcementTypes> ++ <ChineseWallTypes> ++ <Type/> ++ </ChineseWallTypes> ++ </VirtualMachineLabel> ++ <VirtualMachineLabel> ++ <Name>__UNLABELED__</Name> ++ <SimpleTypeEnforcementTypes> ++ <Type>__UNLABELED__</Type> ++ </SimpleTypeEnforcementTypes> ++ <ChineseWallTypes> ++ <Type/> ++ </ChineseWallTypes> ++ </VirtualMachineLabel> ++ </SubjectLabels> ++ </SecurityLabelTemplate> ++</SecurityPolicyDefinition> ++++++ 15691-hvm-save-restore.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1186394937 -3600 # Node ID e1435c1f3382069ca5044808b3233bda8b09d150 # Parent fd20c1333e3ee8f58e879aed79d74a75bc1969e6 hvm: Fix save/restore when callback_via line is routed through a PCI INTx wire. Signed-off-by: Edwin Zhai <edwin.zhai@intel.com> Signed-off-by: Keir Fraser <keir@xensource.com> Index: xen-3.1-testing/xen/arch/x86/hvm/irq.c =================================================================== --- xen-3.1-testing.orig/xen/arch/x86/hvm/irq.c +++ xen-3.1-testing/xen/arch/x86/hvm/irq.c @@ -388,9 +388,33 @@ static void irq_dump(struct domain *d) static int irq_save_pci(struct domain *d, hvm_domain_context_t *h) { struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; + unsigned int asserted, pdev, pintx; + int rc; + + spin_lock(&d->arch.hvm_domain.irq_lock); + + pdev = hvm_irq->callback_via.pci.dev; + pintx = hvm_irq->callback_via.pci.intx; + asserted = (hvm_irq->callback_via_asserted && + (hvm_irq->callback_via_type == HVMIRQ_callback_pci_intx)); + + /* + * Deassert virtual interrupt via PCI INTx line. The virtual interrupt + * status is not save/restored, so the INTx line must be deasserted in + * the restore context. + */ + if ( asserted ) + __hvm_pci_intx_deassert(d, pdev, pintx); /* Save PCI IRQ lines */ - return ( hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx) ); + rc = hvm_save_entry(PCI_IRQ, 0, h, &hvm_irq->pci_intx); + + if ( asserted ) + __hvm_pci_intx_assert(d, pdev, pintx); + + spin_unlock(&d->arch.hvm_domain.irq_lock); + + return rc; } static int irq_save_isa(struct domain *d, hvm_domain_context_t *h) ++++++ 15716_dev_detach.patch ++++++ # HG changeset patch # User kfraser@localhost.localdomain # Date 1186672901 -3600 # Node ID 95f90f24f3b1f33f911d3e9a01cb1d7bce5b29e0 # Parent f0298301ba8b34ac3e5470cf953a3591f7730d26 Fix xm block/network-detach command. - To remove device info, it waits for the backend path of the device to be removed. - It removes device info from domain info. - It saves domain info to the config.sxp of the managed domain. Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com> Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -552,9 +552,64 @@ class XendDomainInfo: for devclass in XendDevices.valid_devices(): self.getDeviceController(devclass).waitForDevices() - def destroyDevice(self, deviceClass, devid, force = False): - log.debug("dev = %s", devid) - return self.getDeviceController(deviceClass).destroyDevice(devid, force) + def destroyDevice(self, deviceClass, devid, force = False, rm_cfg = False): + log.debug("XendDomainInfo.destroyDevice: deviceClass = %s, device = %s", + deviceClass, devid) + + if rm_cfg: + # Convert devid to device number. A device number is + # needed to remove its configuration. + dev = self.getDeviceController(deviceClass).convertToDeviceNumber(devid) + + # Save current sxprs. A device number and a backend + # path are needed to remove its configuration but sxprs + # do not have those after calling destroyDevice. + sxprs = self.getDeviceSxprs(deviceClass) + + rc = None + if self.domid is not None: + rc = self.getDeviceController(deviceClass).destroyDevice(devid, force) + if not force and rm_cfg: + # The backend path, other than the device itself, + # has to be passed because its accompanied frontend + # path may be void until its removal is actually + # issued. It is probable because destroyDevice is + # issued first. + for dev_num, dev_info in sxprs: + dev_num = int(dev_num) + if dev_num == dev: + for x in dev_info: + if x[0] == 'backend': + backend = x[1] + break + break + self._waitForDevice_destroy(deviceClass, devid, backend) + + if rm_cfg: + if deviceClass == 'vif': + if self.domid is not None: + for dev_num, dev_info in sxprs: + dev_num = int(dev_num) + if dev_num == dev: + for x in dev_info: + if x[0] == 'mac': + mac = x[1] + break + break + dev_info = self.getDeviceInfo_vif(mac) + else: + _, dev_info = sxprs[dev] + else: # 'vbd' or 'tap' + dev_info = self.getDeviceInfo_vbd(dev) + if dev_info is None: + return rc + + dev_uuid = sxp.child_value(dev_info, 'uuid') + del self.info['devices'][dev_uuid] + self.info['%s_refs' % deviceClass].remove(dev_uuid) + xen.xend.XendDomain.instance().managed_config_save(self) + + return rc def getDeviceSxprs(self, deviceClass): if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED): @@ -568,6 +623,23 @@ class XendDomainInfo: dev_num += 1 return sxprs + def getDeviceInfo_vif(self, mac): + for dev_type, dev_info in self.info.all_devices_sxpr(): + if dev_type != 'vif': + continue + if mac == sxp.child_value(dev_info, 'mac'): + return dev_info + + def getDeviceInfo_vbd(self, devid): + for dev_type, dev_info in self.info.all_devices_sxpr(): + if dev_type != 'vbd' and dev_type != 'tap': + continue + dev = sxp.child_value(dev_info, 'dev') + dev = dev.split(':')[0] + dev = self.getDeviceController(dev_type).convertToDeviceNumber(dev) + if devid == dev: + return dev_info + def setMemoryTarget(self, target): """Set the memory target of this domain. @@ -1296,6 +1368,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) + def _waitForDevice_destroy(self, deviceClass, devid, backpath): + return self.getDeviceController(deviceClass).waitForDevice_destroy( + devid, backpath) + def _reconfigureDevice(self, deviceClass, devid, devconfig): return self.getDeviceController(deviceClass).reconfigureDevice( devid, devconfig) Index: xen-3.1-testing/tools/python/xen/xend/server/DevController.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/server/DevController.py +++ xen-3.1-testing/tools/python/xen/xend/server/DevController.py @@ -28,17 +28,19 @@ from xen.xend.xenstore.xswatch import xs import os -DEVICE_CREATE_TIMEOUT = 100 +DEVICE_CREATE_TIMEOUT = 100 +DEVICE_DESTROY_TIMEOUT = 100 HOTPLUG_STATUS_NODE = "hotplug-status" HOTPLUG_ERROR_NODE = "hotplug-error" HOTPLUG_STATUS_ERROR = "error" HOTPLUG_STATUS_BUSY = "busy" -Connected = 1 -Error = 2 -Missing = 3 -Timeout = 4 -Busy = 5 +Connected = 1 +Error = 2 +Missing = 3 +Timeout = 4 +Busy = 5 +Disconnected = 6 xenbusState = { 'Unknown' : 0, @@ -185,6 +187,18 @@ class DevController: (devid, self.deviceClass, err)) + def waitForDevice_destroy(self, devid, backpath): + log.debug("Waiting for %s - destroyDevice.", devid) + + if not self.hotplug: + return + + status = self.waitForBackend_destroy(backpath) + + if status == Timeout: + raise VmError("Device %s (%s) could not be disconnected. " % + (devid, self.deviceClass)) + def reconfigureDevice(self, devid, config): """Reconfigure the specified device. @@ -209,12 +223,7 @@ class DevController: here. """ - try: - dev = int(devid) - except ValueError: - # Does devid contain devicetype/deviceid? - # Propogate exception if unable to find an integer devid - dev = int(type(devid) is str and devid.split('/')[-1] or None) + dev = self.convertToDeviceNumber(devid) # Modify online status /before/ updating state (latter is watched by # drivers, so this ordering avoids a race). @@ -283,6 +292,15 @@ class DevController: all_configs[devid] = config_dict return all_configs + + def convertToDeviceNumber(self, devid): + try: + return int(devid) + except ValueError: + # Does devid contain devicetype/deviceid? + # Propogate exception if unable to find an integer devid + return int(type(devid) is str and devid.split('/')[-1] or None) + ## protected: def getDeviceDetails(self, config): @@ -511,6 +529,19 @@ class DevController: return (Missing, None) + def waitForBackend_destroy(self, backpath): + + statusPath = backpath + '/' + HOTPLUG_STATUS_NODE + ev = Event() + result = { 'status': Timeout } + + xswatch(statusPath, deviceDestroyCallback, ev, result) + + ev.wait(DEVICE_DESTROY_TIMEOUT) + + return result['status'] + + def backendPath(self, backdom, devid): """Construct backend path given the backend domain and device id. @@ -559,3 +590,19 @@ def hotplugStatusCallback(statusPath, ev ev.set() return 0 + + +def deviceDestroyCallback(statusPath, ev, result): + log.debug("deviceDestroyCallback %s.", statusPath) + + status = xstransact.Read(statusPath) + + if status is None: + result['status'] = Disconnected + else: + return 1 + + log.debug("deviceDestroyCallback %d.", result['status']) + + ev.set() + return 0 Index: xen-3.1-testing/tools/python/xen/xend/server/blkif.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/server/blkif.py +++ xen-3.1-testing/tools/python/xen/xend/server/blkif.py @@ -148,11 +148,23 @@ class BlkifController(DevController): try: DevController.destroyDevice(self, devid, force) except ValueError: - devid_end = type(devid) is str and devid.split('/')[-1] or None + dev = self.convertToDeviceNumber(devid) for i in self.deviceIDs(): - d = self.readBackend(i, 'dev') - if d == devid or (devid_end and d == devid_end): + if i == dev: DevController.destroyDevice(self, i, force) return raise VmError("Device %s not connected" % devid) + + def convertToDeviceNumber(self, devid): + try: + dev = int(devid) + except ValueError: + if type(devid) is not str: + raise VmError("devid %s is wrong type" % str(devid)) + try: + dev = devid.split('/')[-1] + dev = int(dev) + except ValueError: + dev = blkif.blkdev_name_to_number(dev) + return dev Index: xen-3.1-testing/tools/python/xen/xm/main.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xm/main.py +++ xen-3.1-testing/tools/python/xen/xm/main.py @@ -2129,6 +2129,7 @@ def xm_network_attach(args): def detach(args, command, deviceClass): arg_check(args, command, 2, 3) + rm_cfg = True dom = args[0] dev = args[1] try: @@ -2139,7 +2140,7 @@ def detach(args, command, deviceClass): except IndexError: force = None - server.xend.domain.destroyDevice(dom, deviceClass, dev, force) + server.xend.domain.destroyDevice(dom, deviceClass, dev, force, rm_cfg) def xm_block_detach(args): ++++++ block-iscsi ++++++ --- arch/i386/xen/block-iscsi 2007-05-11 22:07:28.000000000 +0200 +++ /mounts/work_src_done/STABLE/xen/block-iscsi 2007-08-30 00:12:40.000000000 +0200 @@ -43,7 +43,7 @@ if ! test -e $session; then return; fi if test $1 = `cat $session/targetname`; then sess_lun_to_bdev $session $lun - echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2 + #echo "fs: $1[$lun] ($cnt) -> $dev" 1>&2 return fi done @@ -58,7 +58,7 @@ for d in $dev; do if test "$d" = "$1"; then tgt=`cat $session/targetname` - echo "fsr: $2 -> $tgt ($cnt)" 1>&2 + #echo "fsr: $2 -> $tgt ($cnt)" 1>&2 return fi done @@ -72,16 +72,16 @@ { /etc/init.d/open-iscsi start >/dev/null 2>&1; sleep 1; } # list of targets on node par=`xenstore-read $XENBUS_PATH/params` || true - TGTID=$par; TGTID=${TGTID//@/:} + TGTID=$par; TGTID=${TGTID//@/:}; TGTID=${TGTID//#/,} LUN=${TGTID##*,}; TGTID=${TGTID%,*} if test $LUN = $TGTID; then unset LUN; fi #echo "add $TGTID lun $LUN" 1>&2 - while read rec port uuid; do + while read port uuid; do if test $uuid = $TGTID; then - rec=${rec%]}; rec=${rec#[} find_sdev $TGTID $LUN if test -z "$dev"; then - iscsiadm -m node -r $rec -l || exit 2 + #echo iscsiadm -m node -T $uuid -p $port -l 1>&2 + iscsiadm -m node -T $uuid -p $port -l || exit 2 usleep 100000 find_sdev $TGTID $LUN fi @@ -96,13 +96,12 @@ node=`xenstore-read $XENBUS_PATH/node` || true dev=$node; dev=${dev#/dev/} find_sdev_rev $dev - #echo $tgt + #echo "remove $dev:$tgt" 1>&2 if test -x /sbin/blockdev -a -n "$node"; then blockdev --flushbufs $node; fi test -z "$tgt" && exit 2 - while read rec port uuid; do + while read port uuid; do if test $uuid = $tgt; then - rec=${rec%]}; rec=${rec#[} - iscsiadm -m node -r $rec -u + iscsiadm -m node -T $uuid -p $port -u exit 0 fi done < <(iscsiadm -m node) ++++++ dmi-table.patch ++++++ Index: 2007-05-14/xen/arch/x86/dmi_scan.c =================================================================== --- 2007-05-14.orig/xen/arch/x86/dmi_scan.c 2007-08-17 17:13:44.000000000 +0200 +++ 2007-05-14/xen/arch/x86/dmi_scan.c 2007-08-16 16:44:35.000000000 +0200 @@ -102,7 +102,7 @@ inline static int __init dmi_checksum(u8 return (sum==0); } -static int __init dmi_iterate(void (*decode)(struct dmi_header *)) +static int __init dmi_iterate(void (*decode)(struct dmi_header *), u32 *pbase) { u8 buf[15]; char __iomem *p, *q; @@ -123,6 +123,11 @@ static int __init dmi_iterate(void (*dec u16 len=buf[7]<<8|buf[6]; u32 base=buf[11]<<24|buf[10]<<16|buf[9]<<8|buf[8]; + if (pbase) + *pbase = base; + if (!decode) + return len; + /* * DMI version 0.0 means that the real version is taken from * the SMBIOS version, which we don't know at this point. @@ -436,13 +441,27 @@ static void __init dmi_decode(struct dmi void __init dmi_scan_machine(void) { - int err = dmi_iterate(dmi_decode); + int err = dmi_iterate(dmi_decode, NULL); if(err == 0) dmi_check_system(dmi_blacklist); else printk(KERN_INFO "DMI not present.\n"); } +int __init dmi_get_table(u32*pbase, u32*plen) +{ + int rc = dmi_iterate(NULL, pbase); + + if (rc < 0) { + *pbase = *plen = 0; + return rc; + } + + *plen = rc; + + return 0; +} + /** * dmi_check_system - check system DMI data Index: 2007-05-14/xen/arch/x86/setup.c =================================================================== --- 2007-05-14.orig/xen/arch/x86/setup.c 2007-08-17 17:13:44.000000000 +0200 +++ 2007-05-14/xen/arch/x86/setup.c 2007-08-20 11:59:15.000000000 +0200 @@ -35,6 +35,7 @@ #include <xen/kexec.h> extern void dmi_scan_machine(void); +extern int dmi_get_table(u32 *pbase, u32 *plen); extern void generic_apic_probe(void); extern void numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn); @@ -301,8 +302,9 @@ void __init __start_xen(multiboot_info_t unsigned long _policy_len = 0; module_t *mod = (module_t *)__va(mbi->mods_addr); unsigned long nr_pages, modules_length; - paddr_t s, e; + u64 s, e; int i, e820_warn = 0, e820_raw_nr = 0, bytes = 0; + u32 dmi_table_start, dmi_table_len; struct ns16550_defaults ns16550 = { .data_bits = 8, .parity = 'n', @@ -361,7 +363,7 @@ void __init __start_xen(multiboot_info_t if ( mbi->flags & MBI_MEMMAP ) { - while ( bytes < mbi->mmap_length ) + while ( bytes < mbi->mmap_length && e820_raw_nr < E820MAX ) { memory_map_t *map = __va(mbi->mmap_addr + bytes); @@ -411,15 +413,52 @@ void __init __start_xen(multiboot_info_t printk("WARNING: Buggy e820 map detected and fixed " "(truncated length fields).\n"); + dmi_get_table(&dmi_table_start, &dmi_table_len); + e820_warn = 0; + /* Ensure that all E820 RAM regions are page-aligned and -sized. */ for ( i = 0; i < e820_raw_nr; i++ ) { - uint64_t s, e; if ( e820_raw[i].type != E820_RAM ) continue; s = PFN_UP(e820_raw[i].addr); e = PFN_DOWN(e820_raw[i].addr + e820_raw[i].size); e820_raw[i].size = 0; /* discarded later */ + + /* + * Dom0 will want to map the DMI table, yet some BIOSes put it + * in RAM regions - forcibly cut off the portion that overlaps. + */ + if ( s < e && + dmi_table_len > 0 && + (e << PAGE_SHIFT) > dmi_table_start && + (s << PAGE_SHIFT) < (u64)dmi_table_start + dmi_table_len ) + { + u64 dmi_table_end = (u64)dmi_table_start + dmi_table_len; + + if ( (s << PAGE_SHIFT) >= dmi_table_start && + (e << PAGE_SHIFT) <= dmi_table_end ) + e = s; + else if ( (s << PAGE_SHIFT) >= dmi_table_start ) + s = PFN_UP(dmi_table_end); + else if ( (e << PAGE_SHIFT) <= dmi_table_end ) + e = PFN_DOWN(dmi_table_start); + else if ( e820_raw_nr < E820MAX ) + { + e820_raw[e820_raw_nr].addr = dmi_table_end; + e820_raw[e820_raw_nr].size = (e << PAGE_SHIFT) - dmi_table_end; + e820_raw[e820_raw_nr].type = E820_RAM; + ++e820_raw_nr; + e = PFN_DOWN(dmi_table_start); + } + else if ( dmi_table_start - (s << PAGE_SHIFT) >= + (e << PAGE_SHIFT) - dmi_table_end ) + e = PFN_DOWN(dmi_table_start); + else + s = PFN_UP(dmi_table_end); + e820_warn = 1; + } + if ( s < e ) { e820_raw[i].addr = s << PAGE_SHIFT; @@ -427,6 +466,19 @@ void __init __start_xen(multiboot_info_t } } + if ( e820_warn ) + { + printk("WARNING: DMI table located in E820 RAM " + "(fixed by shrinking/splitting RAM region).\n"); + if ( e820_raw_nr < E820MAX ) + { + e820_raw[e820_raw_nr].addr = dmi_table_start; + e820_raw[e820_raw_nr].size = dmi_table_len; + e820_raw[e820_raw_nr].type = E820_RESERVED; + ++e820_raw_nr; + } + } + /* Sanitise the raw E820 map to produce a final clean version. */ max_page = init_e820(e820_raw, &e820_raw_nr); ++++++ fix_15716.patch ++++++ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -601,6 +601,9 @@ class XendDomainInfo: _, dev_info = sxprs[dev] else: # 'vbd' or 'tap' dev_info = self.getDeviceInfo_vbd(dev) + # To remove the UUID of the device from refs, + # deviceClass must be always 'vbd'. + deviceClass = 'vbd' if dev_info is None: return rc ++++++ keymap_nl-be.patch ++++++ Index: xen-3.0.4-testing/tools/ioemu/keymaps/nl-be =================================================================== --- xen-3.0.4-testing.orig/tools/ioemu/keymaps/nl-be 2006-12-14 14:49:55.000000000 -0700 +++ xen-3.0.4-testing/tools/ioemu/keymaps/nl-be 2007-08-30 07:46:28.000000000 -0600 @@ -1,3 +1,69 @@ # Dutch (Belgium) -map 0x813 include common +map 0x813 +ampersand 0x02 +1 0x02 shift +bar 0x02 altgr +eacute 0x03 +2 0x03 shift +at 0x03 altgr +quotedbl 0x04 +3 0x04 shift +numbersign 0x04 altgr +apostrophe 0x05 +4 0x05 shift +parenleft 0x06 +5 0x06 shift +section 0x07 +6 0x07 shift +circumflex 0x07 altgr +egrave 0x08 +7 0x08 shift +exclam 0x09 +8 0x09 shift +bracketleft 0x09 altgr +ccedilla 0x0a +9 0x0a shift +braceleft 0x0a altgr +agrave 0x0b +0 0x0b shift +braceright 0x0b altgr +parenright 0x0c +degree 0x0c shift +minus 0x0d +underscore 0x0d shift +a 0x10 addupper +z 0x11 addupper +EuroSign 0x12 altgr +dead_circumflex 0x1a +dead_diaeresis 0x1a shift +bracketleft 0x1a altgr +dollar 0x1b +asterisk 0x1b shift +bracketright 0x1b altgr +q 0x1e addupper +m 0x27 addupper +ugrave 0x28 +percent 0x28 shift +dead_acute 0x28 altgr +twosuperior 0x29 +threesuperior 0x29 shift +mu 0x2b +sterling 0x2b shift +dead_grave 0x2b altgr +w 0x2c addupper +comma 0x32 +question 0x32 shift +semicolon 0x33 +period 0x33 shift +colon 0x34 +slash 0x34 shift +periodcentered 0x34 altgr +equal 0x35 +plus 0x35 shift +tilde 0x35 altgr +dead_tilde 0x35 shift altgr +less 0x56 +greater 0x56 shift +backslash 0x56 altgr + ++++++ pci-passthru-reboot-fix.patch ++++++ Index: xen-3.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendConfig.py +++ xen-3.1-testing/tools/python/xen/xend/XendConfig.py @@ -1338,7 +1338,7 @@ class XendConfig(dict): for dev_uuid in ordered_refs: dev_type, dev_info = self['devices'][dev_uuid] if dev_type == 'pci': # special case for pci devices - sxpr = [['uuid', dev_info['uuid']]] + sxpr = ['pci', ['uuid', dev_info['uuid']]] for pci_dev_info in dev_info['devs']: pci_dev_sxpr = ['dev'] for opt, val in pci_dev_info.items(): ++++++ xenapi-console-protocol.patch ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:48.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:48.000000000 +0200 @@ -2,7 +2,7 @@ =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2349,6 +2349,14 @@ class XendDomainInfo: +@@ -2427,6 +2427,14 @@ class XendDomainInfo: if not config.has_key('backend'): config['backend'] = "00000000-0000-0000-0000-000000000000" ++++++ xen-disable-qemu-monitor.diff ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:48.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:48.000000000 +0200 @@ -5,10 +5,10 @@ commands that can read/write dom0's state. -Index: xen-unstable/tools/ioemu/monitor.c +Index: xen-3.1-testing/tools/ioemu/monitor.c =================================================================== ---- xen-unstable.orig/tools/ioemu/monitor.c -+++ xen-unstable/tools/ioemu/monitor.c +--- xen-3.1-testing.orig/tools/ioemu/monitor.c ++++ xen-3.1-testing/tools/ioemu/monitor.c @@ -1158,6 +1158,7 @@ static term_cmd_t term_cmds[] = { "", "commit changes to the disk images (if -snapshot is used)" }, { "info", "s?", do_info, ++++++ xen-domUloader.diff ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:48.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:48.000000000 +0200 @@ -10,7 +10,7 @@ import shlex from xen.xend import sxp -@@ -187,3 +188,14 @@ def bootloader_tidy(dom): +@@ -185,3 +186,14 @@ def bootloader_tidy(dom): os.kill(pid, signal.SIGKILL) @@ -38,7 +38,7 @@ from xen.xend.XendError import XendError, VmError from xen.xend.XendDevices import XendDevices from xen.xend.XendTask import XendTask -@@ -1781,8 +1781,11 @@ class XendDomainInfo: +@@ -1859,8 +1859,11 @@ class XendDomainInfo: blexec = osdep.pygrub_path blcfg = None ++++++ xen-max-free-mem.diff ++++++ --- /var/tmp/diff_new_pack.W29734/_old 2007-08-31 16:04:48.000000000 +0200 +++ /var/tmp/diff_new_pack.W29734/_new 2007-08-31 16:04:48.000000000 +0200 @@ -90,8 +90,8 @@ =================================================================== --- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -570,6 +570,27 @@ class XendDomainInfo: - return sxprs +@@ -644,6 +644,27 @@ class XendDomainInfo: + return dev_info + def capAndSetMemoryTarget(self, target): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org