diff --git a/15054-hvm-save-restore.patch b/15054-hvm-save-restore.patch new file mode 100644 index 0000000..84934ce --- /dev/null +++ b/15054-hvm-save-restore.patch @@ -0,0 +1,22 @@ +# HG changeset patch +# User Steven Hand +# Date 1179152192 -3600 +# Node ID 9c2a616722da143f8abcd0eabb45159341f3cce0 +# Parent 3ecf516896719b667833183a4aa87975824b931b +HVM save/restore: handle larger domain ids. + +Signed-off-by: Steven Hand + +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); diff --git a/15128_xend_dev_disconnect.patch b/15128_xend_dev_disconnect.patch new file mode 100644 index 0000000..6c3f242 --- /dev/null +++ b/15128_xend_dev_disconnect.patch @@ -0,0 +1,25 @@ +# HG changeset patch +# User Steven Hand +# 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 + +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) diff --git a/15152-save-restore-fix-cpu-affinity.patch b/15152-save-restore-fix-cpu-affinity.patch new file mode 100644 index 0000000..59e0c36 --- /dev/null +++ b/15152-save-restore-fix-cpu-affinity.patch @@ -0,0 +1,92 @@ +# 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 + +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]) diff --git a/15153_xend_dom_teardown.patch b/15153_xend_dom_teardown.patch new file mode 100644 index 0000000..f39e009 --- /dev/null +++ b/15153_xend_dom_teardown.patch @@ -0,0 +1,44 @@ +# 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 + +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 diff --git a/15168-check-dup-domians.patch b/15168-check-dup-domians.patch index a4f4de4..606b883 100644 --- a/15168-check-dup-domians.patch +++ b/15168-check-dup-domians.patch @@ -10,7 +10,7 @@ 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 -@@ -2057,7 +2057,7 @@ class XendDomainInfo: +@@ -2069,7 +2069,7 @@ class XendDomainInfo: raise VmError('Invalid VM Name') dom = XendDomain.instance().domain_lookup_nr(name) diff --git a/15217-hvm-save-restore.patch b/15217-hvm-save-restore.patch new file mode 100644 index 0000000..4d2a1a8 --- /dev/null +++ b/15217-hvm-save-restore.patch @@ -0,0 +1,31 @@ +# HG changeset patch +# User Tim Deegan +# 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 + +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. */ diff --git a/15228-hvm-usb-windows-crash.patch b/15228-hvm-usb-windows-crash.patch new file mode 100644 index 0000000..c64cbff --- /dev/null +++ b/15228-hvm-usb-windows-crash.patch @@ -0,0 +1,74 @@ +# 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 + +Update to copy 'longword'-sized atoms. + +Signed-off-by: Keir Fraser + +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); diff --git a/15230-hvm-usb-windows-crash.patch b/15230-hvm-usb-windows-crash.patch new file mode 100644 index 0000000..04ee232 --- /dev/null +++ b/15230-hvm-usb-windows-crash.patch @@ -0,0 +1,55 @@ +# 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 +Signed-off-by: Keir Fraser + +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, diff --git a/15234-hvm-usb-windows-crash.patch b/15234-hvm-usb-windows-crash.patch new file mode 100644 index 0000000..fcaca2a --- /dev/null +++ b/15234-hvm-usb-windows-crash.patch @@ -0,0 +1,21 @@ +# HG changeset patch +# User kfraser@localhost.localdomain +# Date 1181211324 -3600 +# Node ID 1cae82505e9e11bcf47f0857917cd20b2d0bad26 +# Parent 3a413f011b8f5dc53825d6882cdf95d47a4212b1 +ioemu: Tiny indentation fix. +Signed-off-by: Keir Fraser + +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); diff --git a/15257-hvm-save-restore.patch b/15257-hvm-save-restore.patch new file mode 100644 index 0000000..513d00b --- /dev/null +++ b/15257-hvm-save-restore.patch @@ -0,0 +1,21 @@ +# HG changeset patch +# User Tim Deegan +# Date 1181570210 -3600 +# Node ID ed254cf78f7ca758539ba3314932fbbd808807d2 +# Parent 2c8c6ca1296b82e31bb0a50fcf9f63d0bfa11176 +[QEMU] Fix up ioemu timer save/restore after version changes. +Signed-off-by: Tim Deegan + +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; diff --git a/15277-hvm-intel2amd-windows-migrate.patch b/15277-hvm-intel2amd-windows-migrate.patch new file mode 100644 index 0000000..c51f663 --- /dev/null +++ b/15277-hvm-intel2amd-windows-migrate.patch @@ -0,0 +1,51 @@ +# 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 + +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) diff --git a/15383-hvm-usb-windows-crash.patch b/15383-hvm-usb-windows-crash.patch new file mode 100644 index 0000000..107b644 --- /dev/null +++ b/15383-hvm-usb-windows-crash.patch @@ -0,0 +1,72 @@ +# 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 + +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) diff --git a/15418-hvm-usb-windows-crash.patch b/15418-hvm-usb-windows-crash.patch new file mode 100644 index 0000000..ccd0cd9 --- /dev/null +++ b/15418-hvm-usb-windows-crash.patch @@ -0,0 +1,21 @@ +# 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 + +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" diff --git a/15469-hvm-save-restore.patch b/15469-hvm-save-restore.patch new file mode 100644 index 0000000..4669358 --- /dev/null +++ b/15469-hvm-save-restore.patch @@ -0,0 +1,67 @@ +# HG changeset patch +# User Tim Deegan +# 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 + +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. diff --git a/15477_dev_attach.patch b/15477_dev_attach.patch new file mode 100644 index 0000000..dc76672 --- /dev/null +++ b/15477_dev_attach.patch @@ -0,0 +1,34 @@ +# 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 + +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): diff --git a/15528-hvm-sles9-install.patch b/15528-hvm-sles9-install.patch new file mode 100644 index 0000000..ba2cc20 --- /dev/null +++ b/15528-hvm-sles9-install.patch @@ -0,0 +1,35 @@ +# 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 +Signed-off-by: Ben Guthro + +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)); diff --git a/15587-domid-reset.patch b/15587-domid-reset.patch index be93bcc..f64cd9b 100644 --- a/15587-domid-reset.patch +++ b/15587-domid-reset.patch @@ -17,7 +17,7 @@ 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 -@@ -1562,6 +1562,7 @@ class XendDomainInfo: +@@ -1571,6 +1571,7 @@ class XendDomainInfo: log.exception("Removing domain path failed.") self._stateSet(DOM_STATE_HALTED) diff --git a/rtl8139-data-corruption.patch b/15595-rtl8139-data-corruption.patch similarity index 100% rename from rtl8139-data-corruption.patch rename to 15595-rtl8139-data-corruption.patch diff --git a/15596-rtl8139-crc-fix.patch b/15596-rtl8139-crc-fix.patch new file mode 100644 index 0000000..f0d9ac0 --- /dev/null +++ b/15596-rtl8139-crc-fix.patch @@ -0,0 +1,42 @@ +# HG changeset patch +# User Tim Deegan +# Date 1184592534 -3600 +# Node ID d99903a98ad018c9aed180480577f56ce015fd30 +# Parent 1158b6115b1413aa5d92ebe5b4ab2640eded40e3 +[HVM] Qemu rtl8139: correct rx CRC calculation +Signed-off-by: Tim Deegan + +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 diff --git a/15645-hvm-save-restore.patch b/15645-hvm-save-restore.patch new file mode 100644 index 0000000..c02a4e6 --- /dev/null +++ b/15645-hvm-save-restore.patch @@ -0,0 +1,62 @@ +# HG changeset patch +# User Tim Deegan +# 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 + +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); diff --git a/15649_xenapi.patch b/15649_xenapi.patch index f2599ee..61c97be 100644 --- a/15649_xenapi.patch +++ b/15649_xenapi.patch @@ -6,10 +6,11 @@ Fix Xen API console methods that use undefined variables. Signed-off-by: Jim Fehlig -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): diff --git a/15650_xenapi.patch b/15650_xenapi.patch index 10fc36f..6c58946 100644 --- a/15650_xenapi.patch +++ b/15650_xenapi.patch @@ -6,10 +6,11 @@ Implement missing Xen API method Console.get_other_config. Signed-off-by: Jim Fehlig -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()) diff --git a/15651_xenapi.patch b/15651_xenapi.patch index a93f4e9..fb40483 100644 --- a/15651_xenapi.patch +++ b/15651_xenapi.patch @@ -6,10 +6,11 @@ Implement Xen API method Console.set_other_config. Signed-off-by: Jim Fehlig -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 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendAPI.py # 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 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py 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 @@ diff -r 2450743f51b2 -r 5682f899c7ae tools/python/xen/xend/XendConfig.py 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 diff --git a/xend_dev_destroy_cleanup.patch b/15689_dev_destroy_cleanup.patch similarity index 60% rename from xend_dev_destroy_cleanup.patch rename to 15689_dev_destroy_cleanup.patch index 3615db8..cc8e510 100644 --- a/xend_dev_destroy_cleanup.patch +++ b/15689_dev_destroy_cleanup.patch @@ -1,19 +1,19 @@ # HG changeset patch -# User Jim Fehlig -# 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 @@ -21,7 +21,7 @@ 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 -@@ -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 @@ Index: xen-3.1-testing/tools/python/xen/xend/server/blkif.py 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 @@ ++ ++ ++ ++ DEFAULT ++ 1.0 ++ ++ ++ ++ SystemManagement ++ ++ ++ ++ ++ SystemManagement ++ ++ ++ ++ ++ ++ SystemManagement ++ ++ SystemManagement ++ ++ ++ ++ ++ ++ ++ ++ +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 @@ ++ ++ ++ ++ DEFAULT-UL ++ 1.0 ++ ++ ++ ++ SystemManagement ++ __UNLABELED__ ++ ++ ++ ++ ++ SystemManagement ++ ++ ++ ++ ++ ++ SystemManagement ++ ++ SystemManagement ++ __UNLABELED__ ++ ++ ++ ++ ++ ++ ++ __UNLABELED__ ++ ++ __UNLABELED__ ++ ++ ++ ++ ++ ++ ++ ++ diff --git a/15691-hvm-save-restore.patch b/15691-hvm-save-restore.patch new file mode 100644 index 0000000..fac9a6a --- /dev/null +++ b/15691-hvm-save-restore.patch @@ -0,0 +1,49 @@ +# 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 +Signed-off-by: Keir Fraser + +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) diff --git a/15716_dev_detach.patch b/15716_dev_detach.patch new file mode 100644 index 0000000..4087ac6 --- /dev/null +++ b/15716_dev_detach.patch @@ -0,0 +1,292 @@ +# 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 + +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): diff --git a/block-iscsi b/block-iscsi index 31b14d8..a1f4194 100644 --- a/block-iscsi +++ b/block-iscsi @@ -43,7 +43,7 @@ find_sdev() 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 @@ find_sdev_rev() 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 @@ case "$command" in { /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 @@ case "$command" in 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) diff --git a/dmi-table.patch b/dmi-table.patch new file mode 100644 index 0000000..ec58d0f --- /dev/null +++ b/dmi-table.patch @@ -0,0 +1,160 @@ +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 + + 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); + diff --git a/fix_15716.patch b/fix_15716.patch new file mode 100644 index 0000000..64f6323 --- /dev/null +++ b/fix_15716.patch @@ -0,0 +1,14 @@ +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 + diff --git a/keymap_nl-be.patch b/keymap_nl-be.patch new file mode 100644 index 0000000..1eb89b5 --- /dev/null +++ b/keymap_nl-be.patch @@ -0,0 +1,75 @@ +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 ++ diff --git a/pci-passthru-reboot-fix.patch b/pci-passthru-reboot-fix.patch new file mode 100644 index 0000000..3ec47b0 --- /dev/null +++ b/pci-passthru-reboot-fix.patch @@ -0,0 +1,13 @@ +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(): diff --git a/xen-disable-qemu-monitor.diff b/xen-disable-qemu-monitor.diff index c84fc94..7f1faa9 100644 --- a/xen-disable-qemu-monitor.diff +++ b/xen-disable-qemu-monitor.diff @@ -5,10 +5,10 @@ the "sendkey" command, among other useful things), remove all console 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, diff --git a/xen-domUloader.diff b/xen-domUloader.diff index c5e2e88..982b336 100644 --- a/xen-domUloader.diff +++ b/xen-domUloader.diff @@ -10,7 +10,7 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendBootloader.py 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 @@ Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py from xen.xend.XendError import XendError, VmError from xen.xend.XendDevices import XendDevices from xen.xend.XendTask import XendTask -@@ -1781,8 +1781,11 @@ class XendDomainInfo: +@@ -1859,8 +1859,11 @@ class XendDomainInfo: blexec = osdep.pygrub_path blcfg = None diff --git a/xen-max-free-mem.diff b/xen-max-free-mem.diff index e4f3184..1e07145 100644 --- a/xen-max-free-mem.diff +++ b/xen-max-free-mem.diff @@ -90,8 +90,8 @@ 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 -@@ -570,6 +570,27 @@ class XendDomainInfo: - return sxprs +@@ -644,6 +644,27 @@ class XendDomainInfo: + return dev_info + def capAndSetMemoryTarget(self, target): diff --git a/xen.changes b/xen.changes index f9a377b..066c7ac 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,27 @@ +------------------------------------------------------------------- +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. + ------------------------------------------------------------------- Mon Aug 13 10:25:32 MDT 2007 - carnold@novell.com diff --git a/xen.spec b/xen.spec index 67da189..65e08a2 100644 --- a/xen.spec +++ b/xen.spec @@ -34,7 +34,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit 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 @@ Source17: sysconfig.xend 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 @@ Patch142: netfront_mac.patch 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 @@ Authors: %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 @@ Authors: %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 @@ Authors: %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 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info /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 diff --git a/xenapi-console-protocol.patch b/xenapi-console-protocol.patch index 9b431ad..211b8b2 100644 --- a/xenapi-console-protocol.patch +++ b/xenapi-console-protocol.patch @@ -2,7 +2,7 @@ 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 -@@ -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"