diff --git a/22998-x86-get_page_from_l1e-retcode.patch b/22998-x86-get_page_from_l1e-retcode.patch index eeb31b6..8f5ed59 100644 --- a/22998-x86-get_page_from_l1e-retcode.patch +++ b/22998-x86-get_page_from_l1e-retcode.patch @@ -19,8 +19,10 @@ could be introduced. Signed-off-by: Jan Beulich ---- a/xen/arch/x86/mm/shadow/multi.c -+++ b/xen/arch/x86/mm/shadow/multi.c +Index: xen-4.1.1-testing/xen/arch/x86/mm/shadow/multi.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/mm/shadow/multi.c ++++ xen-4.1.1-testing/xen/arch/x86/mm/shadow/multi.c @@ -872,7 +872,7 @@ shadow_get_page_from_l1e(shadow_l1e_t sl // If a privileged domain is attempting to install a map of a page it does // not own, we let it succeed anyway. @@ -72,8 +74,10 @@ Signed-off-by: Jan Beulich shadow_vram_get_l1e(new_sl1e, sl1e, sl1mfn, d); break; } ---- a/xen/arch/x86/mm.c -+++ b/xen/arch/x86/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/mm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/mm.c @@ -799,12 +799,12 @@ get_page_from_l1e( bool_t write; diff --git a/22999-x86-mod_l1_entry-retcode.patch b/22999-x86-mod_l1_entry-retcode.patch index 81655d1..672b727 100644 --- a/22999-x86-mod_l1_entry-retcode.patch +++ b/22999-x86-mod_l1_entry-retcode.patch @@ -12,8 +12,10 @@ x86: make mod_l1_entry() return a proper error code Signed-off-by: Jan Beulich ---- a/xen/arch/x86/mm.c -+++ b/xen/arch/x86/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/mm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/mm.c @@ -1765,15 +1765,16 @@ static int mod_l1_entry(l1_pgentry_t *pl struct domain *pt_dom = pt_vcpu->domain; unsigned long mfn; diff --git a/23000-x86-mod_l2_entry-retcode.patch b/23000-x86-mod_l2_entry-retcode.patch index e8a7633..ac81dce 100644 --- a/23000-x86-mod_l2_entry-retcode.patch +++ b/23000-x86-mod_l2_entry-retcode.patch @@ -11,8 +11,10 @@ track both an okay status and an error code). Signed-off-by: Jan Beulich ---- a/xen/arch/x86/mm.c -+++ b/xen/arch/x86/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/mm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/mm.c @@ -1845,16 +1845,16 @@ static int mod_l2_entry(l2_pgentry_t *pl struct domain *d = vcpu->domain; struct page_info *l2pg = mfn_to_page(pfn); diff --git a/23096-x86-hpet-no-cpumask_lock.patch b/23096-x86-hpet-no-cpumask_lock.patch index 52fde78..85a7355 100644 --- a/23096-x86-hpet-no-cpumask_lock.patch +++ b/23096-x86-hpet-no-cpumask_lock.patch @@ -16,8 +16,10 @@ found set by the surrounding loop). Signed-off-by: Jan Beulich Acked-by: Gang Wei ---- a/xen/arch/x86/hpet.c -+++ b/xen/arch/x86/hpet.c +Index: xen-4.1.1-testing/xen/arch/x86/hpet.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hpet.c ++++ xen-4.1.1-testing/xen/arch/x86/hpet.c @@ -34,18 +34,6 @@ struct hpet_event_channel int shift; s_time_t next_event; @@ -81,7 +83,7 @@ Acked-by: Gang Wei wmb(); legacy_hpet_event.event_handler = handle_hpet_broadcast; -@@ -713,9 +700,7 @@ void hpet_broadcast_exit(void) +@@ -716,9 +703,7 @@ void hpet_broadcast_exit(void) if ( !reprogram_timer(this_cpu(timer_deadline)) ) raise_softirq(TIMER_SOFTIRQ); diff --git a/23099-x86-rwlock-scalability.patch b/23099-x86-rwlock-scalability.patch index d14995d..65ac2f1 100644 --- a/23099-x86-rwlock-scalability.patch +++ b/23099-x86-rwlock-scalability.patch @@ -27,8 +27,10 @@ specify the operand suffix as 'l' for good measure. Signed-off-by: Keir Fraser ---- a/xen/common/spinlock.c -+++ b/xen/common/spinlock.c +Index: xen-4.1.1-testing/xen/common/spinlock.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/spinlock.c ++++ xen-4.1.1-testing/xen/common/spinlock.c @@ -234,7 +234,11 @@ void _spin_unlock_recursive(spinlock_t * void _read_lock(rwlock_t *lock) { @@ -128,8 +130,10 @@ Signed-off-by: Keir Fraser preempt_disable(); return flags; } ---- a/xen/include/asm-ia64/linux-xen/asm/spinlock.h -+++ b/xen/include/asm-ia64/linux-xen/asm/spinlock.h +Index: xen-4.1.1-testing/xen/include/asm-ia64/linux-xen/asm/spinlock.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-ia64/linux-xen/asm/spinlock.h ++++ xen-4.1.1-testing/xen/include/asm-ia64/linux-xen/asm/spinlock.h @@ -35,17 +35,6 @@ typedef struct { } raw_rwlock_t; #define _RAW_RW_LOCK_UNLOCKED /*(raw_rwlock_t)*/ { 0, 0 } @@ -186,8 +190,10 @@ Signed-off-by: Keir Fraser #define _raw_write_trylock(rw) \ ({ \ ---- a/xen/include/asm-x86/spinlock.h -+++ b/xen/include/asm-x86/spinlock.h +Index: xen-4.1.1-testing/xen/include/asm-x86/spinlock.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/spinlock.h ++++ xen-4.1.1-testing/xen/include/asm-x86/spinlock.h @@ -35,51 +35,29 @@ typedef struct { volatile int lock; } raw_rwlock_t; @@ -270,8 +276,10 @@ Signed-off-by: Keir Fraser +#define _raw_rw_is_write_locked(x) ((x)->lock > 0) #endif /* __ASM_SPINLOCK_H */ ---- a/xen/include/xen/spinlock.h -+++ b/xen/include/xen/spinlock.h +Index: xen-4.1.1-testing/xen/include/xen/spinlock.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/xen/spinlock.h ++++ xen-4.1.1-testing/xen/include/xen/spinlock.h @@ -157,6 +157,7 @@ unsigned long _read_lock_irqsave(rwlock_ void _read_unlock(rwlock_t *lock); void _read_unlock_irq(rwlock_t *lock); diff --git a/23103-x86-pirq-guest-eoi-check.patch b/23103-x86-pirq-guest-eoi-check.patch index f582b2f..4b1e248 100644 --- a/23103-x86-pirq-guest-eoi-check.patch +++ b/23103-x86-pirq-guest-eoi-check.patch @@ -8,11 +8,13 @@ guest-bound irq before accessing desc->action. Signed-off-by: Keir Fraser ---- a/xen/arch/x86/irq.c -+++ b/xen/arch/x86/irq.c -@@ -1022,6 +1022,12 @@ static void __pirq_guest_eoi(struct doma - if ( desc == NULL ) +Index: xen-4.1.1-testing/xen/arch/x86/irq.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/irq.c ++++ xen-4.1.1-testing/xen/arch/x86/irq.c +@@ -1028,6 +1028,12 @@ static void __pirq_guest_eoi(struct doma return; + } + if ( !(desc->status & IRQ_GUEST) ) + { diff --git a/23127-vtd-bios-settings.patch b/23127-vtd-bios-settings.patch index a94635d..75d6e38 100644 --- a/23127-vtd-bios-settings.patch +++ b/23127-vtd-bios-settings.patch @@ -27,8 +27,10 @@ Signed-off-by: Allen Kay Signed-off-by: Allen Kay ---- a/xen/arch/x86/apic.c -+++ b/xen/arch/x86/apic.c +Index: xen-4.1.1-testing/xen/arch/x86/apic.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/apic.c ++++ xen-4.1.1-testing/xen/arch/x86/apic.c @@ -531,7 +531,7 @@ static void resume_x2apic(void) mask_8259A(); mask_IO_APIC_setup(ioapic_entries); @@ -38,7 +40,7 @@ Signed-off-by: Allen Kay __enable_x2apic(); restore_IO_APIC_setup(ioapic_entries); -@@ -751,7 +751,7 @@ int lapic_suspend(void) +@@ -748,7 +748,7 @@ int lapic_suspend(void) local_irq_save(flags); disable_local_APIC(); @@ -47,7 +49,7 @@ Signed-off-by: Allen Kay local_irq_restore(flags); return 0; } -@@ -997,7 +997,7 @@ void __init x2apic_bsp_setup(void) +@@ -994,7 +994,7 @@ void __init x2apic_bsp_setup(void) mask_8259A(); mask_IO_APIC_setup(ioapic_entries); @@ -56,8 +58,10 @@ Signed-off-by: Allen Kay { if ( x2apic_enabled ) panic("Interrupt remapping could not be enabled while " ---- a/xen/drivers/passthrough/vtd/dmar.c -+++ b/xen/drivers/passthrough/vtd/dmar.c +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/dmar.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/dmar.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/dmar.c @@ -46,6 +46,7 @@ LIST_HEAD(acpi_rmrr_units); LIST_HEAD(acpi_atsr_units); LIST_HEAD(acpi_rhsa_units); @@ -97,8 +101,10 @@ Signed-off-by: Allen Kay + flags = DMAR_INTR_REMAP | DMAR_X2APIC_OPT_OUT; + return ((dmar_flags & flags) == DMAR_INTR_REMAP); +} ---- a/xen/drivers/passthrough/vtd/extern.h -+++ b/xen/drivers/passthrough/vtd/extern.h +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/extern.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/extern.h ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/extern.h @@ -87,5 +87,7 @@ void vtd_ops_preamble_quirk(struct iommu void vtd_ops_postamble_quirk(struct iommu* iommu); void me_wifi_quirk(struct domain *domain, u8 bus, u8 devfn, int map); @@ -107,9 +113,11 @@ Signed-off-by: Allen Kay +int platform_supports_x2apic(void); #endif // _VTD_EXTERN_H_ ---- a/xen/drivers/passthrough/vtd/intremap.c -+++ b/xen/drivers/passthrough/vtd/intremap.c -@@ -735,6 +735,13 @@ int enable_intremap(struct iommu *iommu, +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/intremap.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/intremap.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/intremap.c +@@ -741,6 +741,13 @@ int enable_intremap(struct iommu *iommu, ASSERT(ecap_intr_remap(iommu->ecap) && iommu_intremap); @@ -123,7 +131,7 @@ Signed-off-by: Allen Kay ir_ctrl = iommu_ir_ctrl(iommu); sts = dmar_readl(iommu->reg, DMAR_GSTS_REG); -@@ -821,10 +828,10 @@ out: +@@ -827,10 +834,10 @@ out: } /* @@ -136,7 +144,7 @@ Signed-off-by: Allen Kay { struct acpi_drhd_unit *drhd; struct iommu *iommu; -@@ -832,6 +839,9 @@ int iommu_enable_IR(void) +@@ -838,6 +845,9 @@ int iommu_enable_IR(void) if ( !iommu_supports_eim() ) return -1; @@ -146,7 +154,7 @@ Signed-off-by: Allen Kay for_each_drhd_unit ( drhd ) { struct qi_ctrl *qi_ctrl = NULL; -@@ -881,7 +891,7 @@ int iommu_enable_IR(void) +@@ -887,7 +897,7 @@ int iommu_enable_IR(void) * This function is used to disable Interrutp remapping when * suspend local apic */ @@ -155,9 +163,11 @@ Signed-off-by: Allen Kay { struct acpi_drhd_unit *drhd; ---- a/xen/drivers/passthrough/vtd/iommu.c -+++ b/xen/drivers/passthrough/vtd/iommu.c -@@ -2014,7 +2014,7 @@ static int init_vtd_hw(void) +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/iommu.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.c +@@ -1997,7 +1997,7 @@ static int init_vtd_hw(void) if ( enable_intremap(iommu, 0) != 0 ) { dprintk(XENLOG_WARNING VTDPREFIX, @@ -166,8 +176,10 @@ Signed-off-by: Allen Kay break; } } ---- a/xen/drivers/passthrough/vtd/iommu.h -+++ b/xen/drivers/passthrough/vtd/iommu.h +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/iommu.h ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.h @@ -22,6 +22,10 @@ #include @@ -179,8 +191,10 @@ Signed-off-by: Allen Kay /* * Intel IOMMU register specification per version 1.0 public spec. */ ---- a/xen/include/xen/iommu.h -+++ b/xen/include/xen/iommu.h +Index: xen-4.1.1-testing/xen/include/xen/iommu.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/xen/iommu.h ++++ xen-4.1.1-testing/xen/include/xen/iommu.h @@ -63,8 +63,8 @@ struct iommu { int iommu_setup(void); diff --git a/23153-x86-amd-clear-DramModEn.patch b/23153-x86-amd-clear-DramModEn.patch deleted file mode 100644 index 0051c07..0000000 --- a/23153-x86-amd-clear-DramModEn.patch +++ /dev/null @@ -1,57 +0,0 @@ -# HG changeset patch -# User Wei Huang -# Date 1302076891 -3600 -# Node ID 8fb61c9ebe499b576687907d164da07802414925 -# Parent 97763efc41f9b664cf6f7db653c9c3f51e50b358 -x86, amd, MTRR: correct DramModEn bit of SYS_CFG MSR - -Some buggy BIOS might set SYS_CFG DramModEn bit to 1, which can cause -unexpected behavior on AMD platforms. This patch clears DramModEn bit -if it is 1. - -Signed-off-by: Wei Huang - ---- a/xen/arch/x86/cpu/amd.c -+++ b/xen/arch/x86/cpu/amd.c -@@ -318,6 +318,32 @@ static void check_disable_c1e(unsigned i - on_each_cpu(disable_c1e, NULL, 1); - } - -+/* -+ * BIOS is expected to clear MtrrFixDramModEn bit. According to AMD BKDG : -+ * "The MtrrFixDramModEn bit should be set to 1 during BIOS initalization of -+ * the fixed MTRRs, then cleared to 0 for operation." -+ */ -+static void check_syscfg_dram_mod_en(void) -+{ -+ uint64_t syscfg; -+ static bool_t printed = 0; -+ -+ if (!((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) && -+ (boot_cpu_data.x86 >= 0x0f))) -+ return; -+ -+ rdmsrl(MSR_K8_SYSCFG, syscfg); -+ if (!(syscfg & K8_MTRRFIXRANGE_DRAM_MODIFY)) -+ return; -+ -+ if (!test_and_set_bool(printed)) -+ printk(KERN_ERR "MTRR: SYSCFG[MtrrFixDramModEn] not " -+ "cleared by BIOS, clearing this bit\n"); -+ -+ syscfg &= ~K8_MTRRFIXRANGE_DRAM_MODIFY; -+ wrmsrl(MSR_K8_SYSCFG, syscfg); -+} -+ - static void __devinit init_amd(struct cpuinfo_x86 *c) - { - u32 l, h; -@@ -587,6 +613,8 @@ static void __devinit init_amd(struct cp - disable_c1_ramping(); - - set_cpuidmask(c); -+ -+ check_syscfg_dram_mod_en(); - } - - static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 * c, unsigned int size) diff --git a/23154-x86-amd-iorr-no-rdwr.patch b/23154-x86-amd-iorr-no-rdwr.patch deleted file mode 100644 index 6f42f83..0000000 --- a/23154-x86-amd-iorr-no-rdwr.patch +++ /dev/null @@ -1,51 +0,0 @@ -# HG changeset patch -# User Wei Huang -# Date 1302076933 -3600 -# Node ID 42fa70e0761bbb0596618ca5323664f31a2faa76 -# Parent 8fb61c9ebe499b576687907d164da07802414925 -x86, amd, MTRR: remove k8_enable_fixed_iorrs() - -AMD64 defines two special bits (bit 3 and 4) RdMem and WrMem in fixed -MTRR type. Their values are supposed to be 0 after BIOS hands the -control to OS according to AMD BKDG. Unless OS specificially turn them -on, they are kept 0 all the time. As a result, k8_enable_fixed_iorrs() -is unnecessary and removed from upstream kernel (see -https://patchwork.kernel.org/patch/11425/). This patch does the same -thing. - -Signed-off-by: Wei Huang - ---- a/xen/arch/x86/cpu/mtrr/generic.c -+++ b/xen/arch/x86/cpu/mtrr/generic.c -@@ -116,20 +116,6 @@ void mtrr_wrmsr(unsigned int msr, uint64 - } - - /** -- * Enable and allow read/write of extended fixed-range MTRR bits on K8 CPUs -- * see AMD publication no. 24593, chapter 3.2.1 for more information -- */ --static inline void k8_enable_fixed_iorrs(void) --{ -- uint64_t msr_content; -- -- rdmsrl(MSR_K8_SYSCFG, msr_content); -- mtrr_wrmsr(MSR_K8_SYSCFG, msr_content -- | K8_MTRRFIXRANGE_DRAM_ENABLE -- | K8_MTRRFIXRANGE_DRAM_MODIFY); --} -- --/** - * Checks and updates an fixed-range MTRR if it differs from the value it - * should have. If K8 extenstions are wanted, update the K8 SYSCFG MSR also. - * see AMD publication no. 24593, chapter 7.8.1, page 233 for more information -@@ -145,10 +131,6 @@ static void set_fixed_range(int msr, int - val = ((uint64_t)msrwords[1] << 32) | msrwords[0]; - - if (msr_content != val) { -- if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD && -- boot_cpu_data.x86 == 15 && -- ((msrwords[0] | msrwords[1]) & K8_MTRR_RDMEM_WRMEM_MASK)) -- k8_enable_fixed_iorrs(); - mtrr_wrmsr(msr, val); - *changed = TRUE; - } diff --git a/23199-amd-iommu-unmapped-intr-fault.patch b/23199-amd-iommu-unmapped-intr-fault.patch index 6f066f5..9bd0d43 100644 --- a/23199-amd-iommu-unmapped-intr-fault.patch +++ b/23199-amd-iommu-unmapped-intr-fault.patch @@ -9,8 +9,10 @@ This helps us to debug interrupt issues. Signed-off-by: Wei Wang ---- a/xen/drivers/passthrough/amd/iommu_map.c -+++ b/xen/drivers/passthrough/amd/iommu_map.c +Index: xen-4.1.1-testing/xen/drivers/passthrough/amd/iommu_map.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/amd/iommu_map.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/amd/iommu_map.c @@ -327,8 +327,9 @@ void amd_iommu_set_intremap_table(u32 *d set_field_in_reg_u32(0xB, entry, IOMMU_DEV_TABLE_INT_TABLE_LENGTH_MASK, diff --git a/23200-amd-iommu-intremap-sync.patch b/23200-amd-iommu-intremap-sync.patch deleted file mode 100644 index 972adcc..0000000 --- a/23200-amd-iommu-intremap-sync.patch +++ /dev/null @@ -1,179 +0,0 @@ -References: bnc#680824 - -# HG changeset patch -# User Wei Wang -# Date 1302611179 -3600 -# Node ID 995a0c01a076e9c4fb124c090bc146a10d76bc7b -# Parent dbd98ab2f87facba8117bb881fa2ea5dfdb92960 -AMD IOMMU: Fix an interrupt remapping issue - -Some device could generate bogus interrupts if an IO-APIC RTE and an -iommu interrupt remapping entry are not consistent during 2 adjacent -64bits IO-APIC RTE updates. For example, if the 2nd operation updates -destination bits in RTE for SATA device and unmask it, in some case, -SATA device will assert ioapic pin to generate interrupt immediately -using new destination but iommu could still translate it into the old -destination, then dom0 would be confused. To fix that, we sync up -interrupt remapping entry with IO-APIC IRE on every 32 bits operation -and forward IOAPIC RTE updates after interrupt. - -Signed-off-by: Wei Wang -Acked-by: Jan Beulich - ---- a/xen/drivers/passthrough/amd/iommu_intr.c -+++ b/xen/drivers/passthrough/amd/iommu_intr.c -@@ -117,8 +117,7 @@ void invalidate_interrupt_table(struct a - static void update_intremap_entry_from_ioapic( - int bdf, - struct amd_iommu *iommu, -- struct IO_APIC_route_entry *ioapic_rte, -- unsigned int rte_upper, unsigned int value) -+ struct IO_APIC_route_entry *ioapic_rte) - { - unsigned long flags; - u32* entry; -@@ -130,28 +129,26 @@ static void update_intremap_entry_from_i - - req_id = get_intremap_requestor_id(bdf); - lock = get_intremap_lock(req_id); -- /* only remap interrupt vector when lower 32 bits in ioapic ire changed */ -- if ( likely(!rte_upper) ) -- { -- delivery_mode = rte->delivery_mode; -- vector = rte->vector; -- dest_mode = rte->dest_mode; -- dest = rte->dest.logical.logical_dest; - -- spin_lock_irqsave(lock, flags); -- offset = get_intremap_offset(vector, delivery_mode); -- entry = (u32*)get_intremap_entry(req_id, offset); -+ delivery_mode = rte->delivery_mode; -+ vector = rte->vector; -+ dest_mode = rte->dest_mode; -+ dest = rte->dest.logical.logical_dest; - -- update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest); -- spin_unlock_irqrestore(lock, flags); -+ spin_lock_irqsave(lock, flags); - -- if ( iommu->enabled ) -- { -- spin_lock_irqsave(&iommu->lock, flags); -- invalidate_interrupt_table(iommu, req_id); -- flush_command_buffer(iommu); -- spin_unlock_irqrestore(&iommu->lock, flags); -- } -+ offset = get_intremap_offset(vector, delivery_mode); -+ entry = (u32*)get_intremap_entry(req_id, offset); -+ update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest); -+ -+ spin_unlock_irqrestore(lock, flags); -+ -+ if ( iommu->enabled ) -+ { -+ spin_lock_irqsave(&iommu->lock, flags); -+ invalidate_interrupt_table(iommu, req_id); -+ flush_command_buffer(iommu); -+ spin_unlock_irqrestore(&iommu->lock, flags); - } - } - -@@ -199,7 +196,8 @@ int __init amd_iommu_setup_ioapic_remapp - spin_lock_irqsave(lock, flags); - offset = get_intremap_offset(vector, delivery_mode); - entry = (u32*)get_intremap_entry(req_id, offset); -- update_intremap_entry(entry, vector, delivery_mode, dest_mode, dest); -+ update_intremap_entry(entry, vector, -+ delivery_mode, dest_mode, dest); - spin_unlock_irqrestore(lock, flags); - - if ( iommu->enabled ) -@@ -217,16 +215,17 @@ int __init amd_iommu_setup_ioapic_remapp - void amd_iommu_ioapic_update_ire( - unsigned int apic, unsigned int reg, unsigned int value) - { -- struct IO_APIC_route_entry ioapic_rte = { 0 }; -- unsigned int rte_upper = (reg & 1) ? 1 : 0; -+ struct IO_APIC_route_entry old_rte = { 0 }; -+ struct IO_APIC_route_entry new_rte = { 0 }; -+ unsigned int rte_lo = (reg & 1) ? reg - 1 : reg; - int saved_mask, bdf; - struct amd_iommu *iommu; - -- *IO_APIC_BASE(apic) = reg; -- *(IO_APIC_BASE(apic)+4) = value; -- - if ( !iommu_intremap ) -+ { -+ __io_apic_write(apic, reg, value); - return; -+ } - - /* get device id of ioapic devices */ - bdf = ioapic_bdf[IO_APIC_ID(apic)]; -@@ -235,30 +234,49 @@ void amd_iommu_ioapic_update_ire( - { - AMD_IOMMU_DEBUG("Fail to find iommu for ioapic device id = 0x%x\n", - bdf); -+ __io_apic_write(apic, reg, value); - return; - } -- if ( rte_upper ) -- return; - -- /* read both lower and upper 32-bits of rte entry */ -- *IO_APIC_BASE(apic) = reg; -- *(((u32 *)&ioapic_rte) + 0) = *(IO_APIC_BASE(apic)+4); -- *IO_APIC_BASE(apic) = reg + 1; -- *(((u32 *)&ioapic_rte) + 1) = *(IO_APIC_BASE(apic)+4); -+ /* save io-apic rte lower 32 bits */ -+ *((u32 *)&old_rte) = __io_apic_read(apic, rte_lo); -+ saved_mask = old_rte.mask; -+ -+ if ( reg == rte_lo ) -+ { -+ *((u32 *)&new_rte) = value; -+ /* read upper 32 bits from io-apic rte */ -+ *(((u32 *)&new_rte) + 1) = __io_apic_read(apic, reg + 1); -+ } -+ else -+ { -+ *((u32 *)&new_rte) = *((u32 *)&old_rte); -+ *(((u32 *)&new_rte) + 1) = value; -+ } - - /* mask the interrupt while we change the intremap table */ -- saved_mask = ioapic_rte.mask; -- ioapic_rte.mask = 1; -- *IO_APIC_BASE(apic) = reg; -- *(IO_APIC_BASE(apic)+4) = *(((int *)&ioapic_rte)+0); -- ioapic_rte.mask = saved_mask; -+ if ( !saved_mask ) -+ { -+ old_rte.mask = 1; -+ __io_apic_write(apic, rte_lo, *((u32 *)&old_rte)); -+ } - -- update_intremap_entry_from_ioapic( -- bdf, iommu, &ioapic_rte, rte_upper, value); -+ /* Update interrupt remapping entry */ -+ update_intremap_entry_from_ioapic(bdf, iommu, &new_rte); -+ -+ /* Forward write access to IO-APIC RTE */ -+ __io_apic_write(apic, reg, value); -+ -+ /* For lower bits access, return directly to avoid double writes */ -+ if ( reg == rte_lo ) -+ return; - - /* unmask the interrupt after we have updated the intremap table */ -- *IO_APIC_BASE(apic) = reg; -- *(IO_APIC_BASE(apic)+4) = *(((u32 *)&ioapic_rte)+0); -+ if ( !saved_mask ) -+ { -+ old_rte.mask = saved_mask; -+ __io_apic_write(apic, rte_lo, *((u32 *)&old_rte)); -+ } - } - - static void update_intremap_entry_from_msi_msg( diff --git a/23228-x86-conditional-write_tsc.patch b/23228-x86-conditional-write_tsc.patch deleted file mode 100644 index ab3b82f..0000000 --- a/23228-x86-conditional-write_tsc.patch +++ /dev/null @@ -1,220 +0,0 @@ -References: bnc#623680 - -# HG changeset patch -# User Keir Fraser -# Date 1302853928 -3600 -# Node ID 1329d99b4f161b7617a667f601077cc92559f248 -# Parent b5165fb66b56d9438d77b475eaa9db67318d1ea1 -x86: don't write_tsc() non-zero values on CPUs updating only the lower 32 bits - -This means suppressing the uses in time_calibration_tsc_rendezvous(), -cstate_restore_tsc(), and synchronize_tsc_slave(), and fixes a boot -hang of Linux Dom0 when loading processor.ko on such systems that -have support for C states above C1. - -Signed-off-by: Jan Beulich -Signed-off-by: Keir Fraser - ---- a/xen/arch/x86/acpi/cpu_idle.c -+++ b/xen/arch/x86/acpi/cpu_idle.c -@@ -1099,3 +1099,7 @@ void cpuidle_disable_deep_cstate(void) - hpet_disable_legacy_broadcast(); - } - -+bool_t cpuidle_using_deep_cstate(void) -+{ -+ return xen_cpuidle && max_cstate > (local_apic_timer_c2_ok ? 2 : 1); -+} ---- a/xen/arch/x86/hpet.c -+++ b/xen/arch/x86/hpet.c -@@ -634,6 +634,9 @@ void hpet_disable_legacy_broadcast(void) - u32 cfg; - unsigned long flags; - -+ if ( !legacy_hpet_event.shift ) -+ return; -+ - spin_lock_irqsave(&legacy_hpet_event.lock, flags); - - legacy_hpet_event.flags |= HPET_EVT_DISABLE; ---- a/xen/arch/x86/smpboot.c -+++ b/xen/arch/x86/smpboot.c -@@ -41,6 +41,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -134,6 +135,12 @@ static void smp_store_cpu_info(int id) - ; - } - -+/* -+ * TSC's upper 32 bits can't be written in earlier CPUs (before -+ * Prescott), there is no way to resync one AP against BP. -+ */ -+bool_t disable_tsc_sync; -+ - static atomic_t tsc_count; - static uint64_t tsc_value; - static cpumask_t tsc_sync_cpu_mask; -@@ -142,6 +149,9 @@ static void synchronize_tsc_master(unsig - { - unsigned int i; - -+ if ( disable_tsc_sync ) -+ return; -+ - if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) && - !cpu_isset(slave, tsc_sync_cpu_mask) ) - return; -@@ -163,6 +173,9 @@ static void synchronize_tsc_slave(unsign - { - unsigned int i; - -+ if ( disable_tsc_sync ) -+ return; -+ - if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) && - !cpu_isset(slave, tsc_sync_cpu_mask) ) - return; ---- a/xen/arch/x86/time.c -+++ b/xen/arch/x86/time.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -682,6 +683,8 @@ void cstate_restore_tsc(void) - if ( boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ) - return; - -+ ASSERT(boot_cpu_has(X86_FEATURE_TSC_RELIABLE)); -+ - write_tsc(stime2tsc(read_platform_stime())); - } - -@@ -1384,6 +1387,66 @@ void init_percpu_time(void) - } - } - -+/* -+ * On certain older Intel CPUs writing the TSC MSR clears the upper 32 bits. -+ * Obviously we must not use write_tsc() on such CPUs. -+ * -+ * Additionally, AMD specifies that being able to write the TSC MSR is not an -+ * architectural feature (but, other than their manual says, also cannot be -+ * determined from CPUID bits). -+ */ -+static void __init tsc_check_writability(void) -+{ -+ const char *what = NULL; -+ uint64_t tsc; -+ -+ /* -+ * If all CPUs are reported as synchronised and in sync, we never write -+ * the TSCs (except unavoidably, when a CPU is physically hot-plugged). -+ * Hence testing for writability is pointless and even harmful. -+ */ -+ if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) ) -+ return; -+ -+ rdtscll(tsc); -+ if ( wrmsr_safe(MSR_IA32_TSC, 0) == 0 ) -+ { -+ uint64_t tmp, tmp2; -+ rdtscll(tmp2); -+ write_tsc(tsc | (1ULL << 32)); -+ rdtscll(tmp); -+ if ( ABS((s64)tmp - (s64)tmp2) < (1LL << 31) ) -+ what = "only partially"; -+ } -+ else -+ { -+ what = "not"; -+ } -+ -+ /* Nothing to do if the TSC is fully writable. */ -+ if ( !what ) -+ { -+ /* -+ * Paranoia - write back original TSC value. However, APs get synced -+ * with BSP as they are brought up, so this doesn't much matter. -+ */ -+ write_tsc(tsc); -+ return; -+ } -+ -+ printk(XENLOG_WARNING "TSC %s writable\n", what); -+ -+ /* time_calibration_tsc_rendezvous() must not be used */ -+ setup_clear_cpu_cap(X86_FEATURE_CONSTANT_TSC); -+ -+ /* cstate_restore_tsc() must not be used (or do nothing) */ -+ if ( !boot_cpu_has(X86_FEATURE_NONSTOP_TSC) ) -+ cpuidle_disable_deep_cstate(); -+ -+ /* synchronize_tsc_slave() must do nothing */ -+ disable_tsc_sync = 1; -+} -+ - /* Late init function (after all CPUs are booted). */ - int __init init_xen_time(void) - { -@@ -1400,6 +1463,8 @@ int __init init_xen_time(void) - setup_clear_cpu_cap(X86_FEATURE_TSC_RELIABLE); - } - -+ tsc_check_writability(); -+ - /* If we have constant-rate TSCs then scale factor can be shared. */ - if ( boot_cpu_has(X86_FEATURE_CONSTANT_TSC) ) - { -@@ -1451,7 +1516,7 @@ static int disable_pit_irq(void) - * XXX dom0 may rely on RTC interrupt delivery, so only enable - * hpet_broadcast if FSB mode available or if force_hpet_broadcast. - */ -- if ( xen_cpuidle && !boot_cpu_has(X86_FEATURE_ARAT) ) -+ if ( cpuidle_using_deep_cstate() && !boot_cpu_has(X86_FEATURE_ARAT) ) - { - hpet_broadcast_init(); - if ( !hpet_broadcast_is_available() ) ---- a/xen/include/asm-x86/setup.h -+++ b/xen/include/asm-x86/setup.h -@@ -4,7 +4,6 @@ - #include - - extern bool_t early_boot; --extern s8 xen_cpuidle; - extern unsigned long xenheap_initial_phys_start; - - void init_done(void); ---- a/xen/include/asm-x86/time.h -+++ b/xen/include/asm-x86/time.h -@@ -24,6 +24,8 @@ - - typedef u64 cycles_t; - -+extern bool_t disable_tsc_sync; -+ - static inline cycles_t get_cycles(void) - { - cycles_t c; ---- a/xen/include/xen/cpuidle.h -+++ b/xen/include/xen/cpuidle.h -@@ -85,7 +85,10 @@ struct cpuidle_governor - void (*reflect) (struct acpi_processor_power *dev); - }; - -+extern s8 xen_cpuidle; - extern struct cpuidle_governor *cpuidle_current_governor; -+ -+bool_t cpuidle_using_deep_cstate(void); - void cpuidle_disable_deep_cstate(void); - - extern void cpuidle_wakeup_mwait(cpumask_t *mask); diff --git a/23233-hvm-cr-access.patch b/23233-hvm-cr-access.patch new file mode 100644 index 0000000..21e3679 --- /dev/null +++ b/23233-hvm-cr-access.patch @@ -0,0 +1,435 @@ +References: FATE#309900 + +# HG changeset patch +# User Keir Fraser +# Date 1303116432 -3600 +# Node ID 1276926e3795b11ef6ac2f59df900d8e0ba9f54b +# Parent 07d832ad23021445bc56fafaeb2843c94d868005 +vmx/hvm: move mov-cr handling functions to generic HVM code + +Currently the handling of CR accesses intercepts is done much +differently in SVM and VMX. For future usage move the VMX part +into the generic HVM path and use the exported functions. + +Signed-off-by: Andre Przywara +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/hvm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/hvm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/hvm.c +@@ -1297,6 +1297,86 @@ static void hvm_set_uc_mode(struct vcpu + return hvm_funcs.set_uc_mode(v); + } + ++int hvm_mov_to_cr(unsigned int cr, unsigned int gpr) ++{ ++ struct vcpu *curr = current; ++ unsigned long val, *reg; ++ ++ if ( (reg = get_x86_gpr(guest_cpu_user_regs(), gpr)) == NULL ) ++ { ++ gdprintk(XENLOG_ERR, "invalid gpr: %u\n", gpr); ++ goto exit_and_crash; ++ } ++ ++ val = *reg; ++ HVMTRACE_LONG_2D(CR_WRITE, cr, TRC_PAR_LONG(val)); ++ HVM_DBG_LOG(DBG_LEVEL_1, "CR%u, value = %lx", cr, val); ++ ++ switch ( cr ) ++ { ++ case 0: ++ return hvm_set_cr0(val); ++ ++ case 3: ++ return hvm_set_cr3(val); ++ ++ case 4: ++ return hvm_set_cr4(val); ++ ++ case 8: ++ vlapic_set_reg(vcpu_vlapic(curr), APIC_TASKPRI, ((val & 0x0f) << 4)); ++ break; ++ ++ default: ++ gdprintk(XENLOG_ERR, "invalid cr: %d\n", cr); ++ goto exit_and_crash; ++ } ++ ++ return X86EMUL_OKAY; ++ ++ exit_and_crash: ++ domain_crash(curr->domain); ++ return X86EMUL_UNHANDLEABLE; ++} ++ ++int hvm_mov_from_cr(unsigned int cr, unsigned int gpr) ++{ ++ struct vcpu *curr = current; ++ unsigned long val = 0, *reg; ++ ++ if ( (reg = get_x86_gpr(guest_cpu_user_regs(), gpr)) == NULL ) ++ { ++ gdprintk(XENLOG_ERR, "invalid gpr: %u\n", gpr); ++ goto exit_and_crash; ++ } ++ ++ switch ( cr ) ++ { ++ case 0: ++ case 2: ++ case 3: ++ case 4: ++ val = curr->arch.hvm_vcpu.guest_cr[cr]; ++ break; ++ case 8: ++ val = (vlapic_get_reg(vcpu_vlapic(curr), APIC_TASKPRI) & 0xf0) >> 4; ++ break; ++ default: ++ gdprintk(XENLOG_ERR, "invalid cr: %u\n", cr); ++ goto exit_and_crash; ++ } ++ ++ *reg = val; ++ HVMTRACE_LONG_2D(CR_READ, cr, TRC_PAR_LONG(val)); ++ HVM_DBG_LOG(DBG_LEVEL_VMMU, "CR%u, value = %lx", cr, val); ++ ++ return X86EMUL_OKAY; ++ ++ exit_and_crash: ++ domain_crash(curr->domain); ++ return X86EMUL_UNHANDLEABLE; ++} ++ + int hvm_set_cr0(unsigned long value) + { + struct vcpu *v = current; +Index: xen-4.1.1-testing/xen/arch/x86/hvm/vmx/vmx.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/vmx/vmx.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/vmx/vmx.c +@@ -1546,182 +1546,42 @@ static void vmx_invlpg_intercept(unsigne + vpid_sync_vcpu_gva(curr, vaddr); + } + +-#define CASE_SET_REG(REG, reg) \ +- case VMX_CONTROL_REG_ACCESS_GPR_ ## REG: regs->reg = value; break +-#define CASE_GET_REG(REG, reg) \ +- case VMX_CONTROL_REG_ACCESS_GPR_ ## REG: value = regs->reg; break +- +-#define CASE_EXTEND_SET_REG \ +- CASE_EXTEND_REG(S) +-#define CASE_EXTEND_GET_REG \ +- CASE_EXTEND_REG(G) +- +-#ifdef __i386__ +-#define CASE_EXTEND_REG(T) +-#else +-#define CASE_EXTEND_REG(T) \ +- CASE_ ## T ## ET_REG(R8, r8); \ +- CASE_ ## T ## ET_REG(R9, r9); \ +- CASE_ ## T ## ET_REG(R10, r10); \ +- CASE_ ## T ## ET_REG(R11, r11); \ +- CASE_ ## T ## ET_REG(R12, r12); \ +- CASE_ ## T ## ET_REG(R13, r13); \ +- CASE_ ## T ## ET_REG(R14, r14); \ +- CASE_ ## T ## ET_REG(R15, r15) +-#endif +- +-static int mov_to_cr(int gp, int cr, struct cpu_user_regs *regs) +-{ +- unsigned long value; +- struct vcpu *v = current; +- struct vlapic *vlapic = vcpu_vlapic(v); +- int rc = 0; +- unsigned long old; +- +- switch ( gp ) +- { +- CASE_GET_REG(EAX, eax); +- CASE_GET_REG(ECX, ecx); +- CASE_GET_REG(EDX, edx); +- CASE_GET_REG(EBX, ebx); +- CASE_GET_REG(EBP, ebp); +- CASE_GET_REG(ESI, esi); +- CASE_GET_REG(EDI, edi); +- CASE_GET_REG(ESP, esp); +- CASE_EXTEND_GET_REG; +- default: +- gdprintk(XENLOG_ERR, "invalid gp: %d\n", gp); +- goto exit_and_crash; +- } +- +- HVMTRACE_LONG_2D(CR_WRITE, cr, TRC_PAR_LONG(value)); +- +- HVM_DBG_LOG(DBG_LEVEL_1, "CR%d, value = %lx", cr, value); +- +- switch ( cr ) +- { +- case 0: +- old = v->arch.hvm_vcpu.guest_cr[0]; +- rc = !hvm_set_cr0(value); +- if (rc) +- hvm_memory_event_cr0(value, old); +- return rc; +- +- case 3: +- old = v->arch.hvm_vcpu.guest_cr[3]; +- rc = !hvm_set_cr3(value); +- if (rc) +- hvm_memory_event_cr3(value, old); +- return rc; +- +- case 4: +- old = v->arch.hvm_vcpu.guest_cr[4]; +- rc = !hvm_set_cr4(value); +- if (rc) +- hvm_memory_event_cr4(value, old); +- return rc; +- +- case 8: +- vlapic_set_reg(vlapic, APIC_TASKPRI, ((value & 0x0F) << 4)); +- break; +- +- default: +- gdprintk(XENLOG_ERR, "invalid cr: %d\n", cr); +- goto exit_and_crash; +- } +- +- return 1; +- +- exit_and_crash: +- domain_crash(v->domain); +- return 0; +-} +- +-/* +- * Read from control registers. CR0 and CR4 are read from the shadow. +- */ +-static void mov_from_cr(int cr, int gp, struct cpu_user_regs *regs) ++static int vmx_cr_access(unsigned long exit_qualification) + { +- unsigned long value = 0; +- struct vcpu *v = current; +- struct vlapic *vlapic = vcpu_vlapic(v); +- +- switch ( cr ) +- { +- case 3: +- value = (unsigned long)v->arch.hvm_vcpu.guest_cr[3]; +- break; +- case 8: +- value = (unsigned long)vlapic_get_reg(vlapic, APIC_TASKPRI); +- value = (value & 0xF0) >> 4; +- break; +- default: +- gdprintk(XENLOG_ERR, "invalid cr: %d\n", cr); +- domain_crash(v->domain); +- break; +- } +- +- switch ( gp ) { +- CASE_SET_REG(EAX, eax); +- CASE_SET_REG(ECX, ecx); +- CASE_SET_REG(EDX, edx); +- CASE_SET_REG(EBX, ebx); +- CASE_SET_REG(EBP, ebp); +- CASE_SET_REG(ESI, esi); +- CASE_SET_REG(EDI, edi); +- CASE_SET_REG(ESP, esp); +- CASE_EXTEND_SET_REG; +- default: +- printk("invalid gp: %d\n", gp); +- domain_crash(v->domain); +- break; +- } +- +- HVMTRACE_LONG_2D(CR_READ, cr, TRC_PAR_LONG(value)); +- +- HVM_DBG_LOG(DBG_LEVEL_VMMU, "CR%d, value = %lx", cr, value); +-} +- +-static int vmx_cr_access(unsigned long exit_qualification, +- struct cpu_user_regs *regs) +-{ +- unsigned int gp, cr; +- unsigned long value; +- struct vcpu *v = current; ++ struct vcpu *curr = current; + +- switch ( exit_qualification & VMX_CONTROL_REG_ACCESS_TYPE ) ++ switch ( VMX_CONTROL_REG_ACCESS_TYPE(exit_qualification) ) + { +- case VMX_CONTROL_REG_ACCESS_TYPE_MOV_TO_CR: +- gp = exit_qualification & VMX_CONTROL_REG_ACCESS_GPR; +- cr = exit_qualification & VMX_CONTROL_REG_ACCESS_NUM; +- return mov_to_cr(gp, cr, regs); +- case VMX_CONTROL_REG_ACCESS_TYPE_MOV_FROM_CR: +- gp = exit_qualification & VMX_CONTROL_REG_ACCESS_GPR; +- cr = exit_qualification & VMX_CONTROL_REG_ACCESS_NUM; +- mov_from_cr(cr, gp, regs); +- break; +- case VMX_CONTROL_REG_ACCESS_TYPE_CLTS: +- { +- unsigned long old = v->arch.hvm_vcpu.guest_cr[0]; +- v->arch.hvm_vcpu.guest_cr[0] &= ~X86_CR0_TS; +- vmx_update_guest_cr(v, 0); +- +- hvm_memory_event_cr0(v->arch.hvm_vcpu.guest_cr[0], old); +- ++ case VMX_CONTROL_REG_ACCESS_TYPE_MOV_TO_CR: { ++ unsigned long gp = VMX_CONTROL_REG_ACCESS_GPR(exit_qualification); ++ unsigned long cr = VMX_CONTROL_REG_ACCESS_NUM(exit_qualification); ++ return hvm_mov_to_cr(cr, gp); ++ } ++ case VMX_CONTROL_REG_ACCESS_TYPE_MOV_FROM_CR: { ++ unsigned long gp = VMX_CONTROL_REG_ACCESS_GPR(exit_qualification); ++ unsigned long cr = VMX_CONTROL_REG_ACCESS_NUM(exit_qualification); ++ return hvm_mov_from_cr(cr, gp); ++ } ++ case VMX_CONTROL_REG_ACCESS_TYPE_CLTS: { ++ unsigned long old = curr->arch.hvm_vcpu.guest_cr[0]; ++ curr->arch.hvm_vcpu.guest_cr[0] &= ~X86_CR0_TS; ++ vmx_update_guest_cr(curr, 0); ++ hvm_memory_event_cr0(curr->arch.hvm_vcpu.guest_cr[0], old); + HVMTRACE_0D(CLTS); + break; + } +- case VMX_CONTROL_REG_ACCESS_TYPE_LMSW: +- value = v->arch.hvm_vcpu.guest_cr[0]; ++ case VMX_CONTROL_REG_ACCESS_TYPE_LMSW: { ++ unsigned long value = curr->arch.hvm_vcpu.guest_cr[0]; + /* LMSW can: (1) set bits 0-3; (2) clear bits 1-3. */ + value = (value & ~0xe) | ((exit_qualification >> 16) & 0xf); + HVMTRACE_LONG_1D(LMSW, value); +- return !hvm_set_cr0(value); ++ return hvm_set_cr0(value); ++ } + default: + BUG(); + } + +- return 1; ++ return X86EMUL_OKAY; + } + + static const struct lbr_info { +@@ -2526,7 +2386,7 @@ asmlinkage void vmx_vmexit_handler(struc + case EXIT_REASON_CR_ACCESS: + { + exit_qualification = __vmread(EXIT_QUALIFICATION); +- if ( vmx_cr_access(exit_qualification, regs) ) ++ if ( vmx_cr_access(exit_qualification) == X86EMUL_OKAY ) + update_guest_eip(); /* Safe: MOV Cn, LMSW, CLTS */ + break; + } +Index: xen-4.1.1-testing/xen/arch/x86/traps.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/traps.c ++++ xen-4.1.1-testing/xen/arch/x86/traps.c +@@ -368,6 +368,36 @@ void vcpu_show_execution_state(struct vc + vcpu_unpause(v); + } + ++unsigned long *get_x86_gpr(struct cpu_user_regs *regs, unsigned int modrm_reg) ++{ ++ void *p; ++ ++ switch ( modrm_reg ) ++ { ++ case 0: p = ®s->eax; break; ++ case 1: p = ®s->ecx; break; ++ case 2: p = ®s->edx; break; ++ case 3: p = ®s->ebx; break; ++ case 4: p = ®s->esp; break; ++ case 5: p = ®s->ebp; break; ++ case 6: p = ®s->esi; break; ++ case 7: p = ®s->edi; break; ++#if defined(__x86_64__) ++ case 8: p = ®s->r8; break; ++ case 9: p = ®s->r9; break; ++ case 10: p = ®s->r10; break; ++ case 11: p = ®s->r11; break; ++ case 12: p = ®s->r12; break; ++ case 13: p = ®s->r13; break; ++ case 14: p = ®s->r14; break; ++ case 15: p = ®s->r15; break; ++#endif ++ default: p = NULL; break; ++ } ++ ++ return p; ++} ++ + static char *trapstr(int trapnr) + { + static char *strings[] = { +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/support.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/support.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/support.h +@@ -137,5 +137,7 @@ int hvm_set_cr3(unsigned long value); + int hvm_set_cr4(unsigned long value); + int hvm_msr_read_intercept(unsigned int msr, uint64_t *msr_content); + int hvm_msr_write_intercept(unsigned int msr, uint64_t msr_content); ++int hvm_mov_to_cr(unsigned int cr, unsigned int gpr); ++int hvm_mov_from_cr(unsigned int cr, unsigned int gpr); + + #endif /* __ASM_X86_HVM_SUPPORT_H__ */ +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/vmx/vmx.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/vmx/vmx.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/vmx/vmx.h +@@ -144,31 +144,15 @@ void vmx_update_cpu_exec_control(struct + * Exit Qualifications for MOV for Control Register Access + */ + /* 3:0 - control register number (CRn) */ +-#define VMX_CONTROL_REG_ACCESS_NUM 0xf ++#define VMX_CONTROL_REG_ACCESS_NUM(eq) ((eq) & 0xf) + /* 5:4 - access type (CR write, CR read, CLTS, LMSW) */ +-#define VMX_CONTROL_REG_ACCESS_TYPE 0x30 ++#define VMX_CONTROL_REG_ACCESS_TYPE(eq) (((eq) >> 4) & 0x3) ++# define VMX_CONTROL_REG_ACCESS_TYPE_MOV_TO_CR 0 ++# define VMX_CONTROL_REG_ACCESS_TYPE_MOV_FROM_CR 1 ++# define VMX_CONTROL_REG_ACCESS_TYPE_CLTS 2 ++# define VMX_CONTROL_REG_ACCESS_TYPE_LMSW 3 + /* 10:8 - general purpose register operand */ +-#define VMX_CONTROL_REG_ACCESS_GPR 0xf00 +-#define VMX_CONTROL_REG_ACCESS_TYPE_MOV_TO_CR (0 << 4) +-#define VMX_CONTROL_REG_ACCESS_TYPE_MOV_FROM_CR (1 << 4) +-#define VMX_CONTROL_REG_ACCESS_TYPE_CLTS (2 << 4) +-#define VMX_CONTROL_REG_ACCESS_TYPE_LMSW (3 << 4) +-#define VMX_CONTROL_REG_ACCESS_GPR_EAX (0 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_ECX (1 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_EDX (2 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_EBX (3 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_ESP (4 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_EBP (5 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_ESI (6 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_EDI (7 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R8 (8 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R9 (9 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R10 (10 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R11 (11 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R12 (12 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R13 (13 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R14 (14 << 8) +-#define VMX_CONTROL_REG_ACCESS_GPR_R15 (15 << 8) ++#define VMX_CONTROL_REG_ACCESS_GPR(eq) (((eq) >> 8) & 0xf) + + /* + * Access Rights +Index: xen-4.1.1-testing/xen/include/asm-x86/processor.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/processor.h ++++ xen-4.1.1-testing/xen/include/asm-x86/processor.h +@@ -589,6 +589,8 @@ int wrmsr_hypervisor_regs(uint32_t idx, + int microcode_update(XEN_GUEST_HANDLE(const_void), unsigned long len); + int microcode_resume_cpu(int cpu); + ++unsigned long *get_x86_gpr(struct cpu_user_regs *regs, unsigned int modrm_reg); ++ + #endif /* !__ASSEMBLY__ */ + + #endif /* __ASM_X86_PROCESSOR_H */ diff --git a/23234-svm-decode-assist-base.patch b/23234-svm-decode-assist-base.patch new file mode 100644 index 0000000..e269167 --- /dev/null +++ b/23234-svm-decode-assist-base.patch @@ -0,0 +1,75 @@ +References: FATE#309900 + +# HG changeset patch +# User Andre Przywara +# Date 1303116553 -3600 +# Node ID bf7afd48339a18cd86d89337f3c055045fb78d3b +# Parent 1276926e3795b11ef6ac2f59df900d8e0ba9f54b +svm: add bit definitions for SVM DecodeAssist + +Chapter 15.33 of recent APM Vol.2 manuals describe some additions +to SVM called DecodeAssist. Add the newly added fields to the VMCB +structure and name the associated CPUID bit. + +Signed-off-by: Andre Przywara + +# HG changeset patch +# User Keir Fraser +# Date 1303117802 -3600 +# Node ID 381ab77db71a4739b8a4f4fdad4ef3504999f998 +# Parent e324c4d1dd6eeb9417fec513640ca795bd0f5dd4 +svm: decode-assists feature must depend on nextrip feature. + +...since the decode-assist fast paths assume nextrip vmcb field is +valid. + +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +@@ -928,11 +928,16 @@ struct hvm_function_table * __init start + + printk("SVM: Supported advanced features:\n"); + ++ /* DecodeAssists fast paths assume nextrip is valid for fast rIP update. */ ++ if ( !cpu_has_svm_nrips ) ++ clear_bit(SVM_FEATURE_DECODEASSISTS, &svm_feature_flags); ++ + #define P(p,s) if ( p ) { printk(" - %s\n", s); printed = 1; } + P(cpu_has_svm_npt, "Nested Page Tables (NPT)"); + P(cpu_has_svm_lbrv, "Last Branch Record (LBR) Virtualisation"); + P(cpu_has_svm_nrips, "Next-RIP Saved on #VMEXIT"); + P(cpu_has_svm_cleanbits, "VMCB Clean Bits"); ++ P(cpu_has_svm_decode, "DecodeAssists"); + P(cpu_has_pause_filter, "Pause-Intercept Filter"); + #undef P + +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/svm.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/svm.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/svm.h +@@ -80,6 +80,7 @@ extern u32 svm_feature_flags; + #define cpu_has_svm_svml cpu_has_svm_feature(SVM_FEATURE_SVML) + #define cpu_has_svm_nrips cpu_has_svm_feature(SVM_FEATURE_NRIPS) + #define cpu_has_svm_cleanbits cpu_has_svm_feature(SVM_FEATURE_VMCBCLEAN) ++#define cpu_has_svm_decode cpu_has_svm_feature(SVM_FEATURE_DECODEASSISTS) + #define cpu_has_pause_filter cpu_has_svm_feature(SVM_FEATURE_PAUSEFILTER) + + #endif /* __ASM_X86_HVM_SVM_H__ */ +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/vmcb.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/vmcb.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/vmcb.h +@@ -432,7 +432,9 @@ struct vmcb_struct { + vmcbcleanbits_t cleanbits; /* offset 0xC0 */ + u32 res09; /* offset 0xC4 */ + u64 nextrip; /* offset 0xC8 */ +- u64 res10a[102]; /* offset 0xD0 pad to save area */ ++ u8 guest_ins_len; /* offset 0xD0 */ ++ u8 guest_ins[15]; /* offset 0xD1 */ ++ u64 res10a[100]; /* offset 0xE0 pad to save area */ + + svm_segment_register_t es; /* offset 1024 - cleanbit 8 */ + svm_segment_register_t cs; /* cleanbit 8 */ diff --git a/23235-svm-decode-assist-crs.patch b/23235-svm-decode-assist-crs.patch new file mode 100644 index 0000000..59fb07b --- /dev/null +++ b/23235-svm-decode-assist-crs.patch @@ -0,0 +1,66 @@ +References: FATE#309900 + +# HG changeset patch +# User Andre Przywara +# Date 1303117266 -3600 +# Node ID 2c8ad607ece18b4740b9fc4ffe267a0e0893c141 +# Parent bf7afd48339a18cd86d89337f3c055045fb78d3b +svm: implement CR access part of DecodeAssist + +Newer SVM implementations (Bulldozer) now give the used general +purpose register on a MOV-CR intercept explictly. This avoids +fetching and decoding the instruction from guest's memory and speeds +up some Windows guest, which exercise CR8 quite often. + +Signed-off-by: Andre Przywara +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +@@ -1040,6 +1040,22 @@ static void svm_vmexit_do_cpuid(struct c + __update_guest_eip(regs, inst_len); + } + ++static void svm_vmexit_do_cr_access( ++ struct vmcb_struct *vmcb, struct cpu_user_regs *regs) ++{ ++ int gp, cr, dir, rc; ++ ++ cr = vmcb->exitcode - VMEXIT_CR0_READ; ++ dir = (cr > 15); ++ cr &= 0xf; ++ gp = vmcb->exitinfo1 & 0xf; ++ ++ rc = dir ? hvm_mov_to_cr(cr, gp) : hvm_mov_from_cr(cr, gp); ++ ++ if ( rc == X86EMUL_OKAY ) ++ __update_guest_eip(regs, vmcb->nextrip - vmcb->rip); ++} ++ + static void svm_dr_access(struct vcpu *v, struct cpu_user_regs *regs) + { + HVMTRACE_0D(DR_WRITE); +@@ -1621,11 +1637,19 @@ asmlinkage void svm_vmexit_handler(struc + int dir = (vmcb->exitinfo1 & 1) ? IOREQ_READ : IOREQ_WRITE; + if ( handle_pio(port, bytes, dir) ) + __update_guest_eip(regs, vmcb->exitinfo2 - vmcb->rip); +- break; + } +- /* fallthrough to emulation if a string instruction */ ++ else if ( !handle_mmio() ) ++ hvm_inject_exception(TRAP_gp_fault, 0, 0); ++ break; ++ + case VMEXIT_CR0_READ ... VMEXIT_CR15_READ: + case VMEXIT_CR0_WRITE ... VMEXIT_CR15_WRITE: ++ if ( cpu_has_svm_decode && (vmcb->exitinfo1 & (1ULL << 63)) ) ++ svm_vmexit_do_cr_access(vmcb, regs); ++ else if ( !handle_mmio() ) ++ hvm_inject_exception(TRAP_gp_fault, 0, 0); ++ break; ++ + case VMEXIT_INVLPG: + case VMEXIT_INVLPGA: + if ( !handle_mmio() ) diff --git a/23236-svm-decode-assist-invlpg.patch b/23236-svm-decode-assist-invlpg.patch new file mode 100644 index 0000000..69edab1 --- /dev/null +++ b/23236-svm-decode-assist-invlpg.patch @@ -0,0 +1,133 @@ +References: FATE#309900 + +# HG changeset patch +# User Christoph Egger +# Date 1302700499 -3600 +# Node ID 3b2182100ba2fa5c4a3a450e473717e2300aa8f1 +# Parent 2284c79b606ac14ef5c5bc2c1cce62188b5bd9ee +x86/svm/asid: Introduce svm_invlpga() + +Signed-off-by: Christoph Egger + +# HG changeset patch +# User Andre Przywara +# Date 1303117597 -3600 +# Node ID e324c4d1dd6eeb9417fec513640ca795bd0f5dd4 +# Parent 2c8ad607ece18b4740b9fc4ffe267a0e0893c141 +svm: implement INVLPG part of DecodeAssist + +Newer SVM implementations (Bulldozer) give the desired address on +a INVLPG intercept explicitly in the EXITINFO1 field of the VMCB. +Use this address to avoid a costly instruction fetch and decode +cycle. + +Signed-off-by: Andre Przywara + +# HG changeset patch +# User Christoph Egger +# Date 1305187246 -3600 +# Node ID 19d6541c4abec3486c83de76102ec46d7fe22a16 +# Parent b6e8e916ed2827fb1329de0de2e23ee5b6b78662 +nestedsvm: update rip on invlpga intercept + +Fixes endless loop. + +Signed-off-by: Christoph Egger + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/emulate.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/emulate.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/emulate.c +@@ -102,6 +102,7 @@ MAKE_INSTR(INT3, 1, 0xcc); + MAKE_INSTR(RDTSC, 2, 0x0f, 0x31); + MAKE_INSTR(PAUSE, 1, 0x90); + MAKE_INSTR(XSETBV, 3, 0x0f, 0x01, 0xd1); ++MAKE_INSTR(INVLPGA,3, 0x0f, 0x01, 0xdf); + + static const u8 *opc_bytes[INSTR_MAX_COUNT] = + { +@@ -116,6 +117,7 @@ static const u8 *opc_bytes[INSTR_MAX_COU + [INSTR_RDTSC] = OPCODE_RDTSC, + [INSTR_PAUSE] = OPCODE_PAUSE, + [INSTR_XSETBV] = OPCODE_XSETBV, ++ [INSTR_INVLPGA] = OPCODE_INVLPGA, + }; + + static int fetch(struct vcpu *v, u8 *buf, unsigned long addr, int len) +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +@@ -1651,11 +1651,22 @@ asmlinkage void svm_vmexit_handler(struc + break; + + case VMEXIT_INVLPG: +- case VMEXIT_INVLPGA: +- if ( !handle_mmio() ) ++ if ( cpu_has_svm_decode ) ++ { ++ svm_invlpg_intercept(vmcb->exitinfo1); ++ __update_guest_eip(regs, vmcb->nextrip - vmcb->rip); ++ } ++ else if ( !handle_mmio() ) + hvm_inject_exception(TRAP_gp_fault, 0, 0); + break; + ++ case VMEXIT_INVLPGA: ++ if ( (inst_len = __get_instruction_length(v, INSTR_INVLPGA)) == 0 ) ++ break; ++ svm_invlpga(regs->eax, v->arch.hvm_vcpu.asid); ++ __update_guest_eip(regs, inst_len); ++ break; ++ + case VMEXIT_VMMCALL: + if ( (inst_len = __get_instruction_length(v, INSTR_VMCALL)) == 0 ) + break; +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/asid.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/asid.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/asid.h +@@ -34,10 +34,7 @@ static inline void svm_asid_g_invlpg(str + { + #if 0 + /* Optimization? */ +- asm volatile (".byte 0x0F,0x01,0xDF \n" +- : /* output */ +- : /* input */ +- "a" (g_vaddr), "c"(v->arch.hvm_svm.vmcb->guest_asid) ); ++ svm_invlpga(g_vaddr, v->arch.hvm_svm.vmcb->guest_asid); + #endif + + /* Safe fallback. Take a new ASID. */ +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/emulate.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/emulate.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/emulate.h +@@ -33,6 +33,7 @@ enum instruction_index { + INSTR_RDTSC, + INSTR_PAUSE, + INSTR_XSETBV, ++ INSTR_INVLPGA, + INSTR_MAX_COUNT /* Must be last - Number of instructions supported */ + }; + +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/svm.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/svm.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/svm.h +@@ -62,6 +62,15 @@ static inline void svm_vmsave(void *vmcb + : : "a" (__pa(vmcb)) : "memory" ); + } + ++static inline void svm_invlpga(unsigned long vaddr, uint32_t asid) ++{ ++ asm volatile ( ++ ".byte 0x0f,0x01,0xdf" ++ : /* output */ ++ : /* input */ ++ "a" (vaddr), "c" (asid)); ++} ++ + extern u32 svm_feature_flags; + + #define SVM_FEATURE_NPT 0 /* Nested page table support */ diff --git a/23238-svm-decode-assist-insn-fetch.patch b/23238-svm-decode-assist-insn-fetch.patch new file mode 100644 index 0000000..bb2dd16 --- /dev/null +++ b/23238-svm-decode-assist-insn-fetch.patch @@ -0,0 +1,135 @@ +References: FATE#309900 + +# HG changeset patch +# User Keir Fraser +# Date 1303130170 -3600 +# Node ID 60f5df2afcbbe1e8d8438c2b7b8223d9d2102e06 +# Parent 381ab77db71a4739b8a4f4fdad4ef3504999f998 +svm: implement instruction fetch part of DecodeAssist (on #PF/#NPF) + +Newer SVM implementations (Bulldozer) copy up to 15 bytes from the +instruction stream into the VMCB when a #PF or #NPF exception is +intercepted. This patch makes use of this information if available. +This saves us from a) traversing the guest's page tables, b) mapping +the guest's memory and c) copy the instructions from there into the +hypervisor's address space. +This speeds up #NPF intercepts quite a lot and avoids cache and TLB +trashing. + +Signed-off-by: Andre Przywara +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/emulate.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/emulate.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/emulate.c +@@ -996,6 +996,8 @@ int hvm_emulate_one( + + hvmemul_ctxt->insn_buf_eip = regs->eip; + hvmemul_ctxt->insn_buf_bytes = ++ hvm_get_insn_bytes(curr, hvmemul_ctxt->insn_buf) ++ ? : + (hvm_virtual_to_linear_addr( + x86_seg_cs, &hvmemul_ctxt->seg_reg[x86_seg_cs], + regs->eip, sizeof(hvmemul_ctxt->insn_buf), +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +@@ -603,6 +603,21 @@ static void svm_set_rdtsc_exiting(struct + vmcb_set_general1_intercepts(vmcb, general1_intercepts); + } + ++static unsigned int svm_get_insn_bytes(struct vcpu *v, uint8_t *buf) ++{ ++ struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb; ++ unsigned int len = v->arch.hvm_svm.cached_insn_len; ++ ++ if ( len != 0 ) ++ { ++ /* Latch and clear the cached instruction. */ ++ memcpy(buf, vmcb->guest_ins, 15); ++ v->arch.hvm_svm.cached_insn_len = 0; ++ } ++ ++ return len; ++} ++ + static void svm_init_hypercall_page(struct domain *d, void *hypercall_page) + { + char *p; +@@ -1449,7 +1464,8 @@ static struct hvm_function_table __read_ + .msr_read_intercept = svm_msr_read_intercept, + .msr_write_intercept = svm_msr_write_intercept, + .invlpg_intercept = svm_invlpg_intercept, +- .set_rdtsc_exiting = svm_set_rdtsc_exiting ++ .set_rdtsc_exiting = svm_set_rdtsc_exiting, ++ .get_insn_bytes = svm_get_insn_bytes + }; + + asmlinkage void svm_vmexit_handler(struct cpu_user_regs *regs) +@@ -1555,7 +1571,12 @@ asmlinkage void svm_vmexit_handler(struc + (unsigned long)regs->ecx, (unsigned long)regs->edx, + (unsigned long)regs->esi, (unsigned long)regs->edi); + +- if ( paging_fault(va, regs) ) ++ if ( cpu_has_svm_decode ) ++ v->arch.hvm_svm.cached_insn_len = vmcb->guest_ins_len & 0xf; ++ rc = paging_fault(va, regs); ++ v->arch.hvm_svm.cached_insn_len = 0; ++ ++ if ( rc ) + { + if ( trace_will_trace_event(TRC_SHADOW) ) + break; +@@ -1721,7 +1742,10 @@ asmlinkage void svm_vmexit_handler(struc + case VMEXIT_NPF: + perfc_incra(svmexits, VMEXIT_NPF_PERFC); + regs->error_code = vmcb->exitinfo1; ++ if ( cpu_has_svm_decode ) ++ v->arch.hvm_svm.cached_insn_len = vmcb->guest_ins_len & 0xf; + svm_do_nested_pgfault(vmcb->exitinfo2); ++ v->arch.hvm_svm.cached_insn_len = 0; + break; + + case VMEXIT_IRET: { +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/hvm.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/hvm.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/hvm.h +@@ -132,6 +132,9 @@ struct hvm_function_table { + int (*cpu_up)(void); + void (*cpu_down)(void); + ++ /* Copy up to 15 bytes from cached instruction bytes at current rIP. */ ++ unsigned int (*get_insn_bytes)(struct vcpu *v, uint8_t *buf); ++ + /* Instruction intercepts: non-void return values are X86EMUL codes. */ + void (*cpuid_intercept)( + unsigned int *eax, unsigned int *ebx, +@@ -324,6 +327,11 @@ static inline void hvm_cpu_down(void) + hvm_funcs.cpu_down(); + } + ++static inline unsigned int hvm_get_insn_bytes(struct vcpu *v, uint8_t *buf) ++{ ++ return (hvm_funcs.get_insn_bytes ? hvm_funcs.get_insn_bytes(v, buf) : 0); ++} ++ + enum hvm_task_switch_reason { TSW_jmp, TSW_iret, TSW_call_or_int }; + void hvm_task_switch( + uint16_t tss_sel, enum hvm_task_switch_reason taskswitch_reason, +Index: xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/vmcb.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/hvm/svm/vmcb.h ++++ xen-4.1.1-testing/xen/include/asm-x86/hvm/svm/vmcb.h +@@ -498,6 +498,9 @@ struct arch_svm_struct { + int launch_core; + bool_t vmcb_in_sync; /* VMCB sync'ed with VMSAVE? */ + ++ /* VMCB has a cached instruction from #PF/#NPF Decode Assist? */ ++ uint8_t cached_insn_len; /* Zero if no cached instruction. */ ++ + /* Upper four bytes are undefined in the VMCB, therefore we can't + * use the fields in the VMCB. Write a 64bit value and then read a 64bit + * value is fine unless there's a VMRUN/VMEXIT in between which clears diff --git a/23303-cpufreq-misc.patch b/23303-cpufreq-misc.patch new file mode 100644 index 0000000..0b98a82 --- /dev/null +++ b/23303-cpufreq-misc.patch @@ -0,0 +1,209 @@ +# HG changeset patch +# User Jan Beulich +# Date 1304930762 -3600 +# Node ID 82180954eda9cfe279e7ecf8c9ed4ffa29796bfb +# Parent c822888f36568f26e95f9844c7f0c5e06df7aa20 +misc cpufreq cleanup + +- proper handling of governor command line options when using the + default governor +- warning message for unrecognized command line options +- replacing a NR_CPUS sized array with per-CPU data +- a couple of __read_mostly annotations + +Signed-off-by: Jan Beulich + +Index: xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/cpufreq/cpufreq.c ++++ xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq.c +@@ -47,7 +47,8 @@ + #include + #include + +-static unsigned int usr_max_freq, usr_min_freq; ++static unsigned int __read_mostly usr_min_freq; ++static unsigned int __read_mostly usr_max_freq; + static void cpufreq_cmdline_common_para(struct cpufreq_policy *new_policy); + + struct cpufreq_dom { +@@ -57,7 +58,7 @@ struct cpufreq_dom { + }; + static LIST_HEAD(cpufreq_dom_list_head); + +-struct cpufreq_governor *cpufreq_opt_governor; ++struct cpufreq_governor *__read_mostly cpufreq_opt_governor; + LIST_HEAD(cpufreq_governor_list); + + bool_t __read_mostly cpufreq_verbose; +@@ -543,6 +544,7 @@ void __init cpufreq_cmdline_parse(char * + { + static struct cpufreq_governor *__initdata cpufreq_governors[] = + { ++ CPUFREQ_DEFAULT_GOVERNOR, + &cpufreq_gov_userspace, + &cpufreq_gov_dbs, + &cpufreq_gov_performance, +@@ -576,8 +578,10 @@ void __init cpufreq_cmdline_parse(char * + } + + if (str && !cpufreq_handle_common_option(str, val) && +- cpufreq_governors[gov_index]->handle_option) +- cpufreq_governors[gov_index]->handle_option(str, val); ++ (!cpufreq_governors[gov_index]->handle_option || ++ !cpufreq_governors[gov_index]->handle_option(str, val))) ++ printk(XENLOG_WARNING "cpufreq/%s: option '%s' not recognized\n", ++ cpufreq_governors[gov_index]->name, str); + + str = end; + } while (str); +Index: xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq_misc_governors.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/cpufreq/cpufreq_misc_governors.c ++++ xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq_misc_governors.c +@@ -14,14 +14,17 @@ + * + */ + ++#include + #include ++#include + #include + #include + + /* + * cpufreq userspace governor + */ +-static unsigned int cpu_set_freq[NR_CPUS]; ++static unsigned int __read_mostly userspace_cmdline_freq; ++static DEFINE_PER_CPU(unsigned int, cpu_set_freq); + + static int cpufreq_governor_userspace(struct cpufreq_policy *policy, + unsigned int event) +@@ -35,21 +38,21 @@ static int cpufreq_governor_userspace(st + + switch (event) { + case CPUFREQ_GOV_START: +- if (!cpu_set_freq[cpu]) +- cpu_set_freq[cpu] = policy->cur; ++ if (!per_cpu(cpu_set_freq, cpu)) ++ per_cpu(cpu_set_freq, cpu) = policy->cur; + break; + case CPUFREQ_GOV_STOP: +- cpu_set_freq[cpu] = 0; ++ per_cpu(cpu_set_freq, cpu) = 0; + break; + case CPUFREQ_GOV_LIMITS: +- if (policy->max < cpu_set_freq[cpu]) ++ if (policy->max < per_cpu(cpu_set_freq, cpu)) + ret = __cpufreq_driver_target(policy, policy->max, + CPUFREQ_RELATION_H); +- else if (policy->min > cpu_set_freq[cpu]) ++ else if (policy->min > per_cpu(cpu_set_freq, cpu)) + ret = __cpufreq_driver_target(policy, policy->min, + CPUFREQ_RELATION_L); + else +- ret = __cpufreq_driver_target(policy, cpu_set_freq[cpu], ++ ret = __cpufreq_driver_target(policy, per_cpu(cpu_set_freq, cpu), + CPUFREQ_RELATION_L); + + break; +@@ -68,7 +71,7 @@ int write_userspace_scaling_setspeed(uns + if (!cpu_online(cpu) || !(policy = per_cpu(cpufreq_cpu_policy, cpu))) + return -EINVAL; + +- cpu_set_freq[cpu] = freq; ++ per_cpu(cpu_set_freq, cpu) = freq; + + if (freq < policy->min) + freq = policy->min; +@@ -78,19 +81,35 @@ int write_userspace_scaling_setspeed(uns + return __cpufreq_driver_target(policy, freq, CPUFREQ_RELATION_L); + } + +-static void __init ++static bool_t __init + cpufreq_userspace_handle_option(const char *name, const char *val) + { + if (!strcmp(name, "speed") && val) { +- unsigned int usr_cmdline_freq; +- unsigned int cpu; ++ userspace_cmdline_freq = simple_strtoul(val, NULL, 0); ++ return 1; ++ } ++ return 0; ++} + +- usr_cmdline_freq = simple_strtoul(val, NULL, 0); +- for (cpu = 0; cpu < NR_CPUS; cpu++) +- cpu_set_freq[cpu] = usr_cmdline_freq; ++static int cpufreq_userspace_cpu_callback( ++ struct notifier_block *nfb, unsigned long action, void *hcpu) ++{ ++ unsigned int cpu = (unsigned long)hcpu; ++ ++ switch (action) ++ { ++ case CPU_UP_PREPARE: ++ per_cpu(cpu_set_freq, cpu) = userspace_cmdline_freq; ++ break; + } ++ ++ return NOTIFY_DONE; + } + ++static struct notifier_block cpufreq_userspace_cpu_nfb = { ++ .notifier_call = cpufreq_userspace_cpu_callback ++}; ++ + struct cpufreq_governor cpufreq_gov_userspace = { + .name = "userspace", + .governor = cpufreq_governor_userspace, +@@ -99,6 +118,11 @@ struct cpufreq_governor cpufreq_gov_user + + static int __init cpufreq_gov_userspace_init(void) + { ++ unsigned int cpu; ++ ++ for_each_online_cpu(cpu) ++ per_cpu(cpu_set_freq, cpu) = userspace_cmdline_freq; ++ register_cpu_notifier(&cpufreq_userspace_cpu_nfb); + return cpufreq_register_governor(&cpufreq_gov_userspace); + } + __initcall(cpufreq_gov_userspace_init); +Index: xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq_ondemand.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/cpufreq/cpufreq_ondemand.c ++++ xen-4.1.1-testing/xen/drivers/cpufreq/cpufreq_ondemand.c +@@ -296,7 +296,7 @@ int cpufreq_governor_dbs(struct cpufreq_ + return 0; + } + +-static void __init cpufreq_dbs_handle_option(const char *name, const char *val) ++static bool_t __init cpufreq_dbs_handle_option(const char *name, const char *val) + { + if ( !strcmp(name, "rate") && val ) + { +@@ -334,6 +334,9 @@ static void __init cpufreq_dbs_handle_op + } + dbs_tuners_ins.powersave_bias = tmp; + } ++ else ++ return 0; ++ return 1; + } + + struct cpufreq_governor cpufreq_gov_dbs = { +Index: xen-4.1.1-testing/xen/include/acpi/cpufreq/cpufreq.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/acpi/cpufreq/cpufreq.h ++++ xen-4.1.1-testing/xen/include/acpi/cpufreq/cpufreq.h +@@ -93,7 +93,7 @@ struct cpufreq_governor { + char name[CPUFREQ_NAME_LEN]; + int (*governor)(struct cpufreq_policy *policy, + unsigned int event); +- void (*handle_option)(const char *name, const char *value); ++ bool_t (*handle_option)(const char *name, const char *value); + struct list_head governor_list; + }; + diff --git a/23304-amd-oprofile-strings.patch b/23304-amd-oprofile-strings.patch new file mode 100644 index 0000000..370a1f5 --- /dev/null +++ b/23304-amd-oprofile-strings.patch @@ -0,0 +1,42 @@ +References: FATE#309893, FATE#309902, FATE#309903, FATE#309906 + +# HG changeset patch +# User Jacob Shin +# Date 1304930954 -3600 +# Node ID 8981b582be3e2f6647ef5ff3d93e167436ed357a +# Parent 82180954eda9cfe279e7ecf8c9ed4ffa29796bfb +xenoprof: Update cpu_type to sync with upstream oprofile + +Update xenoprof's cpu_type to match upstream oprofile. Currently AMD +Family 11h ~ Family 15h are broken due to string mismatches. + +Signed-off-by: Jacob Shin + +Index: xen-4.1.1-testing/xen/arch/x86/oprofile/nmi_int.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/oprofile/nmi_int.c ++++ xen-4.1.1-testing/xen/arch/x86/oprofile/nmi_int.c +@@ -435,19 +435,19 @@ static int __init nmi_init(void) + break; + case 0x11: + model = &op_athlon_spec; +- cpu_type = "x86-64/family11"; ++ cpu_type = "x86-64/family11h"; + break; + case 0x12: + model = &op_athlon_spec; +- cpu_type = "x86-64/family12"; ++ cpu_type = "x86-64/family12h"; + break; + case 0x14: + model = &op_athlon_spec; +- cpu_type = "x86-64/family14"; ++ cpu_type = "x86-64/family14h"; + break; + case 0x15: + model = &op_athlon_spec; +- cpu_type = "x86-64/family15"; ++ cpu_type = "x86-64/family15h"; + break; + } + break; diff --git a/23305-amd-fam15-xenoprof.patch b/23305-amd-fam15-xenoprof.patch new file mode 100644 index 0000000..112e47b --- /dev/null +++ b/23305-amd-fam15-xenoprof.patch @@ -0,0 +1,223 @@ +References: FATE#309893, FATE#309906 + +# HG changeset patch +# User Jacob Shin +# Date 1304931187 -3600 +# Node ID 014ee4e09644bd3ae55919d267f742c1d60c337a +# Parent 8981b582be3e2f6647ef5ff3d93e167436ed357a +xenoprof: Add support for AMD Family 15h processors + +AMD Family 15h CPU mirrors legacy K7 performance monitor counters to +a new location, and adds 2 new counters. This patch updates xenoprof +to take advantage of the new counters. + +Signed-off-by: Jacob Shin + +Rename fam15h -> amd_fam15h in a few places, as suggested by Jan +Beulich. + +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/arch/x86/oprofile/nmi_int.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/oprofile/nmi_int.c ++++ xen-4.1.1-testing/xen/arch/x86/oprofile/nmi_int.c +@@ -30,7 +30,7 @@ + struct op_counter_config counter_config[OP_MAX_COUNTER]; + struct op_ibs_config ibs_config; + +-static struct op_x86_model_spec const *__read_mostly model; ++struct op_x86_model_spec const *__read_mostly model; + static struct op_msrs cpu_msrs[NR_CPUS]; + static unsigned long saved_lvtpc[NR_CPUS]; + +@@ -446,7 +446,7 @@ static int __init nmi_init(void) + cpu_type = "x86-64/family14h"; + break; + case 0x15: +- model = &op_athlon_spec; ++ model = &op_amd_fam15h_spec; + cpu_type = "x86-64/family15h"; + break; + } +Index: xen-4.1.1-testing/xen/arch/x86/oprofile/op_model_athlon.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/oprofile/op_model_athlon.c ++++ xen-4.1.1-testing/xen/arch/x86/oprofile/op_model_athlon.c +@@ -24,8 +24,13 @@ + #include "op_x86_model.h" + #include "op_counter.h" + +-#define NUM_COUNTERS 4 +-#define NUM_CONTROLS 4 ++#define K7_NUM_COUNTERS 4 ++#define K7_NUM_CONTROLS 4 ++ ++#define FAM15H_NUM_COUNTERS 6 ++#define FAM15H_NUM_CONTROLS 6 ++ ++#define MAX_COUNTERS FAM15H_NUM_COUNTERS + + #define CTR_READ(msr_content,msrs,c) do {rdmsrl(msrs->counters[(c)].addr, (msr_content));} while (0) + #define CTR_WRITE(l,msrs,c) do {wrmsr(msrs->counters[(c)].addr, -(unsigned int)(l), -1);} while (0) +@@ -44,9 +49,10 @@ + #define CTRL_SET_HOST_ONLY(val, h) (val |= ((h & 0x1ULL) << 41)) + #define CTRL_SET_GUEST_ONLY(val, h) (val |= ((h & 0x1ULL) << 40)) + +-static unsigned long reset_value[NUM_COUNTERS]; ++static unsigned long reset_value[MAX_COUNTERS]; + + extern char svm_stgi_label[]; ++extern struct op_x86_model_spec const *__read_mostly model; + + #ifdef CONFIG_X86_64 + u32 ibs_caps = 0; +@@ -175,26 +181,44 @@ static void athlon_fill_in_addresses(str + msrs->controls[3].addr = MSR_K7_EVNTSEL3; + } + +- ++static void fam15h_fill_in_addresses(struct op_msrs * const msrs) ++{ ++ msrs->counters[0].addr = MSR_AMD_FAM15H_PERFCTR0; ++ msrs->counters[1].addr = MSR_AMD_FAM15H_PERFCTR1; ++ msrs->counters[2].addr = MSR_AMD_FAM15H_PERFCTR2; ++ msrs->counters[3].addr = MSR_AMD_FAM15H_PERFCTR3; ++ msrs->counters[4].addr = MSR_AMD_FAM15H_PERFCTR4; ++ msrs->counters[5].addr = MSR_AMD_FAM15H_PERFCTR5; ++ ++ msrs->controls[0].addr = MSR_AMD_FAM15H_EVNTSEL0; ++ msrs->controls[1].addr = MSR_AMD_FAM15H_EVNTSEL1; ++ msrs->controls[2].addr = MSR_AMD_FAM15H_EVNTSEL2; ++ msrs->controls[3].addr = MSR_AMD_FAM15H_EVNTSEL3; ++ msrs->controls[4].addr = MSR_AMD_FAM15H_EVNTSEL4; ++ msrs->controls[5].addr = MSR_AMD_FAM15H_EVNTSEL5; ++} ++ + static void athlon_setup_ctrs(struct op_msrs const * const msrs) + { + uint64_t msr_content; + int i; ++ unsigned int const nr_ctrs = model->num_counters; ++ unsigned int const nr_ctrls = model->num_controls; + + /* clear all counters */ +- for (i = 0 ; i < NUM_CONTROLS; ++i) { ++ for (i = 0 ; i < nr_ctrls; ++i) { + CTRL_READ(msr_content, msrs, i); + CTRL_CLEAR(msr_content); + CTRL_WRITE(msr_content, msrs, i); + } + + /* avoid a false detection of ctr overflows in NMI handler */ +- for (i = 0; i < NUM_COUNTERS; ++i) { ++ for (i = 0; i < nr_ctrs; ++i) { + CTR_WRITE(1, msrs, i); + } + + /* enable active counters */ +- for (i = 0; i < NUM_COUNTERS; ++i) { ++ for (i = 0; i < nr_ctrs; ++i) { + if (counter_config[i].enabled) { + reset_value[i] = counter_config[i].count; + +@@ -300,6 +324,7 @@ static int athlon_check_ctrs(unsigned in + int mode = 0; + struct vcpu *v = current; + struct cpu_user_regs *guest_regs = guest_cpu_user_regs(); ++ unsigned int const nr_ctrs = model->num_counters; + + if (!guest_mode(regs) && + (regs->eip == (unsigned long)svm_stgi_label)) { +@@ -312,7 +337,7 @@ static int athlon_check_ctrs(unsigned in + mode = xenoprofile_get_mode(v, regs); + } + +- for (i = 0 ; i < NUM_COUNTERS; ++i) { ++ for (i = 0 ; i < nr_ctrs; ++i) { + CTR_READ(msr_content, msrs, i); + if (CTR_OVERFLOWED(msr_content)) { + xenoprof_log_event(current, regs, eip, mode, i); +@@ -373,7 +398,8 @@ static void athlon_start(struct op_msrs + { + uint64_t msr_content; + int i; +- for (i = 0 ; i < NUM_COUNTERS ; ++i) { ++ unsigned int const nr_ctrs = model->num_counters; ++ for (i = 0 ; i < nr_ctrs ; ++i) { + if (reset_value[i]) { + CTRL_READ(msr_content, msrs, i); + CTRL_SET_ACTIVE(msr_content); +@@ -401,10 +427,11 @@ static void athlon_stop(struct op_msrs c + { + uint64_t msr_content; + int i; ++ unsigned int const nr_ctrs = model->num_counters; + + /* Subtle: stop on all counters to avoid race with + * setting our pm callback */ +- for (i = 0 ; i < NUM_COUNTERS ; ++i) { ++ for (i = 0 ; i < nr_ctrs ; ++i) { + CTRL_READ(msr_content, msrs, i); + CTRL_SET_INACTIVE(msr_content); + CTRL_WRITE(msr_content, msrs, i); +@@ -512,11 +539,21 @@ void __init ibs_init(void) + #endif /* CONFIG_X86_64 */ + + struct op_x86_model_spec const op_athlon_spec = { +- .num_counters = NUM_COUNTERS, +- .num_controls = NUM_CONTROLS, ++ .num_counters = K7_NUM_COUNTERS, ++ .num_controls = K7_NUM_CONTROLS, + .fill_in_addresses = &athlon_fill_in_addresses, + .setup_ctrs = &athlon_setup_ctrs, + .check_ctrs = &athlon_check_ctrs, + .start = &athlon_start, ++ .stop = &athlon_stop ++}; ++ ++struct op_x86_model_spec const op_amd_fam15h_spec = { ++ .num_counters = FAM15H_NUM_COUNTERS, ++ .num_controls = FAM15H_NUM_CONTROLS, ++ .fill_in_addresses = &fam15h_fill_in_addresses, ++ .setup_ctrs = &athlon_setup_ctrs, ++ .check_ctrs = &athlon_check_ctrs, ++ .start = &athlon_start, + .stop = &athlon_stop + }; +Index: xen-4.1.1-testing/xen/arch/x86/oprofile/op_x86_model.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/oprofile/op_x86_model.h ++++ xen-4.1.1-testing/xen/arch/x86/oprofile/op_x86_model.h +@@ -48,6 +48,7 @@ extern struct op_x86_model_spec op_arch_ + extern struct op_x86_model_spec const op_p4_spec; + extern struct op_x86_model_spec const op_p4_ht2_spec; + extern struct op_x86_model_spec const op_athlon_spec; ++extern struct op_x86_model_spec const op_amd_fam15h_spec; + + void arch_perfmon_setup_counters(void); + #endif /* OP_X86_MODEL_H */ +Index: xen-4.1.1-testing/xen/include/asm-x86/msr-index.h +=================================================================== +--- xen-4.1.1-testing.orig/xen/include/asm-x86/msr-index.h ++++ xen-4.1.1-testing/xen/include/asm-x86/msr-index.h +@@ -224,6 +224,19 @@ + #define MSR_K8_VM_CR 0xc0010114 + #define MSR_K8_VM_HSAVE_PA 0xc0010117 + ++#define MSR_AMD_FAM15H_EVNTSEL0 0xc0010200 ++#define MSR_AMD_FAM15H_PERFCTR0 0xc0010201 ++#define MSR_AMD_FAM15H_EVNTSEL1 0xc0010202 ++#define MSR_AMD_FAM15H_PERFCTR1 0xc0010203 ++#define MSR_AMD_FAM15H_EVNTSEL2 0xc0010204 ++#define MSR_AMD_FAM15H_PERFCTR2 0xc0010205 ++#define MSR_AMD_FAM15H_EVNTSEL3 0xc0010206 ++#define MSR_AMD_FAM15H_PERFCTR3 0xc0010207 ++#define MSR_AMD_FAM15H_EVNTSEL4 0xc0010208 ++#define MSR_AMD_FAM15H_PERFCTR4 0xc0010209 ++#define MSR_AMD_FAM15H_EVNTSEL5 0xc001020a ++#define MSR_AMD_FAM15H_PERFCTR5 0xc001020b ++ + #define MSR_K8_FEATURE_MASK 0xc0011004 + #define MSR_K8_EXT_FEATURE_MASK 0xc0011005 + diff --git a/23306-amd-fam15-vpmu.patch b/23306-amd-fam15-vpmu.patch new file mode 100644 index 0000000..391f74f --- /dev/null +++ b/23306-amd-fam15-vpmu.patch @@ -0,0 +1,261 @@ +References: FATE#309893, FATE#309906 + +# HG changeset patch +# User Jacob Shin +# Date 1304931286 -3600 +# Node ID e787d4f2e5acdba48728a9390710de800315a540 +# Parent 014ee4e09644bd3ae55919d267f742c1d60c337a +hvm: vpmu: Add support for AMD Family 15h processors + +AMD Family 15h CPU mirrors legacy K7 performance monitor counters to +a new location, and adds 2 new counters. This patch updates HVM VPMU +to take advantage of the new counters. + +Signed-off-by: Jacob Shin + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/svm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/svm.c +@@ -1143,6 +1143,18 @@ static int svm_msr_read_intercept(unsign + case MSR_K7_EVNTSEL1: + case MSR_K7_EVNTSEL2: + case MSR_K7_EVNTSEL3: ++ case MSR_AMD_FAM15H_PERFCTR0: ++ case MSR_AMD_FAM15H_PERFCTR1: ++ case MSR_AMD_FAM15H_PERFCTR2: ++ case MSR_AMD_FAM15H_PERFCTR3: ++ case MSR_AMD_FAM15H_PERFCTR4: ++ case MSR_AMD_FAM15H_PERFCTR5: ++ case MSR_AMD_FAM15H_EVNTSEL0: ++ case MSR_AMD_FAM15H_EVNTSEL1: ++ case MSR_AMD_FAM15H_EVNTSEL2: ++ case MSR_AMD_FAM15H_EVNTSEL3: ++ case MSR_AMD_FAM15H_EVNTSEL4: ++ case MSR_AMD_FAM15H_EVNTSEL5: + vpmu_do_rdmsr(msr, msr_content); + break; + +@@ -1238,6 +1250,18 @@ static int svm_msr_write_intercept(unsig + case MSR_K7_EVNTSEL1: + case MSR_K7_EVNTSEL2: + case MSR_K7_EVNTSEL3: ++ case MSR_AMD_FAM15H_PERFCTR0: ++ case MSR_AMD_FAM15H_PERFCTR1: ++ case MSR_AMD_FAM15H_PERFCTR2: ++ case MSR_AMD_FAM15H_PERFCTR3: ++ case MSR_AMD_FAM15H_PERFCTR4: ++ case MSR_AMD_FAM15H_PERFCTR5: ++ case MSR_AMD_FAM15H_EVNTSEL0: ++ case MSR_AMD_FAM15H_EVNTSEL1: ++ case MSR_AMD_FAM15H_EVNTSEL2: ++ case MSR_AMD_FAM15H_EVNTSEL3: ++ case MSR_AMD_FAM15H_EVNTSEL4: ++ case MSR_AMD_FAM15H_EVNTSEL5: + vpmu_do_wrmsr(msr, msr_content); + break; + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/vpmu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/vpmu.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/vpmu.c +@@ -36,7 +36,9 @@ + #include + #include + +-#define NUM_COUNTERS 4 ++#define F10H_NUM_COUNTERS 4 ++#define F15H_NUM_COUNTERS 6 ++#define MAX_NUM_COUNTERS F15H_NUM_COUNTERS + + #define MSR_F10H_EVNTSEL_GO_SHIFT 40 + #define MSR_F10H_EVNTSEL_EN_SHIFT 22 +@@ -47,6 +49,11 @@ + #define set_guest_mode(msr) (msr |= (1ULL << MSR_F10H_EVNTSEL_GO_SHIFT)) + #define is_overflowed(msr) (!((msr) & (1ULL << (MSR_F10H_COUNTER_LENGTH-1)))) + ++static int __read_mostly num_counters = 0; ++static u32 __read_mostly *counters = NULL; ++static u32 __read_mostly *ctrls = NULL; ++static bool_t __read_mostly k7_counters_mirrored = 0; ++ + /* PMU Counter MSRs. */ + u32 AMD_F10H_COUNTERS[] = { + MSR_K7_PERFCTR0, +@@ -63,10 +70,28 @@ u32 AMD_F10H_CTRLS[] = { + MSR_K7_EVNTSEL3 + }; + ++u32 AMD_F15H_COUNTERS[] = { ++ MSR_AMD_FAM15H_PERFCTR0, ++ MSR_AMD_FAM15H_PERFCTR1, ++ MSR_AMD_FAM15H_PERFCTR2, ++ MSR_AMD_FAM15H_PERFCTR3, ++ MSR_AMD_FAM15H_PERFCTR4, ++ MSR_AMD_FAM15H_PERFCTR5 ++}; ++ ++u32 AMD_F15H_CTRLS[] = { ++ MSR_AMD_FAM15H_EVNTSEL0, ++ MSR_AMD_FAM15H_EVNTSEL1, ++ MSR_AMD_FAM15H_EVNTSEL2, ++ MSR_AMD_FAM15H_EVNTSEL3, ++ MSR_AMD_FAM15H_EVNTSEL4, ++ MSR_AMD_FAM15H_EVNTSEL5 ++}; ++ + /* storage for context switching */ + struct amd_vpmu_context { +- u64 counters[NUM_COUNTERS]; +- u64 ctrls[NUM_COUNTERS]; ++ u64 counters[MAX_NUM_COUNTERS]; ++ u64 ctrls[MAX_NUM_COUNTERS]; + u32 hw_lapic_lvtpc; + }; + +@@ -78,10 +103,45 @@ static inline int get_pmu_reg_type(u32 a + if ( (addr >= MSR_K7_PERFCTR0) && (addr <= MSR_K7_PERFCTR3) ) + return MSR_TYPE_COUNTER; + ++ if ( (addr >= MSR_AMD_FAM15H_EVNTSEL0) && ++ (addr <= MSR_AMD_FAM15H_PERFCTR5 ) ) ++ { ++ if (addr & 1) ++ return MSR_TYPE_COUNTER; ++ else ++ return MSR_TYPE_CTRL; ++ } ++ + /* unsupported registers */ + return -1; + } + ++static inline u32 get_fam15h_addr(u32 addr) ++{ ++ switch ( addr ) ++ { ++ case MSR_K7_PERFCTR0: ++ return MSR_AMD_FAM15H_PERFCTR0; ++ case MSR_K7_PERFCTR1: ++ return MSR_AMD_FAM15H_PERFCTR1; ++ case MSR_K7_PERFCTR2: ++ return MSR_AMD_FAM15H_PERFCTR2; ++ case MSR_K7_PERFCTR3: ++ return MSR_AMD_FAM15H_PERFCTR3; ++ case MSR_K7_EVNTSEL0: ++ return MSR_AMD_FAM15H_EVNTSEL0; ++ case MSR_K7_EVNTSEL1: ++ return MSR_AMD_FAM15H_EVNTSEL1; ++ case MSR_K7_EVNTSEL2: ++ return MSR_AMD_FAM15H_EVNTSEL2; ++ case MSR_K7_EVNTSEL3: ++ return MSR_AMD_FAM15H_EVNTSEL3; ++ default: ++ break; ++ } ++ ++ return addr; ++} + + static int amd_vpmu_do_interrupt(struct cpu_user_regs *regs) + { +@@ -110,12 +170,12 @@ static inline void context_restore(struc + struct vpmu_struct *vpmu = vcpu_vpmu(v); + struct amd_vpmu_context *ctxt = vpmu->context; + +- for ( i = 0; i < NUM_COUNTERS; i++ ) +- wrmsrl(AMD_F10H_CTRLS[i], ctxt->ctrls[i]); ++ for ( i = 0; i < num_counters; i++ ) ++ wrmsrl(ctrls[i], ctxt->ctrls[i]); + +- for ( i = 0; i < NUM_COUNTERS; i++ ) ++ for ( i = 0; i < num_counters; i++ ) + { +- wrmsrl(AMD_F10H_COUNTERS[i], ctxt->counters[i]); ++ wrmsrl(counters[i], ctxt->counters[i]); + + /* Force an interrupt to allow guest reset the counter, + if the value is positive */ +@@ -147,11 +207,11 @@ static inline void context_save(struct v + struct vpmu_struct *vpmu = vcpu_vpmu(v); + struct amd_vpmu_context *ctxt = vpmu->context; + +- for ( i = 0; i < NUM_COUNTERS; i++ ) +- rdmsrl(AMD_F10H_COUNTERS[i], ctxt->counters[i]); ++ for ( i = 0; i < num_counters; i++ ) ++ rdmsrl(counters[i], ctxt->counters[i]); + +- for ( i = 0; i < NUM_COUNTERS; i++ ) +- rdmsrl(AMD_F10H_CTRLS[i], ctxt->ctrls[i]); ++ for ( i = 0; i < num_counters; i++ ) ++ rdmsrl(ctrls[i], ctxt->ctrls[i]); + } + + static void amd_vpmu_save(struct vcpu *v) +@@ -175,12 +235,18 @@ static void context_update(unsigned int + struct vpmu_struct *vpmu = vcpu_vpmu(v); + struct amd_vpmu_context *ctxt = vpmu->context; + +- for ( i = 0; i < NUM_COUNTERS; i++ ) +- if ( msr == AMD_F10H_COUNTERS[i] ) ++ if ( k7_counters_mirrored && ++ ((msr >= MSR_K7_EVNTSEL0) && (msr <= MSR_K7_PERFCTR3)) ) ++ { ++ msr = get_fam15h_addr(msr); ++ } ++ ++ for ( i = 0; i < num_counters; i++ ) ++ if ( msr == counters[i] ) + ctxt->counters[i] = msr_content; + +- for ( i = 0; i < NUM_COUNTERS; i++ ) +- if ( msr == AMD_F10H_CTRLS[i] ) ++ for ( i = 0; i < num_counters; i++ ) ++ if ( msr == ctrls[i] ) + ctxt->ctrls[i] = msr_content; + + ctxt->hw_lapic_lvtpc = apic_read(APIC_LVTPC); +@@ -235,10 +301,31 @@ static void amd_vpmu_initialise(struct v + { + struct amd_vpmu_context *ctxt = NULL; + struct vpmu_struct *vpmu = vcpu_vpmu(v); ++ __u8 family = current_cpu_data.x86; + + if ( vpmu->flags & VPMU_CONTEXT_ALLOCATED ) + return; + ++ if ( counters == NULL ) ++ { ++ switch ( family ) ++ { ++ case 0x15: ++ num_counters = F15H_NUM_COUNTERS; ++ counters = AMD_F15H_COUNTERS; ++ ctrls = AMD_F15H_CTRLS; ++ k7_counters_mirrored = 1; ++ break; ++ case 0x10: ++ default: ++ num_counters = F10H_NUM_COUNTERS; ++ counters = AMD_F10H_COUNTERS; ++ ctrls = AMD_F10H_CTRLS; ++ k7_counters_mirrored = 0; ++ break; ++ } ++ } ++ + ctxt = xmalloc_bytes(sizeof(struct amd_vpmu_context)); + + if ( !ctxt ) +Index: xen-4.1.1-testing/xen/arch/x86/hvm/vpmu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/vpmu.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/vpmu.c +@@ -101,6 +101,7 @@ void vpmu_initialise(struct vcpu *v) + switch ( family ) + { + case 0x10: ++ case 0x15: + vpmu->arch_vpmu_ops = &amd_vpmu_ops; + break; + default: diff --git a/23334-amd-fam12+14-vpmu.patch b/23334-amd-fam12+14-vpmu.patch new file mode 100644 index 0000000..e749d65 --- /dev/null +++ b/23334-amd-fam12+14-vpmu.patch @@ -0,0 +1,40 @@ +References: FATE#309902, FATE#309903 + +# HG changeset patch +# User Jacob Shin +# Date 1305188046 -3600 +# Node ID 23e33ea79cac0303c729d4e82905054cded16348 +# Parent fabdd682420c0c7b5e81f07f2f54211ebc11babe +hvm: vpmu: Enable HVM VPMU for AMD Family 12h and 14h processors + +HVM VPMU support can be enabled for AMD Family 12h and 14h processors +by taking the same code path as 10h. + +Signed-off-by: Jacob Shin + +Index: xen-4.1.1-testing/xen/arch/x86/hvm/svm/vpmu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/svm/vpmu.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/svm/vpmu.c +@@ -317,6 +317,8 @@ static void amd_vpmu_initialise(struct v + k7_counters_mirrored = 1; + break; + case 0x10: ++ case 0x12: ++ case 0x14: + default: + num_counters = F10H_NUM_COUNTERS; + counters = AMD_F10H_COUNTERS; +Index: xen-4.1.1-testing/xen/arch/x86/hvm/vpmu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/vpmu.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/vpmu.c +@@ -101,6 +101,8 @@ void vpmu_initialise(struct vcpu *v) + switch ( family ) + { + case 0x10: ++ case 0x12: ++ case 0x14: + case 0x15: + vpmu->arch_vpmu_ops = &amd_vpmu_ops; + break; diff --git a/23338-vtd-force-intremap.patch b/23338-vtd-force-intremap.patch new file mode 100644 index 0000000..490c8e4 --- /dev/null +++ b/23338-vtd-force-intremap.patch @@ -0,0 +1,38 @@ +# HG changeset patch +# User Keir Fraser +# Date 1305214920 -3600 +# Node ID 9751bc49639ec4e34837545cdc982d0768e46d94 +# Parent cc91832a02c7cb6b09729ca8e9fc497e5cb2ba4d +vt-d: [CVE-2011-1898] Ensure that "iommu=required" enables interrupt remapping. + +Ensure that when Xen boots with "iommu=required" it will also insist +that interrupt remapping is supported and enabled. It arranges that +booting with that option on vulnerable hardware will fail, rather than +appearing to succeed but actually being vulnerable to guests. + +From: Allen Kay +Signed-off-by: Keir Fraser + +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/iommu.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/iommu.c +@@ -1985,6 +1985,8 @@ static int init_vtd_hw(void) + "ioapic_to_iommu: ioapic 0x%x (id: 0x%x) is NULL! " + "Will not try to enable Interrupt Remapping.\n", + apic, IO_APIC_ID(apic)); ++ if ( force_iommu ) ++ panic("intremap remapping failed to enable with iommu=required/force in grub\n"); + break; + } + } +@@ -1998,6 +2000,9 @@ static int init_vtd_hw(void) + { + dprintk(XENLOG_WARNING VTDPREFIX, + "Interrupt Remapping not enabled\n"); ++ ++ if ( force_iommu && platform_supports_intremap() ) ++ panic("intremap remapping failed to enable with iommu=required/force in grub\n"); + break; + } + } diff --git a/32on64-extra-mem.patch b/32on64-extra-mem.patch index 8064718..78ac89c 100644 --- a/32on64-extra-mem.patch +++ b/32on64-extra-mem.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -2913,7 +2913,7 @@ class XendDomainInfo: self.guest_bitsize = self.image.getBitSize() diff --git a/altgr_2.patch b/altgr_2.patch index 8a53d6d..d683ae0 100644 --- a/altgr_2.patch +++ b/altgr_2.patch @@ -29,10 +29,10 @@ keycodes up and down events and make sure the intentionally added altgr keycode Signed-off by Chunyan Liu (cyliu@novell.com) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/vnc.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/vnc.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c @@ -1308,6 +1308,9 @@ static void do_key_event(VncState *vs, i shift_keys = vs->modifiers_state[0x2a] | vs->modifiers_state[0x36]; altgr_keys = vs->modifiers_state[0xb8]; diff --git a/bdrv_default_rwflag.patch b/bdrv_default_rwflag.patch index fb6de00..3bf5317 100644 --- a/bdrv_default_rwflag.patch +++ b/bdrv_default_rwflag.patch @@ -1,10 +1,10 @@ Subject: modify default read/write flag in bdrv_init. Signed-off by Chunyan Liu -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vl.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/vl.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/vl.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/vl.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/vl.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/vl.c @@ -2617,6 +2617,8 @@ int drive_init(struct drive_opt *arg, in strncpy(drives_table[nb_drives].serial, serial, sizeof(serial)); nb_drives++; diff --git a/bdrv_open2_fix_flags.patch b/bdrv_open2_fix_flags.patch index dfbb84e..ff6e219 100644 --- a/bdrv_open2_fix_flags.patch +++ b/bdrv_open2_fix_flags.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/block.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/block.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/block.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/block.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/block.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/block.c @@ -350,7 +350,7 @@ int bdrv_file_open(BlockDriverState **pb int bdrv_open(BlockDriverState *bs, const char *filename, int flags) @@ -28,10 +28,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/block.c ret = drv->bdrv_open(bs, filename, open_flags); if ((ret == -EACCES || ret == -EPERM) && !(flags & BDRV_O_FILE)) { ret = drv->bdrv_open(bs, filename, open_flags & ~BDRV_O_RDWR); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/usb-msd.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/usb-msd.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/usb-msd.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/usb-msd.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/usb-msd.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/usb-msd.c @@ -551,7 +551,7 @@ USBDevice *usb_msd_init(const char *file s = qemu_mallocz(sizeof(MSDState)); @@ -41,10 +41,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/usb-msd.c goto fail; s->bs = bdrv; *pbs = bdrv; -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-img.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-img.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-img.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-img.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-img.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-img.c @@ -32,7 +32,7 @@ #endif diff --git a/bdrv_open2_flags_2.patch b/bdrv_open2_flags_2.patch index 38b4045..e44888e 100644 --- a/bdrv_open2_flags_2.patch +++ b/bdrv_open2_flags_2.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -237,6 +237,7 @@ static int open_disk(struct td_state *s, BlockDriver* drv; char* devname; @@ -19,10 +19,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c fprintf(stderr, "Could not open image file %s\n", path); return -ENOMEM; } -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -136,7 +136,8 @@ static void insert_media(void *opaque) else format = &bdrv_raw; diff --git a/blktap-pv-cdrom.patch b/blktap-pv-cdrom.patch index 26aae02..bfc1f6a 100644 --- a/blktap-pv-cdrom.patch +++ b/blktap-pv-cdrom.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/blktap/drivers/block-cdrom.c +Index: xen-4.1.1-testing/tools/blktap/drivers/block-cdrom.c =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/blktap/drivers/block-cdrom.c ++++ xen-4.1.1-testing/tools/blktap/drivers/block-cdrom.c @@ -0,0 +1,535 @@ +/* block-cdrom.c + * @@ -538,10 +538,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/block-cdrom.c + .td_get_parent_id = tdcdrom_get_parent_id, + .td_validate_parent = tdcdrom_validate_parent +}; -Index: xen-4.1.0-testing/xen/include/public/io/cdromif.h +Index: xen-4.1.1-testing/xen/include/public/io/cdromif.h =================================================================== --- /dev/null -+++ xen-4.1.0-testing/xen/include/public/io/cdromif.h ++++ xen-4.1.1-testing/xen/include/public/io/cdromif.h @@ -0,0 +1,122 @@ +/****************************************************************************** + * cdromif.h @@ -665,10 +665,10 @@ Index: xen-4.1.0-testing/xen/include/public/io/cdromif.h + sizeof(struct vcd_generic_command) - sizeof(struct request_sense)) + +#endif -Index: xen-4.1.0-testing/tools/blktap/drivers/Makefile +Index: xen-4.1.1-testing/tools/blktap/drivers/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/Makefile -+++ xen-4.1.0-testing/tools/blktap/drivers/Makefile +--- xen-4.1.1-testing.orig/tools/blktap/drivers/Makefile ++++ xen-4.1.1-testing/tools/blktap/drivers/Makefile @@ -28,8 +28,9 @@ CFLAGS += -DMEMSHR MEMSHRLIBS += $(MEMSHR_DIR)/libmemshr.a endif @@ -689,10 +689,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/Makefile BLK-OBJS-y += aes.o BLK-OBJS-y += tapaio.o BLK-OBJS-$(CONFIG_Linux) += blk_linux.o -Index: xen-4.1.0-testing/tools/blktap/drivers/tapdisk.h +Index: xen-4.1.1-testing/tools/blktap/drivers/tapdisk.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/tapdisk.h -+++ xen-4.1.0-testing/tools/blktap/drivers/tapdisk.h +--- xen-4.1.1-testing.orig/tools/blktap/drivers/tapdisk.h ++++ xen-4.1.1-testing/tools/blktap/drivers/tapdisk.h @@ -137,6 +137,9 @@ struct tap_disk { int (*td_get_parent_id) (struct disk_driver *dd, struct disk_id *id); int (*td_validate_parent)(struct disk_driver *dd, @@ -737,10 +737,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/tapdisk.h }; typedef struct driver_list_entry { -Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +Index: xen-4.1.1-testing/tools/blktap/lib/blktaplib.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/lib/blktaplib.h -+++ xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +--- xen-4.1.1-testing.orig/tools/blktap/lib/blktaplib.h ++++ xen-4.1.1-testing/tools/blktap/lib/blktaplib.h @@ -225,6 +225,7 @@ typedef struct msg_pid { #define DISK_TYPE_RAM 3 #define DISK_TYPE_QCOW 4 @@ -749,10 +749,10 @@ Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h /* xenstore/xenbus: */ #define DOMNAME "Domain-0" -Index: xen-4.1.0-testing/xen/include/public/io/blkif.h +Index: xen-4.1.1-testing/xen/include/public/io/blkif.h =================================================================== ---- xen-4.1.0-testing.orig/xen/include/public/io/blkif.h -+++ xen-4.1.0-testing/xen/include/public/io/blkif.h +--- xen-4.1.1-testing.orig/xen/include/public/io/blkif.h ++++ xen-4.1.1-testing/xen/include/public/io/blkif.h @@ -80,7 +80,7 @@ * Used in SLES sources for device specific command packet * contained within the request. Reserved for that purpose. @@ -762,10 +762,10 @@ Index: xen-4.1.0-testing/xen/include/public/io/blkif.h /* * Recognised only if "feature-trim" is present in backend xenbus info. * The "feature-trim" node contains a boolean indicating whether trim -Index: xen-4.1.0-testing/tools/blktap/drivers/tapdisk.c +Index: xen-4.1.1-testing/tools/blktap/drivers/tapdisk.c =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/tapdisk.c -+++ xen-4.1.0-testing/tools/blktap/drivers/tapdisk.c +--- xen-4.1.1-testing.orig/tools/blktap/drivers/tapdisk.c ++++ xen-4.1.1-testing/tools/blktap/drivers/tapdisk.c @@ -735,6 +735,22 @@ static void get_io_request(struct td_sta goto out; } @@ -789,10 +789,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/tapdisk.c default: DPRINTF("Unknown block operation\n"); break; -Index: xen-4.1.0-testing/tools/python/xen/xend/server/BlktapController.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/BlktapController.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/BlktapController.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/BlktapController.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/BlktapController.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/BlktapController.py @@ -15,6 +15,7 @@ blktap1_disk_types = [ 'ram', 'qcow', diff --git a/blktap.patch b/blktap.patch index c55c388..9101401 100644 --- a/blktap.patch +++ b/blktap.patch @@ -1,10 +1,10 @@ bug #239173 bug #242953 -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -3295,7 +3295,7 @@ class XendDomainInfo: (fn, BOOTLOADER_LOOPBACK_DEVICE)) @@ -14,10 +14,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py 'device': BOOTLOADER_LOOPBACK_DEVICE, } -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -447,9 +447,9 @@ void xenstore_parse_domain_config(int hv { char **e_danger = NULL; diff --git a/blktapctrl-default-to-ioemu.patch b/blktapctrl-default-to-ioemu.patch index e48bf7f..050a4b4 100644 --- a/blktapctrl-default-to-ioemu.patch +++ b/blktapctrl-default-to-ioemu.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/blktap/drivers/tapdisk.h +Index: xen-4.1.1-testing/tools/blktap/drivers/tapdisk.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/tapdisk.h -+++ xen-4.1.0-testing/tools/blktap/drivers/tapdisk.h +--- xen-4.1.1-testing.orig/tools/blktap/drivers/tapdisk.h ++++ xen-4.1.1-testing/tools/blktap/drivers/tapdisk.h @@ -168,7 +168,7 @@ static disk_info_t aio_disk = { "raw image (aio)", "aio", diff --git a/bridge-bonding.diff b/bridge-bonding.diff index cbe6cb4..e3f60cf 100644 --- a/bridge-bonding.diff +++ b/bridge-bonding.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-bridge @@ -249,6 +249,9 @@ op_start () { claim_lock "network-bridge" diff --git a/bridge-opensuse.patch b/bridge-opensuse.patch index 65e8474..1a1ec51 100644 --- a/bridge-opensuse.patch +++ b/bridge-opensuse.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-bridge @@ -278,19 +278,19 @@ op_stop () { transfer_addrs ${bridge} ${pdev} if ! ifdown ${bridge}; then diff --git a/bridge-record-creation.patch b/bridge-record-creation.patch index 96bac9a..ac2f374 100644 --- a/bridge-record-creation.patch +++ b/bridge-record-creation.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-bridge @@ -257,6 +257,11 @@ op_start () { create_bridge ${tdev} diff --git a/bridge-vlan.diff b/bridge-vlan.diff index c43f18b..21b951c 100644 --- a/bridge-vlan.diff +++ b/bridge-vlan.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-bridge @@ -193,6 +193,28 @@ antispoofing () { iptables -A FORWARD -m physdev --physdev-in ${pdev} -j ACCEPT } diff --git a/build-tapdisk-ioemu.patch b/build-tapdisk-ioemu.patch index ab38c65..9ddaf56 100644 --- a/build-tapdisk-ioemu.patch +++ b/build-tapdisk-ioemu.patch @@ -15,10 +15,10 @@ Signed-off-by: Kevin Wolf tapdisk-ioemu.c | 17 ----------------- 4 files changed, 17 insertions(+), 26 deletions(-) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/Makefile -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/Makefile ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile @@ -46,14 +46,6 @@ $(filter %-user,$(SUBDIR_RULES)): libqem recurse-all: $(SUBDIR_RULES) @@ -56,10 +56,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile ###################################################################### # libqemu_common.a: Target independent part of system emulation. The # long term path is to suppress *all* target specific code in case of -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/configure +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/configure =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/configure -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/configure +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/configure ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/configure @@ -1511,7 +1511,7 @@ bsd) ;; esac @@ -69,10 +69,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/configure if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then tools="qemu-img\$(EXESUF) $tools" if [ "$linux" = "yes" ] ; then -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-tool.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-tool.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-tool.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-tool.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-tool.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-tool.c @@ -68,7 +68,7 @@ void qemu_bh_delete(QEMUBH *bh) qemu_free(bh); } @@ -82,10 +82,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-tool.c IOCanRWHandler *fd_read_poll, IOHandler *fd_read, IOHandler *fd_write, -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c @@ -12,34 +12,12 @@ extern void qemu_aio_init(void); diff --git a/capslock_enable.patch b/capslock_enable.patch index da9a505..2ca3734 100644 --- a/capslock_enable.patch +++ b/capslock_enable.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/vnc.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/vnc.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c @@ -1342,6 +1342,11 @@ static void do_key_event(VncState *vs, i } break; diff --git a/cdrom-removable.patch b/cdrom-removable.patch index 004aa35..ef19675 100644 --- a/cdrom-removable.patch +++ b/cdrom-removable.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/server/HalDaemon.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/HalDaemon.py =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/python/xen/xend/server/HalDaemon.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/HalDaemon.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python +# -*- mode: python; -*- @@ -246,10 +246,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/HalDaemon.py + print 'Falling off end' + + -Index: xen-4.1.0-testing/tools/python/xen/xend/server/Hald.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/Hald.py =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/python/xen/xend/server/Hald.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/Hald.py @@ -0,0 +1,125 @@ +#============================================================================ +# This library is free software; you can redistribute it and/or @@ -376,10 +376,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/Hald.py + watcher.run() + time.sleep(10) + watcher.shutdown() -Index: xen-4.1.0-testing/tools/python/xen/xend/server/SrvServer.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/SrvServer.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/SrvServer.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/SrvServer.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/SrvServer.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/SrvServer.py @@ -57,6 +57,7 @@ from xen.web.SrvDir import SrvDir from SrvRoot import SrvRoot @@ -397,10 +397,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/SrvServer.py def create(): root = SrvDir() -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -18,6 +18,7 @@ #include "exec-all.h" #include "sysemu.h" diff --git a/change_home_server.patch b/change_home_server.patch index 9de74e2..30e3f03 100644 --- a/change_home_server.patch +++ b/change_home_server.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -3130,6 +3130,11 @@ class XendDomainInfo: self._cleanup_phantom_devs(paths) self._cleanupVm() diff --git a/check_device_status.patch b/check_device_status.patch index 39767c1..2778651 100644 --- a/check_device_status.patch +++ b/check_device_status.patch @@ -5,10 +5,10 @@ get the signal, it will wait until timeout, thus incorrect device status is returned. To fix this problem, we do not depend on ev.wait() result, but read xenstore directly to get correct device status. -Index: xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/DevController.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/DevController.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py @@ -149,7 +149,10 @@ class DevController: (status, err) = self.waitForBackend(devid) diff --git a/checkpoint-rename.patch b/checkpoint-rename.patch index 363d7f8..261df20 100644 --- a/checkpoint-rename.patch +++ b/checkpoint-rename.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendCheckpoint.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py @@ -172,7 +172,7 @@ def save(fd, dominfo, network, live, dst dominfo.destroy() dominfo.testDeviceComplete() diff --git a/cve-2011-1583-4.1.patch b/cve-2011-1583-4.1.patch deleted file mode 100644 index 1d2c4a3..0000000 --- a/cve-2011-1583-4.1.patch +++ /dev/null @@ -1,217 +0,0 @@ -diff -r dbf2ddf652dc tools/libxc/xc_dom_bzimageloader.c ---- a/tools/libxc/xc_dom_bzimageloader.c Thu Apr 07 15:26:58 2011 +0100 -+++ b/tools/libxc/xc_dom_bzimageloader.c Thu Apr 21 12:05:57 2011 +0100 -@@ -82,8 +82,29 @@ static int xc_try_bzip2_decode( - for ( ; ; ) - { - ret = BZ2_bzDecompress(&stream); -- if ( (stream.avail_out == 0) || (ret != BZ_OK) ) -+ if ( ret == BZ_STREAM_END ) - { -+ DOMPRINTF("BZIP2: Saw data stream end"); -+ retval = 0; -+ break; -+ } -+ if ( ret != BZ_OK ) -+ { -+ DOMPRINTF("BZIP2: error %d", ret); -+ free(out_buf); -+ goto bzip2_cleanup; -+ } -+ -+ if ( stream.avail_out == 0 ) -+ { -+ /* Protect against output buffer overflow */ -+ if ( outsize > INT_MAX / 2 ) -+ { -+ DOMPRINTF("BZIP2: output buffer overflow"); -+ free(out_buf); -+ goto bzip2_cleanup; -+ } -+ - tmp_buf = realloc(out_buf, outsize * 2); - if ( tmp_buf == NULL ) - { -@@ -97,16 +118,18 @@ static int xc_try_bzip2_decode( - stream.avail_out = (outsize * 2) - outsize; - outsize *= 2; - } -- -- if ( ret != BZ_OK ) -+ else if ( stream.avail_in == 0 ) - { -- if ( ret == BZ_STREAM_END ) -- { -- DOMPRINTF("BZIP2: Saw data stream end"); -- retval = 0; -- break; -- } -- DOMPRINTF("BZIP2: error"); -+ /* -+ * If there is output buffer available then this indicates -+ * that BZ2_bzDecompress would like more input data to be -+ * provided. However our complete input buffer is in -+ * memory and provided upfront so if avail_in is zero this -+ * actually indicates a truncated input. -+ */ -+ DOMPRINTF("BZIP2: not enough input"); -+ free(out_buf); -+ goto bzip2_cleanup; - } - } - -@@ -180,31 +203,14 @@ static int xc_try_lzma_decode( - for ( ; ; ) - { - ret = lzma_code(&stream, action); -- if ( (stream.avail_out == 0) || (ret != LZMA_OK) ) -+ if ( ret == LZMA_STREAM_END ) - { -- tmp_buf = realloc(out_buf, outsize * 2); -- if ( tmp_buf == NULL ) -- { -- DOMPRINTF("LZMA: Failed to realloc memory"); -- free(out_buf); -- goto lzma_cleanup; -- } -- out_buf = tmp_buf; -- -- stream.next_out = out_buf + outsize; -- stream.avail_out = (outsize * 2) - outsize; -- outsize *= 2; -+ DOMPRINTF("LZMA: Saw data stream end"); -+ retval = 0; -+ break; - } -- - if ( ret != LZMA_OK ) - { -- if ( ret == LZMA_STREAM_END ) -- { -- DOMPRINTF("LZMA: Saw data stream end"); -- retval = 0; -- break; -- } -- - switch ( ret ) - { - case LZMA_MEM_ERROR: -@@ -238,7 +244,32 @@ static int xc_try_lzma_decode( - } - DOMPRINTF("%s: LZMA decompression error %s", - __FUNCTION__, msg); -- break; -+ free(out_buf); -+ goto lzma_cleanup; -+ } -+ -+ if ( stream.avail_out == 0 ) -+ { -+ /* Protect against output buffer overflow */ -+ if ( outsize > INT_MAX / 2 ) -+ { -+ DOMPRINTF("LZMA: output buffer overflow"); -+ free(out_buf); -+ goto lzma_cleanup; -+ } -+ -+ tmp_buf = realloc(out_buf, outsize * 2); -+ if ( tmp_buf == NULL ) -+ { -+ DOMPRINTF("LZMA: Failed to realloc memory"); -+ free(out_buf); -+ goto lzma_cleanup; -+ } -+ out_buf = tmp_buf; -+ -+ stream.next_out = out_buf + outsize; -+ stream.avail_out = (outsize * 2) - outsize; -+ outsize *= 2; - } - } - -@@ -489,18 +520,18 @@ struct setup_header { - - extern struct xc_dom_loader elf_loader; - --static unsigned int payload_offset(struct setup_header *hdr) -+static int check_magic(struct xc_dom_image *dom, const void *magic, size_t len) - { -- unsigned int off; -+ if (len > dom->kernel_size) -+ return 0; - -- off = (hdr->setup_sects + 1) * 512; -- off += hdr->payload_offset; -- return off; -+ return (memcmp(dom->kernel_blob, magic, len) == 0); - } - - static int xc_dom_probe_bzimage_kernel(struct xc_dom_image *dom) - { - struct setup_header *hdr; -+ uint64_t payload_offset, payload_length; - int ret; - - if ( dom->kernel_blob == NULL ) -@@ -533,10 +564,30 @@ static int xc_dom_probe_bzimage_kernel(s - return -EINVAL; - } - -- dom->kernel_blob = dom->kernel_blob + payload_offset(hdr); -- dom->kernel_size = hdr->payload_length; - -- if ( memcmp(dom->kernel_blob, "\037\213", 2) == 0 ) -+ /* upcast to 64 bits to avoid overflow */ -+ /* setup_sects is u8 and so cannot overflow */ -+ payload_offset = (hdr->setup_sects + 1) * 512; -+ payload_offset += hdr->payload_offset; -+ payload_length = hdr->payload_length; -+ -+ if ( payload_offset >= dom->kernel_size ) -+ { -+ xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: payload offset overflow", -+ __FUNCTION__); -+ return -EINVAL; -+ } -+ if ( (payload_offset + payload_length) > dom->kernel_size ) -+ { -+ xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: payload length overflow", -+ __FUNCTION__); -+ return -EINVAL; -+ } -+ -+ dom->kernel_blob = dom->kernel_blob + payload_offset; -+ dom->kernel_size = payload_length; -+ -+ if ( check_magic(dom, "\037\213", 2) ) - { - ret = xc_dom_try_gunzip(dom, &dom->kernel_blob, &dom->kernel_size); - if ( ret == -1 ) -@@ -546,7 +597,7 @@ static int xc_dom_probe_bzimage_kernel(s - return -EINVAL; - } - } -- else if ( memcmp(dom->kernel_blob, "\102\132\150", 3) == 0 ) -+ else if ( check_magic(dom, "\102\132\150", 3) ) - { - ret = xc_try_bzip2_decode(dom, &dom->kernel_blob, &dom->kernel_size); - if ( ret < 0 ) -@@ -557,7 +608,7 @@ static int xc_dom_probe_bzimage_kernel(s - return -EINVAL; - } - } -- else if ( memcmp(dom->kernel_blob, "\135\000", 2) == 0 ) -+ else if ( check_magic(dom, "\135\000", 2) ) - { - ret = xc_try_lzma_decode(dom, &dom->kernel_blob, &dom->kernel_size); - if ( ret < 0 ) -@@ -568,7 +619,7 @@ static int xc_dom_probe_bzimage_kernel(s - return -EINVAL; - } - } -- else if ( memcmp(dom->kernel_blob, "\x89LZO", 5) == 0 ) -+ else if ( check_magic(dom, "\x89LZO", 5) ) - { - ret = xc_try_lzo1x_decode(dom, &dom->kernel_blob, &dom->kernel_size); - if ( ret < 0 ) diff --git a/del_usb_xend_entry.patch b/del_usb_xend_entry.patch index ba12b4f..7ee4320 100644 --- a/del_usb_xend_entry.patch +++ b/del_usb_xend_entry.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -1297,8 +1297,15 @@ class XendDomainInfo: frontpath = self.getDeviceController(deviceClass).frontendPath(dev) backpath = xstransact.Read(frontpath, "backend") diff --git a/disable_emulated_device.diff b/disable_emulated_device.diff index 5c46749..9074e6e 100644 --- a/disable_emulated_device.diff +++ b/disable_emulated_device.diff @@ -1,8 +1,8 @@ -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c =================================================================== ---- xen-4.1.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c -@@ -398,6 +398,11 @@ static int __devinit platform_pci_init(s +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +@@ -425,6 +425,11 @@ static int __devinit platform_pci_init(s platform_mmio = mmio_addr; platform_mmiolen = mmio_len; diff --git a/dom-print.patch b/dom-print.patch index 7792c7e..5ccc727 100644 --- a/dom-print.patch +++ b/dom-print.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/arch/x86/domain.c +Index: xen-4.1.1-testing/xen/arch/x86/domain.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/domain.c -+++ xen-4.1.0-testing/xen/arch/x86/domain.c +--- xen-4.1.1-testing.orig/xen/arch/x86/domain.c ++++ xen-4.1.1-testing/xen/arch/x86/domain.c @@ -150,15 +150,30 @@ void dump_pageframe_info(struct domain * printk("Memory pages belonging to domain %u:\n", d->domain_id); diff --git a/domu-usb-controller.patch b/domu-usb-controller.patch index 4cd316e..478ce91 100644 --- a/domu-usb-controller.patch +++ b/domu-usb-controller.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendConfig.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py @@ -1874,7 +1874,14 @@ class XendConfig(dict): ports = sxp.child(dev_sxp, 'port') for port in ports[1:]: diff --git a/hibernate.patch b/hibernate.patch index bcd535a..01b66a3 100644 --- a/hibernate.patch +++ b/hibernate.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/firmware/hvmloader/acpi/dsdt.asl +Index: xen-4.1.1-testing/tools/firmware/hvmloader/acpi/dsdt.asl =================================================================== ---- xen-4.1.0-testing.orig/tools/firmware/hvmloader/acpi/dsdt.asl -+++ xen-4.1.0-testing/tools/firmware/hvmloader/acpi/dsdt.asl +--- xen-4.1.1-testing.orig/tools/firmware/hvmloader/acpi/dsdt.asl ++++ xen-4.1.1-testing/tools/firmware/hvmloader/acpi/dsdt.asl @@ -30,21 +30,9 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, /* * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off) type codes: diff --git a/hotplug.losetup.patch b/hotplug.losetup.patch index 3451a97..57fb4fe 100644 --- a/hotplug.losetup.patch +++ b/hotplug.losetup.patch @@ -17,10 +17,10 @@ Signed-off-by: Olaf Hering tools/hotplug/Linux/block | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -Index: xen-4.1.0-testing/tools/hotplug/Linux/block +Index: xen-4.1.1-testing/tools/hotplug/Linux/block =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/block -+++ xen-4.1.0-testing/tools/hotplug/Linux/block +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/block ++++ xen-4.1.1-testing/tools/hotplug/Linux/block @@ -280,8 +280,8 @@ mount it read-write in a guest domain." fi diff --git a/hv_extid_compatibility.patch b/hv_extid_compatibility.patch index 5157d33..f4826fc 100644 --- a/hv_extid_compatibility.patch +++ b/hv_extid_compatibility.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendConfig.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py @@ -159,6 +159,7 @@ XENAPI_PLATFORM_CFG_TYPES = { 'nographic': int, 'nomigrate': int, @@ -19,10 +19,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py if 'viridian' not in self['platform']: self['platform']['viridian'] = 0 if 'rtc_timeoffset' not in self['platform']: -Index: xen-4.1.0-testing/tools/python/xen/xend/image.py +Index: xen-4.1.1-testing/tools/python/xen/xend/image.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.1.0-testing/tools/python/xen/xend/image.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.1.1-testing/tools/python/xen/xend/image.py @@ -839,6 +839,7 @@ class HVMImageHandler(ImageHandler): self.apic = int(vmConfig['platform'].get('apic', 0)) @@ -31,10 +31,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/image.py self.guest_os_type = vmConfig['platform'].get('guest_os_type') self.memory_sharing = int(vmConfig['memory_sharing']) try: -Index: xen-4.1.0-testing/tools/python/xen/xm/create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/create.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/create.py -+++ xen-4.1.0-testing/tools/python/xen/xm/create.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/create.py @@ -242,6 +242,10 @@ gopts.var('viridian', val='VIRIDIAN', use="""Expose Viridian interface to x86 HVM guest? (Default is 0).""") diff --git a/ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch b/ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch index b7ea2b2..a623183 100644 --- a/ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch +++ b/ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch @@ -17,10 +17,10 @@ qcow2 image (the header is gone after three loop iterations): Signed-off-by: Kevin Wolf -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/block-qcow2.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/block-qcow2.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/block-qcow2.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/block-qcow2.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/block-qcow2.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/block-qcow2.c @@ -916,7 +916,7 @@ static int alloc_cluster_link_l2(BlockDr goto err; diff --git a/ioemu-bdrv-open-CACHE_WB.patch b/ioemu-bdrv-open-CACHE_WB.patch index b3e327c..e43bbe8 100644 --- a/ioemu-bdrv-open-CACHE_WB.patch +++ b/ioemu-bdrv-open-CACHE_WB.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -259,8 +259,11 @@ static int open_disk(struct td_state *s, drv = blktap_drivers[i].drv; DPRINTF("%s driver specified\n", drv ? drv->format_name : "No"); diff --git a/ioemu-blktap-barriers.patch b/ioemu-blktap-barriers.patch index 17cdd9a..a7bc766 100644 --- a/ioemu-blktap-barriers.patch +++ b/ioemu-blktap-barriers.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -360,6 +360,15 @@ static void qemu_send_responses(void* op } diff --git a/ioemu-blktap-fv-init.patch b/ioemu-blktap-fv-init.patch index c1e49c3..e4bc01a 100644 --- a/ioemu-blktap-fv-init.patch +++ b/ioemu-blktap-fv-init.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_machine_fv.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_machine_fv.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_machine_fv.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_machine_fv.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_machine_fv.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_machine_fv.c @@ -269,6 +269,7 @@ void qemu_invalidate_entry(uint8_t *buff #endif /* defined(MAPCACHE) */ diff --git a/ioemu-blktap-image-format.patch b/ioemu-blktap-image-format.patch index e321191..fd97587 100644 --- a/ioemu-blktap-image-format.patch +++ b/ioemu-blktap-image-format.patch @@ -15,10 +15,10 @@ Signed-off-by: Kevin Wolf hw/xen_blktap.h | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -230,9 +230,10 @@ static int map_new_dev(struct td_state * return -1; } @@ -64,10 +64,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c msglen = sizeof(msg_hdr_t); msg->type = CTLMSG_IMG_FAIL; msg->len = msglen; -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h @@ -53,4 +53,18 @@ typedef struct fd_list_entry { int init_blktap(void); diff --git a/ioemu-blktap-zero-size.patch b/ioemu-blktap-zero-size.patch index 44a53af..970ed92 100644 --- a/ioemu-blktap-zero-size.patch +++ b/ioemu-blktap-zero-size.patch @@ -12,10 +12,10 @@ Signed-off-by: Kevin Wolf hw/xen_blktap.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -268,6 +268,12 @@ static int open_disk(struct td_state *s, s->size = bs->total_sectors; s->sector_size = 512; @@ -29,10 +29,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0); return 0; -Index: xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/DevController.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/DevController.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py @@ -155,7 +155,7 @@ class DevController: (devid, self.deviceClass)) diff --git a/ioemu-debuginfo.patch b/ioemu-debuginfo.patch index 286cb1d..526a973 100644 --- a/ioemu-debuginfo.patch +++ b/ioemu-debuginfo.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/Makefile -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/Makefile ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile @@ -243,7 +243,7 @@ endif install: all $(if $(BUILD_DOCS),install-doc) mkdir -p "$(DESTDIR)$(bindir)" @@ -11,10 +11,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile endif ifneq ($(BLOBS),) mkdir -p "$(DESTDIR)$(datadir)" -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile.target +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile.target =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/Makefile.target -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/Makefile.target +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/Makefile.target ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/Makefile.target @@ -755,7 +755,7 @@ clean: install: all install-hook diff --git a/ioemu-disable-emulated-ide-if-pv.patch b/ioemu-disable-emulated-ide-if-pv.patch index 1abd9b8..cde361f 100644 --- a/ioemu-disable-emulated-ide-if-pv.patch +++ b/ioemu-disable-emulated-ide-if-pv.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h @@ -1,6 +1,8 @@ #ifndef QEMU_XEN_H #define QEMU_XEN_H @@ -20,10 +20,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h int xenstore_parse_disable_pf_config(void); int xenstore_fd(void); void xenstore_process_event(void *opaque); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vl.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/vl.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/vl.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/vl.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/vl.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/vl.c @@ -5830,9 +5830,9 @@ int main(int argc, char **argv, char **e if ((msg = xenbus_read(XBT_NIL, "domid", &domid_s))) fprintf(stderr,"Can not read our own domid: %s\n", msg); @@ -36,10 +36,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vl.c #endif /* CONFIG_STUBDOM */ } -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -447,7 +447,7 @@ void xenstore_init(void) } } diff --git a/ioemu-disable-scsi.patch b/ioemu-disable-scsi.patch index 07d69ef..d9169fe 100644 --- a/ioemu-disable-scsi.patch +++ b/ioemu-disable-scsi.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c @@ -359,6 +359,8 @@ static void platform_ioport_write(void * case 4: fprintf(logfile, "Disconnect IDE hard disk...\n"); @@ -11,10 +11,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c fprintf(logfile, "Disconnect netifs...\n"); pci_unplug_netifs(); fprintf(logfile, "Shutdown taps...\n"); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h @@ -57,6 +57,7 @@ void unset_vram_mapping(void *opaque); #endif @@ -23,10 +23,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h void destroy_hvm_domain(void); void unregister_iomem(target_phys_addr_t start); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/pci.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/pci.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/pci.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/pci.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/pci.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/pci.c @@ -871,6 +871,50 @@ void pci_unplug_netifs(void) } } diff --git a/ioemu-vnc-resize.patch b/ioemu-vnc-resize.patch index faa5ef1..d261142 100644 --- a/ioemu-vnc-resize.patch +++ b/ioemu-vnc-resize.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/vnc.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/vnc.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/vnc.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/vnc.c @@ -1734,6 +1734,25 @@ static int protocol_client_msg(VncState } diff --git a/libxen_permissive.patch b/libxen_permissive.patch index 140a446..5968125 100644 --- a/libxen_permissive.patch +++ b/libxen_permissive.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/libxen/src/xen_common.c +Index: xen-4.1.1-testing/tools/libxen/src/xen_common.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxen/src/xen_common.c -+++ xen-4.1.0-testing/tools/libxen/src/xen_common.c +--- xen-4.1.1-testing.orig/tools/libxen/src/xen_common.c ++++ xen-4.1.1-testing/tools/libxen/src/xen_common.c @@ -904,8 +904,15 @@ static void parse_into(xen_session *s, x 0 != strcmp((char *)value_node->children->name, "struct") || value_node->children->children == NULL) diff --git a/magic_ioport_compat.patch b/magic_ioport_compat.patch index 19277f8..f29e4b6 100644 --- a/magic_ioport_compat.patch +++ b/magic_ioport_compat.patch @@ -2,10 +2,10 @@ Make our PV drivers work with older hosts that do not recognize the new PV driv Signed-off-by: K. Y. Srinivasan -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c =================================================================== ---- xen-4.1.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c @@ -322,7 +322,10 @@ static int check_platform_magic(struct d if (magic != XEN_IOPORT_MAGIC_VAL) { diff --git a/minios-fixups.patch b/minios-fixups.patch index 46ddcd5..5d4c19f 100644 --- a/minios-fixups.patch +++ b/minios-fixups.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/extras/mini-os/lib/math.c +Index: xen-4.1.1-testing/extras/mini-os/lib/math.c =================================================================== ---- xen-4.1.0-testing.orig/extras/mini-os/lib/math.c -+++ xen-4.1.0-testing/extras/mini-os/lib/math.c +--- xen-4.1.1-testing.orig/extras/mini-os/lib/math.c ++++ xen-4.1.1-testing/extras/mini-os/lib/math.c @@ -187,6 +187,7 @@ __qdivrem(uint64_t uq, uint64_t vq, uint * and thus * m = 4 - n <= 2 diff --git a/multi-xvdp.patch b/multi-xvdp.patch index ef9cb73..c050136 100644 --- a/multi-xvdp.patch +++ b/multi-xvdp.patch @@ -5,10 +5,10 @@ bootloader loopback device. This patch creates a list of bootloader loopback devices so more than one instance of bootloader can be run concurrently. -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -74,7 +74,7 @@ from xen.xend.XendPSCSI import XendPSCSI from xen.xend.XendDSCSI import XendDSCSI, XendDSCSI_HBA diff --git a/network-nat-open-SuSEfirewall2-FORWARD.patch b/network-nat-open-SuSEfirewall2-FORWARD.patch index 4d26acc..5986857 100644 --- a/network-nat-open-SuSEfirewall2-FORWARD.patch +++ b/network-nat-open-SuSEfirewall2-FORWARD.patch @@ -1,9 +1,9 @@ Open SuSEfirewall2 FORWARD rule when use xen nat -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-nat +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-nat =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-nat -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-nat +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-nat ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-nat @@ -83,6 +83,7 @@ function dhcp_stop() op_start() { echo 1 >/proc/sys/net/ipv4/ip_forward diff --git a/network-nat.patch b/network-nat.patch index 35e613b..6222fca 100644 --- a/network-nat.patch +++ b/network-nat.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/network-nat +Index: xen-4.1.1-testing/tools/hotplug/Linux/network-nat =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/network-nat -+++ xen-4.1.0-testing/tools/hotplug/Linux/network-nat +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/network-nat ++++ xen-4.1.1-testing/tools/hotplug/Linux/network-nat @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash diff --git a/pv-driver-build.patch b/pv-driver-build.patch index 72f4cea..7877dc3 100644 --- a/pv-driver-build.patch +++ b/pv-driver-build.patch @@ -1,12 +1,16 @@ ---- a/unmodified_drivers/linux-2.6/blkfront/Kbuild -+++ b/unmodified_drivers/linux-2.6/blkfront/Kbuild +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/blkfront/Kbuild +=================================================================== +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/blkfront/Kbuild ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/blkfront/Kbuild @@ -3,3 +3,4 @@ include $(M)/overrides.mk obj-m += xen-vbd.o xen-vbd-objs := blkfront.o vbd.o +xen-vbd-objs += $(patsubst %.c,%.o,$(notdir $(wildcard $(src)/vcd.c))) ---- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c -+++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +=================================================================== +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c @@ -123,6 +123,7 @@ unsigned long alloc_xen_mmio(unsigned lo #ifndef __ia64__ diff --git a/pvdrv-import-shared-info.patch b/pvdrv-import-shared-info.patch index d52a166..dd0454d 100644 --- a/pvdrv-import-shared-info.patch +++ b/pvdrv-import-shared-info.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c =================================================================== ---- xen-4.1.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/evtchn.c -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/evtchn.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c @@ -40,7 +40,9 @@ #include #endif @@ -12,10 +12,10 @@ Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/evtchn.c #define is_valid_evtchn(x) ((x) != 0) #define evtchn_from_irq(x) (irq_evtchn[irq].evtchn) -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c =================================================================== ---- xen-4.1.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c @@ -77,7 +77,6 @@ static uint64_t callback_via; static int __devinit init_xen_info(void) { @@ -44,10 +44,10 @@ Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci. return 0; } -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h =================================================================== ---- xen-4.1.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.h @@ -27,6 +27,11 @@ unsigned long alloc_xen_mmio(unsigned long len); void platform_pci_resume(void); diff --git a/pvdrv_emulation_control.patch b/pvdrv_emulation_control.patch index 45e4e20..1903f62 100644 --- a/pvdrv_emulation_control.patch +++ b/pvdrv_emulation_control.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c @@ -365,6 +365,19 @@ static void platform_ioport_write(void * net_tap_shutdown_all(); fprintf(logfile, "Done.\n"); diff --git a/qemu-dm-segfault.patch b/qemu-dm-segfault.patch index 5f569a4..8bab785 100644 --- a/qemu-dm-segfault.patch +++ b/qemu-dm-segfault.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/ide.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/ide.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/ide.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/ide.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/ide.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/ide.c @@ -935,8 +935,9 @@ static inline void ide_dma_submit_check( static inline void ide_set_irq(IDEState *s) diff --git a/qemu-security-etch1.diff b/qemu-security-etch1.diff index e6c6109..eb32f80 100644 --- a/qemu-security-etch1.diff +++ b/qemu-security-etch1.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/ne2000.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/ne2000.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/ne2000.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/ne2000.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/ne2000.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/ne2000.c @@ -218,7 +218,7 @@ static int ne2000_can_receive(void *opaq NE2000State *s = opaque; @@ -11,10 +11,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/ne2000.c return !ne2000_buffer_full(s); } -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/pc.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/pc.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/pc.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/pc.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/pc.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/pc.c @@ -413,7 +413,8 @@ static void bochs_bios_write(void *opaqu case 0x400: case 0x401: diff --git a/serial-split.patch b/serial-split.patch index a0de4f3..4366cee 100644 --- a/serial-split.patch +++ b/serial-split.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/misc/serial-split/Makefile +Index: xen-4.1.1-testing/tools/misc/serial-split/Makefile =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/misc/serial-split/Makefile ++++ xen-4.1.1-testing/tools/misc/serial-split/Makefile @@ -0,0 +1,20 @@ +CC ?= gcc +CFLAGS ?= -Wall -Os @@ -23,10 +23,10 @@ Index: xen-4.1.0-testing/tools/misc/serial-split/Makefile + +%.o: %.c Makefile + $(CC) $(CFLAGS) -c -o $@ $< -Index: xen-4.1.0-testing/tools/misc/serial-split/serial-split.c +Index: xen-4.1.1-testing/tools/misc/serial-split/serial-split.c =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/misc/serial-split/serial-split.c ++++ xen-4.1.1-testing/tools/misc/serial-split/serial-split.c @@ -0,0 +1,422 @@ +/* + * serial-split.c diff --git a/snapshot-ioemu-delete.patch b/snapshot-ioemu-delete.patch index 1fef3db..483ad84 100644 --- a/snapshot-ioemu-delete.patch +++ b/snapshot-ioemu-delete.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -978,6 +978,18 @@ static void xenstore_process_dm_command_ } @@ -21,10 +21,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c } else if (!strncmp(command, "continue", len)) { fprintf(logfile, "dm-command: continue after state save\n"); xen_pause_requested = 0; -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/savevm.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/savevm.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/savevm.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/savevm.c @@ -1106,6 +1106,35 @@ the_end: return ret; } @@ -61,10 +61,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c #ifndef CONFIG_DM void do_savevm(const char *name) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h @@ -42,6 +42,7 @@ enum { /* xen-vl-extra.c */ diff --git a/snapshot-ioemu-restore.patch b/snapshot-ioemu-restore.patch index c39f73b..dca7df8 100644 --- a/snapshot-ioemu-restore.patch +++ b/snapshot-ioemu-restore.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -103,6 +103,8 @@ int xenstore_watch_new_callback(const ch } diff --git a/snapshot-ioemu-save.patch b/snapshot-ioemu-save.patch index b0b89a3..6c2c2db 100644 --- a/snapshot-ioemu-save.patch +++ b/snapshot-ioemu-save.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/savevm.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/savevm.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/savevm.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/savevm.c @@ -28,6 +28,7 @@ #include "sysemu.h" #include "qemu-timer.h" @@ -97,10 +97,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/savevm.c #ifndef CONFIG_DM void do_savevm(const char *name) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/i386-dm/helper2.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/i386-dm/helper2.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/i386-dm/helper2.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/i386-dm/helper2.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/i386-dm/helper2.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/i386-dm/helper2.c @@ -112,6 +112,9 @@ int send_vcpu = 0; //the evtchn port for polling the notification, evtchn_port_t *ioreq_local_port; @@ -167,10 +167,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/i386-dm/helper2.c /* Wait to be allowed to continue */ while (xen_pause_requested) { -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/qemu-xen.h @@ -34,6 +34,15 @@ void qemu_invalidate_map_cache(void) #define mapcache_lock() ((void)0) #define mapcache_unlock() ((void)0) @@ -195,10 +195,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/qemu-xen.h void xenstore_check_new_media_present(int timeout); void xenstore_read_vncpasswd(int domid, char *pwbuf, size_t pwbuflen); void xenstore_write_vslots(char *vslots); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -17,6 +17,7 @@ #include "exec-all.h" diff --git a/snapshot-without-pv-fix.patch b/snapshot-without-pv-fix.patch index ef03f77..ec43a2a 100644 --- a/snapshot-without-pv-fix.patch +++ b/snapshot-without-pv-fix.patch @@ -8,10 +8,10 @@ ready, so the watch will tell qemu to add the disk entry to drives_table[], otherwise the disk in qemu will just stay opened,not showing up in drives_table[]. -Index: xen-4.1.0-testing/tools/blktap/drivers/blktapctrl.c +Index: xen-4.1.1-testing/tools/blktap/drivers/blktapctrl.c =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/blktapctrl.c -+++ xen-4.1.0-testing/tools/blktap/drivers/blktapctrl.c +--- xen-4.1.1-testing.orig/tools/blktap/drivers/blktapctrl.c ++++ xen-4.1.1-testing/tools/blktap/drivers/blktapctrl.c @@ -380,7 +380,22 @@ static int write_msg(int fd, int msgtype msg->cookie = blkif->cookie; @@ -121,10 +121,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/blktapctrl.c ctlfd = blktap_interface_open(); if (ctlfd < 0) { -Index: xen-4.1.0-testing/tools/blktap/lib/blkif.c +Index: xen-4.1.1-testing/tools/blktap/lib/blkif.c =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/lib/blkif.c -+++ xen-4.1.0-testing/tools/blktap/lib/blkif.c +--- xen-4.1.1-testing.orig/tools/blktap/lib/blkif.c ++++ xen-4.1.1-testing/tools/blktap/lib/blkif.c @@ -89,6 +89,11 @@ void register_new_blkif_hook(int (*fn)(b { new_blkif_hook = fn; @@ -162,10 +162,10 @@ Index: xen-4.1.0-testing/tools/blktap/lib/blkif.c void __init_blkif(void) { memset(blkif_hash, 0, sizeof(blkif_hash)); -Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +Index: xen-4.1.1-testing/tools/blktap/lib/blktaplib.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/lib/blktaplib.h -+++ xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +--- xen-4.1.1-testing.orig/tools/blktap/lib/blktaplib.h ++++ xen-4.1.1-testing/tools/blktap/lib/blktaplib.h @@ -38,6 +38,7 @@ #include #include @@ -197,10 +197,10 @@ Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h /* disk driver types */ #define MAX_DISK_TYPES 20 -Index: xen-4.1.0-testing/tools/blktap/lib/xenbus.c +Index: xen-4.1.1-testing/tools/blktap/lib/xenbus.c =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/lib/xenbus.c -+++ xen-4.1.0-testing/tools/blktap/lib/xenbus.c +--- xen-4.1.1-testing.orig/tools/blktap/lib/xenbus.c ++++ xen-4.1.1-testing/tools/blktap/lib/xenbus.c @@ -318,6 +318,72 @@ static int check_image(struct xs_handle return 0; } @@ -284,10 +284,10 @@ Index: xen-4.1.0-testing/tools/blktap/lib/xenbus.c list_add(&be->list, &belist); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -35,6 +35,8 @@ #ifndef QEMU_TOOL #include "qemu-common.h" @@ -378,10 +378,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c default: break; } -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.h @@ -40,7 +40,8 @@ struct td_state { void *fd_entry; uint64_t sector_size; diff --git a/snapshot-xend.patch b/snapshot-xend.patch index d65defe..097ba42 100644 --- a/snapshot-xend.patch +++ b/snapshot-xend.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/image.py +Index: xen-4.1.1-testing/tools/python/xen/xend/image.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.1.0-testing/tools/python/xen/xend/image.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.1.1-testing/tools/python/xen/xend/image.py @@ -490,7 +490,7 @@ class ImageHandler: domains.domains_lock.acquire() @@ -43,10 +43,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/image.py def recreate(self): if self.device_model is None: return -Index: xen-4.1.0-testing/tools/python/xen/xend/server/blkif.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/blkif.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/blkif.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/blkif.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/blkif.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/blkif.py @@ -88,6 +88,10 @@ class BlkifController(DevController): if bootable != None: back['bootable'] = str(bootable) @@ -58,10 +58,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/blkif.py if security.on() == xsconstants.XS_POLICY_USE: self.do_access_control(config, uname) -Index: xen-4.1.0-testing/tools/python/xen/xend/server/SrvDomain.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/SrvDomain.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/SrvDomain.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/SrvDomain.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/SrvDomain.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/SrvDomain.py @@ -95,6 +95,31 @@ class SrvDomain(SrvDir): def do_save(self, _, req): return self.xd.domain_save(self.dom.domid, req.args['file'][0]) @@ -103,10 +103,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/SrvDomain.py return self.perform(req) # -Index: xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendCheckpoint.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py @@ -65,7 +65,7 @@ def insert_after(list, pred, value): return @@ -331,10 +331,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py if not paused: dominfo.unpause() -Index: xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendConfig.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py @@ -244,6 +244,7 @@ XENAPI_CFG_TYPES = { 'memory_sharing': int, 'pool_name' : str, @@ -343,10 +343,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendConfig.py } # List of legacy configuration keys that have no equivalent in the -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomain.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomain.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomain.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomain.py @@ -53,6 +53,7 @@ from xen.xend.xenstore.xstransact import from xen.xend.xenstore.xswatch import xswatch from xen.util import mkdir, rwlock @@ -561,10 +561,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py def domain_pincpu(self, domid, vcpu, cpumap): """Set which cpus vcpu can use -Index: xen-4.1.0-testing/tools/python/xen/xm/main.py +Index: xen-4.1.1-testing/tools/python/xen/xm/main.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/main.py -+++ xen-4.1.0-testing/tools/python/xen/xm/main.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/main.py ++++ xen-4.1.1-testing/tools/python/xen/xm/main.py @@ -123,6 +123,14 @@ SUBCOMMAND_HELP = { 'Restore a domain from a saved state.'), 'save' : ('[-c|-f] ', @@ -686,10 +686,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xm/main.py "shutdown": xm_shutdown, "start": xm_start, "sysrq": xm_sysrq, -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -508,7 +508,6 @@ class XendDomainInfo: self._setSchedParams() self._storeVmDetails() diff --git a/stdvga-cache.patch b/stdvga-cache.patch index ec5fab3..5f5ed65 100644 --- a/stdvga-cache.patch +++ b/stdvga-cache.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/arch/x86/hvm/stdvga.c +Index: xen-4.1.1-testing/xen/arch/x86/hvm/stdvga.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/hvm/stdvga.c -+++ xen-4.1.0-testing/xen/arch/x86/hvm/stdvga.c +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/stdvga.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/stdvga.c @@ -135,7 +135,10 @@ static int stdvga_outb(uint64_t addr, ui /* When in standard vga mode, emulate here all writes to the vram buffer diff --git a/supported_module.diff b/supported_module.diff index 57f5e4c..351729f 100644 --- a/supported_module.diff +++ b/supported_module.diff @@ -2,10 +2,10 @@ Make our PV drivers "Novell supported modules" Signed-off-by: K. Y. Srinivasan -Index: xen-4.1.0-testing/unmodified_drivers/linux-2.6/Module.supported +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/Module.supported =================================================================== --- /dev/null -+++ xen-4.1.0-testing/unmodified_drivers/linux-2.6/Module.supported ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/Module.supported @@ -0,0 +1,5 @@ +xen-vbd +xen-platform-pci diff --git a/tapdisk-ioemu-logfile.patch b/tapdisk-ioemu-logfile.patch index bf86b29..e4e4eb8 100644 --- a/tapdisk-ioemu-logfile.patch +++ b/tapdisk-ioemu-logfile.patch @@ -11,10 +11,10 @@ Signed-off-by: Kevin Wolf tapdisk-ioemu.c | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c @@ -78,15 +78,22 @@ int main(void) struct timeval tv; void *old_fd_start = NULL; diff --git a/tapdisk-ioemu-shutdown-fix.patch b/tapdisk-ioemu-shutdown-fix.patch index 573988e..63bf015 100644 --- a/tapdisk-ioemu-shutdown-fix.patch +++ b/tapdisk-ioemu-shutdown-fix.patch @@ -16,10 +16,10 @@ Signed-off-by: Kevin Wolf tapdisk-ioemu.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_blktap.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c @@ -67,6 +67,7 @@ int read_fd; int write_fd; @@ -46,10 +46,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_blktap.c case CTLMSG_PID: memset(buf, 0x00, MSG_SIZE); -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/tapdisk-ioemu.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/tapdisk-ioemu.c @@ -14,6 +14,7 @@ extern void qemu_aio_init(void); extern void qemu_aio_poll(void); diff --git a/tmp-initscript-modprobe.patch b/tmp-initscript-modprobe.patch index 38dd881..44891bb 100644 --- a/tmp-initscript-modprobe.patch +++ b/tmp-initscript-modprobe.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/init.d/xencommons +Index: xen-4.1.1-testing/tools/hotplug/Linux/init.d/xencommons =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/init.d/xencommons -+++ xen-4.1.0-testing/tools/hotplug/Linux/init.d/xencommons +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/init.d/xencommons ++++ xen-4.1.1-testing/tools/hotplug/Linux/init.d/xencommons @@ -45,6 +45,18 @@ do_start () { local time=0 local timeout=30 diff --git a/tmp_build.patch b/tmp_build.patch index 7344f63..9dd6b44 100644 --- a/tmp_build.patch +++ b/tmp_build.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/xenstore/Makefile +Index: xen-4.1.1-testing/tools/xenstore/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/Makefile -+++ xen-4.1.0-testing/tools/xenstore/Makefile +--- xen-4.1.1-testing.orig/tools/xenstore/Makefile ++++ xen-4.1.1-testing/tools/xenstore/Makefile @@ -58,6 +58,7 @@ $(CLIENTS_DOMU): xenstore xenstore: xenstore_client.o $(LIBXENSTORE) diff --git a/tools-kboot.diff b/tools-kboot.diff index 776f19d..fbfb5b9 100644 --- a/tools-kboot.diff +++ b/tools-kboot.diff @@ -13,10 +13,10 @@ Signed-off-by: Gerd Hoffmann tools/kboot/select-kernel | 59 + 9 files changed, 2111 insertions(+) -Index: xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_32 +Index: xen-4.1.1-testing/buildconfigs/linux-defconfig_xenUboot_x86_32 =================================================================== --- /dev/null -+++ xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_32 ++++ xen-4.1.1-testing/buildconfigs/linux-defconfig_xenUboot_x86_32 @@ -0,0 +1,874 @@ +# +# Automatically generated make config: don't edit @@ -892,10 +892,10 @@ Index: xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_32 +CONFIG_X86_NO_TSS=y +CONFIG_X86_NO_IDT=y +CONFIG_KTIME_SCALAR=y -Index: xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_64 +Index: xen-4.1.1-testing/buildconfigs/linux-defconfig_xenUboot_x86_64 =================================================================== --- /dev/null -+++ xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_64 ++++ xen-4.1.1-testing/buildconfigs/linux-defconfig_xenUboot_x86_64 @@ -0,0 +1,653 @@ +# +# Automatically generated make config: don't edit @@ -1550,17 +1550,17 @@ Index: xen-4.1.0-testing/buildconfigs/linux-defconfig_xenUboot_x86_64 +# CONFIG_CRC32 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y -Index: xen-4.1.0-testing/buildconfigs/mk.linux-2.6-xenUboot +Index: xen-4.1.1-testing/buildconfigs/mk.linux-2.6-xenUboot =================================================================== --- /dev/null -+++ xen-4.1.0-testing/buildconfigs/mk.linux-2.6-xenUboot ++++ xen-4.1.1-testing/buildconfigs/mk.linux-2.6-xenUboot @@ -0,0 +1,2 @@ +EXTRAVERSION = xenUboot +include buildconfigs/mk.linux-2.6-xen -Index: xen-4.1.0-testing/tools/kboot/Makefile +Index: xen-4.1.1-testing/tools/kboot/Makefile =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/kboot/Makefile ++++ xen-4.1.1-testing/tools/kboot/Makefile @@ -0,0 +1,23 @@ +# +# tools/kboot/Makefile @@ -1585,10 +1585,10 @@ Index: xen-4.1.0-testing/tools/kboot/Makefile +kboot.initramfs: mkinitramfs init select-kernel ../xcutils/xc_kexec + sh ./mkinitramfs | tee $@ + -Index: xen-4.1.0-testing/tools/kboot/README +Index: xen-4.1.1-testing/tools/kboot/README =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/kboot/README ++++ xen-4.1.1-testing/tools/kboot/README @@ -0,0 +1,43 @@ + +This is a simple kexec-based boot loader @@ -1633,10 +1633,10 @@ Index: xen-4.1.0-testing/tools/kboot/README + +-- +Gerd Hoffmann -Index: xen-4.1.0-testing/tools/kboot/init +Index: xen-4.1.1-testing/tools/kboot/init =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/kboot/init ++++ xen-4.1.1-testing/tools/kboot/init @@ -0,0 +1,309 @@ +#!/bin/sh + @@ -1947,10 +1947,10 @@ Index: xen-4.1.0-testing/tools/kboot/init +msg "bye ..." +banner "boot $guestos" +xc_kexec -e -Index: xen-4.1.0-testing/tools/kboot/mkinitramfs +Index: xen-4.1.1-testing/tools/kboot/mkinitramfs =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/kboot/mkinitramfs ++++ xen-4.1.1-testing/tools/kboot/mkinitramfs @@ -0,0 +1,111 @@ +#!/bin/sh + @@ -2063,10 +2063,10 @@ Index: xen-4.1.0-testing/tools/kboot/mkinitramfs + echo "file $LIB/$(basename $lib) $lib 0755 0 0" +done +echo -Index: xen-4.1.0-testing/tools/kboot/select-kernel +Index: xen-4.1.1-testing/tools/kboot/select-kernel =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/kboot/select-kernel ++++ xen-4.1.1-testing/tools/kboot/select-kernel @@ -0,0 +1,59 @@ +#!/bin/sh + @@ -2127,10 +2127,10 @@ Index: xen-4.1.0-testing/tools/kboot/select-kernel +msg "using $kernelname" +echo "$kernelname" + -Index: xen-4.1.0-testing/make-kboot +Index: xen-4.1.1-testing/make-kboot =================================================================== --- /dev/null -+++ xen-4.1.0-testing/make-kboot ++++ xen-4.1.1-testing/make-kboot @@ -0,0 +1,37 @@ +#!/bin/sh + diff --git a/udev-rules.patch b/udev-rules.patch index bd44221..9554079 100644 --- a/udev-rules.patch +++ b/udev-rules.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/xen-backend.rules +Index: xen-4.1.1-testing/tools/hotplug/Linux/xen-backend.rules =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/xen-backend.rules -+++ xen-4.1.0-testing/tools/hotplug/Linux/xen-backend.rules +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/xen-backend.rules ++++ xen-4.1.1-testing/tools/hotplug/Linux/xen-backend.rules @@ -14,3 +14,4 @@ KERNEL=="gntdev", NAME="xen/%k", MODE="0 KERNEL=="pci_iomul", NAME="xen/%k", MODE="0600" KERNEL=="tapdev[a-z]*", NAME="xen/blktap-2/tapdev%m", MODE="0600" diff --git a/usb-list.patch b/usb-list.patch index f539e08..5ea4098 100644 --- a/usb-list.patch +++ b/usb-list.patch @@ -15,10 +15,10 @@ could be referred to: http://www.gossamer-threads.com/lists/xen/devel/181021?search_string=usb-list;#181021 -Index: xen-4.1.0-testing/tools/python/xen/xm/main.py +Index: xen-4.1.1-testing/tools/python/xen/xm/main.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/main.py -+++ xen-4.1.0-testing/tools/python/xen/xm/main.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/main.py ++++ xen-4.1.1-testing/tools/python/xen/xm/main.py @@ -2629,10 +2629,22 @@ def xm_usb_list(args): ni = parse_dev_info(x[1]) ni['idx'] = int(x[0]) diff --git a/vif-bridge-no-iptables.patch b/vif-bridge-no-iptables.patch index 6a4b605..fa25595 100644 --- a/vif-bridge-no-iptables.patch +++ b/vif-bridge-no-iptables.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/vif-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/vif-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/vif-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/vif-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/vif-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/vif-bridge @@ -101,9 +101,9 @@ case "$command" in ;; esac diff --git a/vif-bridge.mtu.patch b/vif-bridge.mtu.patch index 6ffc217..204cabe 100644 --- a/vif-bridge.mtu.patch +++ b/vif-bridge.mtu.patch @@ -15,10 +15,10 @@ Signed-off-by: Olaf Hering tools/hotplug/Linux/vif-bridge | 5 +++++ 1 file changed, 5 insertions(+) -Index: xen-4.1.0-testing/tools/hotplug/Linux/vif-bridge +Index: xen-4.1.1-testing/tools/hotplug/Linux/vif-bridge =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/vif-bridge -+++ xen-4.1.0-testing/tools/hotplug/Linux/vif-bridge +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/vif-bridge ++++ xen-4.1.1-testing/tools/hotplug/Linux/vif-bridge @@ -97,6 +97,11 @@ case "$command" in add) diff --git a/vif-route-ifup.patch b/vif-route-ifup.patch index 3124b8d..864b785 100644 --- a/vif-route-ifup.patch +++ b/vif-route-ifup.patch @@ -4,10 +4,10 @@ tools/hotplug/Linux/vif-route-ifup | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) -Index: xen-4.1.0-testing/tools/examples/xend-config.sxp +Index: xen-4.1.1-testing/tools/examples/xend-config.sxp =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xend-config.sxp -+++ xen-4.1.0-testing/tools/examples/xend-config.sxp +--- xen-4.1.1-testing.orig/tools/examples/xend-config.sxp ++++ xen-4.1.1-testing/tools/examples/xend-config.sxp @@ -200,6 +200,26 @@ #(network-script network-route) #(vif-script vif-route) @@ -35,10 +35,10 @@ Index: xen-4.1.0-testing/tools/examples/xend-config.sxp ## Use the following if network traffic is routed with NAT, as an alternative # to the settings for bridged networking given above. -Index: xen-4.1.0-testing/tools/hotplug/Linux/Makefile +Index: xen-4.1.1-testing/tools/hotplug/Linux/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/Makefile -+++ xen-4.1.0-testing/tools/hotplug/Linux/Makefile +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/Makefile ++++ xen-4.1.1-testing/tools/hotplug/Linux/Makefile @@ -11,7 +11,7 @@ XENCOMMONS_SYSCONFIG = init.d/sysconfig. # Xen script dir and scripts to go there. @@ -48,10 +48,10 @@ Index: xen-4.1.0-testing/tools/hotplug/Linux/Makefile XEN_SCRIPTS += network-nat vif-nat XEN_SCRIPTS += vif2 XEN_SCRIPTS += vif-setup -Index: xen-4.1.0-testing/tools/hotplug/Linux/vif-route-ifup +Index: xen-4.1.1-testing/tools/hotplug/Linux/vif-route-ifup =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/hotplug/Linux/vif-route-ifup ++++ xen-4.1.1-testing/tools/hotplug/Linux/vif-route-ifup @@ -0,0 +1,34 @@ +#!/bin/bash +#============================================================================ diff --git a/x86-cpufreq-report.patch b/x86-cpufreq-report.patch index 410a1ad..cffed3b 100644 --- a/x86-cpufreq-report.patch +++ b/x86-cpufreq-report.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/arch/x86/platform_hypercall.c +Index: xen-4.1.1-testing/xen/arch/x86/platform_hypercall.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/platform_hypercall.c -+++ xen-4.1.0-testing/xen/arch/x86/platform_hypercall.c +--- xen-4.1.1-testing.orig/xen/arch/x86/platform_hypercall.c ++++ xen-4.1.1-testing/xen/arch/x86/platform_hypercall.c @@ -22,7 +22,7 @@ #include #include @@ -44,10 +44,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/platform_hypercall.c default: ret = -ENOSYS; break; -Index: xen-4.1.0-testing/xen/include/public/platform.h +Index: xen-4.1.1-testing/xen/include/public/platform.h =================================================================== ---- xen-4.1.0-testing.orig/xen/include/public/platform.h -+++ xen-4.1.0-testing/xen/include/public/platform.h +--- xen-4.1.1-testing.orig/xen/include/public/platform.h ++++ xen-4.1.1-testing/xen/include/public/platform.h @@ -355,6 +355,14 @@ struct xenpf_mem_hotadd uint32_t flags; }; diff --git a/x86-extra-trap-info.patch b/x86-extra-trap-info.patch index 41781fd..a3dee21 100644 --- a/x86-extra-trap-info.patch +++ b/x86-extra-trap-info.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/arch/x86/x86_32/entry.S +Index: xen-4.1.1-testing/xen/arch/x86/x86_32/entry.S =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_32/entry.S -+++ xen-4.1.0-testing/xen/arch/x86/x86_32/entry.S +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_32/entry.S ++++ xen-4.1.1-testing/xen/arch/x86/x86_32/entry.S @@ -389,29 +389,41 @@ UNLIKELY_END(bounce_vm86_3) movl %eax,UREGS_eip+4(%esp) ret @@ -62,11 +62,11 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_32/entry.S domain_crash_synchronous: pushl $domain_crash_synchronous_string call printk -Index: xen-4.1.0-testing/xen/arch/x86/x86_64/entry.S +Index: xen-4.1.1-testing/xen/arch/x86/x86_64/entry.S =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_64/entry.S -+++ xen-4.1.0-testing/xen/arch/x86/x86_64/entry.S -@@ -408,22 +408,35 @@ UNLIKELY_END(bounce_failsafe) +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_64/entry.S ++++ xen-4.1.1-testing/xen/arch/x86/x86_64/entry.S +@@ -416,22 +416,35 @@ UNLIKELY_END(bounce_failsafe) jz domain_crash_synchronous movq %rax,UREGS_rip+8(%rsp) ret diff --git a/x86-ioapic-ack-default.patch b/x86-ioapic-ack-default.patch index 815d347..b5be017 100644 --- a/x86-ioapic-ack-default.patch +++ b/x86-ioapic-ack-default.patch @@ -1,9 +1,9 @@ Change default IO-APIC ack mode for single IO-APIC systems to old-style. -Index: xen-4.1.0-testing/xen/arch/x86/io_apic.c +Index: xen-4.1.1-testing/xen/arch/x86/io_apic.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/io_apic.c -+++ xen-4.1.0-testing/xen/arch/x86/io_apic.c +--- xen-4.1.1-testing.orig/xen/arch/x86/io_apic.c ++++ xen-4.1.1-testing/xen/arch/x86/io_apic.c @@ -1547,7 +1547,7 @@ static unsigned int startup_level_ioapic return 0; /* don't check for pending */ } @@ -13,7 +13,7 @@ Index: xen-4.1.0-testing/xen/arch/x86/io_apic.c static void setup_ioapic_ack(char *s) { if ( !strcmp(s, "old") ) -@@ -2054,6 +2054,8 @@ void __init setup_IO_APIC(void) +@@ -2044,6 +2044,8 @@ void __init setup_IO_APIC(void) else io_apic_irqs = ~PIC_IRQS; diff --git a/x86-show-page-walk-early.patch b/x86-show-page-walk-early.patch index dcbff38..c50013a 100644 --- a/x86-show-page-walk-early.patch +++ b/x86-show-page-walk-early.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/arch/x86/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/mm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/mm.c -+++ xen-4.1.0-testing/xen/arch/x86/mm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/mm.c @@ -160,6 +160,8 @@ static int get_superpage(unsigned long m #endif static void put_superpage(unsigned long mfn); @@ -11,11 +11,11 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm.c #define l1_disallow_mask(d) \ ((d != dom_io) && \ (rangeset_is_empty((d)->iomem_caps) && \ -Index: xen-4.1.0-testing/xen/arch/x86/traps.c +Index: xen-4.1.1-testing/xen/arch/x86/traps.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/traps.c -+++ xen-4.1.0-testing/xen/arch/x86/traps.c -@@ -1343,6 +1343,7 @@ asmlinkage void __init do_early_page_fau +--- xen-4.1.1-testing.orig/xen/arch/x86/traps.c ++++ xen-4.1.1-testing/xen/arch/x86/traps.c +@@ -1377,6 +1377,7 @@ asmlinkage void __init do_early_page_fau unsigned long *stk = (unsigned long *)regs; printk("Early fatal page fault at %04x:%p (cr2=%p, ec=%04x)\n", regs->cs, _p(regs->eip), _p(cr2), regs->error_code); @@ -23,10 +23,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/traps.c printk("Stack dump: "); while ( ((long)stk & ((PAGE_SIZE - 1) & ~(BYTES_PER_LONG - 1))) != 0 ) printk("%p ", _p(*stk++)); -Index: xen-4.1.0-testing/xen/arch/x86/x86_32/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/x86_32/mm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_32/mm.c -+++ xen-4.1.0-testing/xen/arch/x86/x86_32/mm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_32/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/x86_32/mm.c @@ -123,6 +123,8 @@ void __init paging_init(void) #undef CNT #undef MFN @@ -36,10 +36,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_32/mm.c /* Create page tables for ioremap()/map_domain_page_global(). */ for ( i = 0; i < (IOREMAP_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ ) { -Index: xen-4.1.0-testing/xen/arch/x86/x86_32/traps.c +Index: xen-4.1.1-testing/xen/arch/x86/x86_32/traps.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_32/traps.c -+++ xen-4.1.0-testing/xen/arch/x86/x86_32/traps.c +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_32/traps.c ++++ xen-4.1.1-testing/xen/arch/x86/x86_32/traps.c @@ -164,7 +164,8 @@ void show_page_walk(unsigned long addr) l3t += (cr3 & 0xFE0UL) >> 3; l3e = l3t[l3_table_offset(addr)]; @@ -70,10 +70,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_32/traps.c printk(" L1[0x%03lx] = %"PRIpte" %08lx\n", l1_table_offset(addr), l1e_get_intpte(l1e), pfn); unmap_domain_page(l1t); -Index: xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/x86_64/mm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_64/mm.c -+++ xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_64/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/x86_64/mm.c @@ -750,6 +750,8 @@ void __init paging_init(void) #undef CNT #undef MFN @@ -83,10 +83,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c /* Create user-accessible L2 directory to map the MPT for compat guests. */ BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) != l4_table_offset(HIRO_COMPAT_MPT_VIRT_START)); -Index: xen-4.1.0-testing/xen/arch/x86/x86_64/traps.c +Index: xen-4.1.1-testing/xen/arch/x86/x86_64/traps.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_64/traps.c -+++ xen-4.1.0-testing/xen/arch/x86/x86_64/traps.c +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_64/traps.c ++++ xen-4.1.1-testing/xen/arch/x86/x86_64/traps.c @@ -176,7 +176,8 @@ void show_page_walk(unsigned long addr) l4t = mfn_to_virt(mfn); l4e = l4t[l4_table_offset(addr)]; @@ -127,10 +127,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_64/traps.c printk(" L1[0x%03lx] = %"PRIpte" %016lx\n", l1_table_offset(addr), l1e_get_intpte(l1e), pfn); } -Index: xen-4.1.0-testing/xen/include/asm-x86/mm.h +Index: xen-4.1.1-testing/xen/include/asm-x86/mm.h =================================================================== ---- xen-4.1.0-testing.orig/xen/include/asm-x86/mm.h -+++ xen-4.1.0-testing/xen/include/asm-x86/mm.h +--- xen-4.1.1-testing.orig/xen/include/asm-x86/mm.h ++++ xen-4.1.1-testing/xen/include/asm-x86/mm.h @@ -467,6 +467,8 @@ TYPE_SAFE(unsigned long,mfn); #define SHARED_M2P_ENTRY (~0UL - 1UL) #define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) diff --git a/xen-4.1.0-testing-src.tar.bz2 b/xen-4.1.0-testing-src.tar.bz2 deleted file mode 100644 index c96e798..0000000 --- a/xen-4.1.0-testing-src.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a6043ae8ab78ecf1e75ff2014cd6a7bde3319341fe1bd7a8df335a0764355b70 -size 10778444 diff --git a/xen-4.1.1-testing-src.tar.bz2 b/xen-4.1.1-testing-src.tar.bz2 new file mode 100644 index 0000000..a76a1a4 --- /dev/null +++ b/xen-4.1.1-testing-src.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe402be2467f4d333366ed3cccb584f55bea31d72f2c8ed9bc90d1ae32d77dfc +size 10774044 diff --git a/xen-api-auth.patch b/xen-api-auth.patch index bd1ef54..39a3d5b 100644 --- a/xen-api-auth.patch +++ b/xen-api-auth.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendAuthSessions.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendAuthSessions.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendAuthSessions.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendAuthSessions.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendAuthSessions.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendAuthSessions.py @@ -84,7 +84,7 @@ class XendAuthSessions: # if PAM doesn't exist, let's ignore it return False diff --git a/xen-changeset.diff b/xen-changeset.diff index ad95165..d950a7a 100644 --- a/xen-changeset.diff +++ b/xen-changeset.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/xen/Makefile +Index: xen-4.1.1-testing/xen/Makefile =================================================================== ---- xen-4.1.0-testing.orig/xen/Makefile -+++ xen-4.1.0-testing/xen/Makefile +--- xen-4.1.1-testing.orig/xen/Makefile ++++ xen-4.1.1-testing/xen/Makefile @@ -1,3 +1,4 @@ +export XEN_CHANGESET = unavailable # This is the correct place to edit the build version. diff --git a/xen-config.diff b/xen-config.diff index caa0f7a..24aa8bb 100644 --- a/xen-config.diff +++ b/xen-config.diff @@ -1,17 +1,17 @@ -Index: xen-4.1.0-testing/Config.mk +Index: xen-4.1.1-testing/Config.mk =================================================================== ---- xen-4.1.0-testing.orig/Config.mk -+++ xen-4.1.0-testing/Config.mk -@@ -183,7 +183,7 @@ endif +--- xen-4.1.1-testing.orig/Config.mk ++++ xen-4.1.1-testing/Config.mk +@@ -194,7 +194,7 @@ endif # Specify which qemu-dm to use. This may be `ioemu' to use the old # Mercurial in-tree version, or a local directory, or a git URL. # CONFIG_QEMU ?= `pwd`/$(XEN_ROOT)/../qemu-xen.git -CONFIG_QEMU ?= $(QEMU_REMOTE) +CONFIG_QEMU ?= ioemu-qemu-xen - QEMU_TAG := xen-4.1.0 + QEMU_TAG := xen-4.1.1-rc1 #QEMU_TAG ?= e073e69457b4d99b6da0b6536296e3498f7f6599 -@@ -193,7 +193,7 @@ QEMU_TAG := xen-4.1.0 +@@ -204,7 +204,7 @@ QEMU_TAG := xen-4.1.1-rc1 # Optional components XENSTAT_XENTOP ?= y VTPM_TOOLS ?= n @@ -20,10 +20,10 @@ Index: xen-4.1.0-testing/Config.mk PYTHON_TOOLS ?= y OCAML_TOOLS ?= y CONFIG_MINITERM ?= n -Index: xen-4.1.0-testing/tools/Makefile +Index: xen-4.1.1-testing/tools/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/Makefile -+++ xen-4.1.0-testing/tools/Makefile +--- xen-4.1.1-testing.orig/tools/Makefile ++++ xen-4.1.1-testing/tools/Makefile @@ -79,14 +79,16 @@ IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TAR --interp-prefix=$(CROSS_SYS_ROOT) endif @@ -54,10 +54,10 @@ Index: xen-4.1.0-testing/tools/Makefile .PHONY: ioemu-dir-force-update ioemu-dir-force-update: -Index: xen-4.1.0-testing/tools/libxc/Makefile +Index: xen-4.1.1-testing/tools/libxc/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/libxc/Makefile -+++ xen-4.1.0-testing/tools/libxc/Makefile +--- xen-4.1.1-testing.orig/tools/libxc/Makefile ++++ xen-4.1.1-testing/tools/libxc/Makefile @@ -195,7 +195,7 @@ xc_dom_bzimageloader.opic: CFLAGS += $(c libxenguest.so.$(MAJOR).$(MINOR): COMPRESSION_LIBS = $(call zlib-options,l) @@ -67,10 +67,10 @@ Index: xen-4.1.0-testing/tools/libxc/Makefile xenctrl_osdep_ENOSYS.so: $(OSDEP_PIC_OBJS) libxenctrl.so $(CC) -g $(CFLAGS) $(LDFLAGS) $(SHLIB_LDFLAGS) -o $@ $(OSDEP_PIC_OBJS) -lxenctrl -Index: xen-4.1.0-testing/tools/firmware/etherboot/Makefile +Index: xen-4.1.1-testing/tools/firmware/etherboot/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/firmware/etherboot/Makefile -+++ xen-4.1.0-testing/tools/firmware/etherboot/Makefile +--- xen-4.1.1-testing.orig/tools/firmware/etherboot/Makefile ++++ xen-4.1.1-testing/tools/firmware/etherboot/Makefile @@ -35,11 +35,13 @@ eb-roms.h: Config mv -f $@.new $@ diff --git a/xen-destdir.diff b/xen-destdir.diff index af0847a..59bd36b 100644 --- a/xen-destdir.diff +++ b/xen-destdir.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/docs/Makefile +Index: xen-4.1.1-testing/docs/Makefile =================================================================== ---- xen-4.1.0-testing.orig/docs/Makefile -+++ xen-4.1.0-testing/docs/Makefile +--- xen-4.1.1-testing.orig/docs/Makefile ++++ xen-4.1.1-testing/docs/Makefile @@ -90,7 +90,8 @@ install: all $(INSTALL_DIR) $(DESTDIR)$(MANDIR) cp -dR man1 $(DESTDIR)$(MANDIR) @@ -22,10 +22,10 @@ Index: xen-4.1.0-testing/docs/Makefile + ln -sf $*.html html.done/$*/index.html + rm -rf html/ + -Index: xen-4.1.0-testing/tools/security/Makefile +Index: xen-4.1.1-testing/tools/security/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/security/Makefile -+++ xen-4.1.0-testing/tools/security/Makefile +--- xen-4.1.1-testing.orig/tools/security/Makefile ++++ xen-4.1.1-testing/tools/security/Makefile @@ -60,8 +60,8 @@ install: all $(ACM_CONFIG_FILE) $(INSTALL_DATA) $(ACM_INST_HTML) $(DESTDIR)$(ACM_SECGEN_HTMLDIR) $(INSTALL_DIR) $(DESTDIR)$(ACM_SECGEN_CGIDIR) @@ -37,10 +37,10 @@ Index: xen-4.1.0-testing/tools/security/Makefile else .PHONY: all all: -Index: xen-4.1.0-testing/tools/pygrub/Makefile +Index: xen-4.1.1-testing/tools/pygrub/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/pygrub/Makefile -+++ xen-4.1.0-testing/tools/pygrub/Makefile +--- xen-4.1.1-testing.orig/tools/pygrub/Makefile ++++ xen-4.1.1-testing/tools/pygrub/Makefile @@ -11,7 +11,7 @@ build: .PHONY: install install: all @@ -50,10 +50,10 @@ Index: xen-4.1.0-testing/tools/pygrub/Makefile $(INSTALL_PYTHON_PROG) src/pygrub $(DESTDIR)/$(BINDIR)/pygrub $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot -Index: xen-4.1.0-testing/tools/python/Makefile +Index: xen-4.1.1-testing/tools/python/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/python/Makefile -+++ xen-4.1.0-testing/tools/python/Makefile +--- xen-4.1.1-testing.orig/tools/python/Makefile ++++ xen-4.1.1-testing/tools/python/Makefile @@ -65,7 +65,7 @@ refresh-po: $(POTFILE) .PHONY: install install: install-messages install-dtd @@ -63,10 +63,10 @@ Index: xen-4.1.0-testing/tools/python/Makefile install-dtd: all $(INSTALL_DIR) $(DESTDIR)$(SHAREDIR)/xen -Index: xen-4.1.0-testing/tools/xenstore/Makefile +Index: xen-4.1.1-testing/tools/xenstore/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/Makefile -+++ xen-4.1.0-testing/tools/xenstore/Makefile +--- xen-4.1.1-testing.orig/tools/xenstore/Makefile ++++ xen-4.1.1-testing/tools/xenstore/Makefile @@ -10,6 +10,7 @@ CFLAGS += $(CFLAGS_libxenctrl) CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm xenstore-chmod @@ -121,10 +121,10 @@ Index: xen-4.1.0-testing/tools/xenstore/Makefile $(INSTALL_DIR) $(DESTDIR)$(LIBDIR) $(INSTALL_PROG) libxenstore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR) ln -sf libxenstore.so.$(MAJOR).$(MINOR) $(DESTDIR)$(LIBDIR)/libxenstore.so.$(MAJOR) -Index: xen-4.1.0-testing/tools/hotplug/Linux/Makefile +Index: xen-4.1.1-testing/tools/hotplug/Linux/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/Makefile -+++ xen-4.1.0-testing/tools/hotplug/Linux/Makefile +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/Makefile ++++ xen-4.1.1-testing/tools/hotplug/Linux/Makefile @@ -41,18 +41,6 @@ endif UDEV_RULES_DIR = $(CONFIG_DIR)/udev UDEV_RULES = xen-backend.rules xend.rules diff --git a/xen-disable-qemu-monitor.diff b/xen-disable-qemu-monitor.diff index efb687a..ad60f48 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-4.1.0-testing/tools/ioemu-qemu-xen/monitor.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/monitor.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/monitor.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/monitor.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/monitor.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/monitor.c @@ -1497,6 +1497,7 @@ static const term_cmd_t term_cmds[] = { "device|all", "commit changes to the disk images (if -snapshot is used) or backing files" }, { "info", "s?", do_info, diff --git a/xen-domUloader.diff b/xen-domUloader.diff index 39b33c4..4881a13 100644 --- a/xen-domUloader.diff +++ b/xen-domUloader.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/DevController.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/DevController.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/DevController.py @@ -592,6 +592,31 @@ class DevController: return (Missing, None) @@ -34,10 +34,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/server/DevController.py def backendPath(self, backdom, devid): """Construct backend path given the backend domain and device id. -Index: xen-4.1.0-testing/tools/python/xen/xend/XendBootloader.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendBootloader.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendBootloader.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendBootloader.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendBootloader.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendBootloader.py @@ -12,7 +12,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # @@ -75,10 +75,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendBootloader.py log.error(msg) raise VmError(msg) -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -2332,6 +2332,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) diff --git a/xen-fixme-doc.diff b/xen-fixme-doc.diff index 4ecad9b..ac20947 100644 --- a/xen-fixme-doc.diff +++ b/xen-fixme-doc.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +Index: xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xmdomain.cfg.pod.5 -+++ xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +--- xen-4.1.1-testing.orig/docs/man/xmdomain.cfg.pod.5 ++++ xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 @@ -335,16 +335,10 @@ at hda1, which is the root filesystem. =item I @@ -19,10 +19,10 @@ Index: xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 =back =head1 SEE ALSO -Index: xen-4.1.0-testing/docs/man/xm.pod.1 +Index: xen-4.1.1-testing/docs/man/xm.pod.1 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xm.pod.1 -+++ xen-4.1.0-testing/docs/man/xm.pod.1 +--- xen-4.1.1-testing.orig/docs/man/xm.pod.1 ++++ xen-4.1.1-testing/docs/man/xm.pod.1 @@ -295,7 +295,8 @@ scheduling by the Xen hypervisor. =item B diff --git a/xen-hvm-default-bridge.diff b/xen-hvm-default-bridge.diff index 5a7b38f..ce86e39 100644 --- a/xen-hvm-default-bridge.diff +++ b/xen-hvm-default-bridge.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/net.h +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/net.h =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/net.h -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/net.h +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/net.h ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/net.h @@ -107,8 +107,8 @@ void net_host_device_add(const char *dev void net_host_device_remove(int vlan_id, const char *device); @@ -13,10 +13,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/net.h #endif #ifdef __sun__ #define SMBD_COMMAND "/usr/sfw/sbin/smbd" -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/net.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/net.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/net.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/net.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/net.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/net.c @@ -1759,9 +1759,10 @@ int net_client_init(const char *device, } if (get_param_value(script_arg, sizeof(script_arg), "scriptarg", p) == 0 && @@ -30,10 +30,10 @@ Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/net.c } } else #endif -Index: xen-4.1.0-testing/tools/python/xen/xend/image.py +Index: xen-4.1.1-testing/tools/python/xen/xend/image.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.1.0-testing/tools/python/xen/xend/image.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.1.1-testing/tools/python/xen/xend/image.py @@ -912,11 +912,13 @@ class HVMImageHandler(ImageHandler): mac = devinfo.get('mac') if mac is None: @@ -51,10 +51,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/image.py vifname = devinfo.get('vifname') if vifname: vifname = "tap-" + vifname -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/i386-dm/qemu-ifup-Linux @@ -1,36 +1,22 @@ #!/bin/sh diff --git a/xen-hvm-default-pae.diff b/xen-hvm-default-pae.diff index 3d8c64e..f96f1cb 100644 --- a/xen-hvm-default-pae.diff +++ b/xen-hvm-default-pae.diff @@ -1,9 +1,9 @@ PAE must be on for 64-on-64 to work at all. -Index: xen-4.1.0-testing/tools/python/xen/xend/image.py +Index: xen-4.1.1-testing/tools/python/xen/xend/image.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.1.0-testing/tools/python/xen/xend/image.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.1.1-testing/tools/python/xen/xend/image.py @@ -1030,7 +1030,7 @@ class X86_HVM_ImageHandler(HVMImageHandl def configure(self, vmConfig): diff --git a/xen-ioemu-hvm-pv-support.diff b/xen-ioemu-hvm-pv-support.diff index 6b1a8c0..b92bd46 100644 --- a/xen-ioemu-hvm-pv-support.diff +++ b/xen-ioemu-hvm-pv-support.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/hw/xen_platform.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/hw/xen_platform.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/hw/xen_platform.c @@ -30,6 +30,8 @@ #include "qemu-xen.h" #include "net.h" diff --git a/xen-max-free-mem.diff b/xen-max-free-mem.diff index 079b1f6..1efb205 100644 --- a/xen-max-free-mem.diff +++ b/xen-max-free-mem.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendNode.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendNode.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendNode.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendNode.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendNode.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendNode.py @@ -949,11 +949,35 @@ class XendNode: info['cpu_mhz'] = info['cpu_khz'] / 1000 @@ -51,10 +51,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendNode.py ] if show_numa != 0: -Index: xen-4.1.0-testing/tools/python/xen/xend/balloon.py +Index: xen-4.1.1-testing/tools/python/xen/xend/balloon.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/balloon.py -+++ xen-4.1.0-testing/tools/python/xen/xend/balloon.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/balloon.py ++++ xen-4.1.1-testing/tools/python/xen/xend/balloon.py @@ -43,6 +43,8 @@ SLEEP_TIME_GROWTH = 0.1 # label actually shown in the PROC_XEN_BALLOON file. #labels = { 'current' : 'Current allocation', @@ -88,10 +88,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/balloon.py def free(need_mem, dominfo): """Balloon out memory from the privileged domain so that there is the specified required amount (in KiB) free. -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -1459,6 +1459,27 @@ class XendDomainInfo: pci_conf = self.info['devices'][dev_uuid][1] return map(pci_dict_to_bdf_str, pci_conf['devs']) @@ -120,10 +120,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py def setMemoryTarget(self, target): """Set the memory target of this domain. @param target: In MiB. -Index: xen-4.1.0-testing/tools/python/xen/xend/server/SrvDomain.py +Index: xen-4.1.1-testing/tools/python/xen/xend/server/SrvDomain.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/server/SrvDomain.py -+++ xen-4.1.0-testing/tools/python/xen/xend/server/SrvDomain.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/server/SrvDomain.py ++++ xen-4.1.1-testing/tools/python/xen/xend/server/SrvDomain.py @@ -187,7 +187,7 @@ class SrvDomain(SrvDir): diff --git a/xen-minimum-restart-time.patch b/xen-minimum-restart-time.patch index 0af17b4..32a8757 100644 --- a/xen-minimum-restart-time.patch +++ b/xen-minimum-restart-time.patch @@ -1,9 +1,9 @@ References: bnc#661298 -Index: xen-4.1.0-testing/tools/python/xen/xend/XendConstants.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendConstants.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendConstants.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendConstants.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendConstants.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendConstants.py @@ -92,7 +92,7 @@ DOM_STATES_OLD = [ SHUTDOWN_TIMEOUT = (60.0 * 5) diff --git a/xen-no-dummy-nfs-ip.diff b/xen-no-dummy-nfs-ip.diff index 1ff65b2..5205119 100644 --- a/xen-no-dummy-nfs-ip.diff +++ b/xen-no-dummy-nfs-ip.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xm/create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/create.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/create.py -+++ xen-4.1.0-testing/tools/python/xen/xm/create.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/create.py @@ -1337,9 +1337,8 @@ def preprocess_access_control(vals): def preprocess_ip(vals): diff --git a/xen-paths.diff b/xen-paths.diff index d3ad010..99f8107 100644 --- a/xen-paths.diff +++ b/xen-paths.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xm/create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/create.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/create.py -+++ xen-4.1.0-testing/tools/python/xen/xm/create.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/create.py @@ -73,7 +73,7 @@ gopts.opt('quiet', short='q', use="Quiet.") @@ -11,10 +11,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xm/create.py use="Search path for configuration scripts. " "The value of PATH is a colon-separated directory list.") -Index: xen-4.1.0-testing/docs/man/xm.pod.1 +Index: xen-4.1.1-testing/docs/man/xm.pod.1 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xm.pod.1 -+++ xen-4.1.0-testing/docs/man/xm.pod.1 +--- xen-4.1.1-testing.orig/docs/man/xm.pod.1 ++++ xen-4.1.1-testing/docs/man/xm.pod.1 @@ -75,7 +75,7 @@ in the config file. See L format, and possible options used in either the configfile or for I. @@ -33,10 +33,10 @@ Index: xen-4.1.0-testing/docs/man/xm.pod.1 soon as it is run. =item I -Index: xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +Index: xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xmdomain.cfg.pod.5 -+++ xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +--- xen-4.1.1-testing.orig/docs/man/xmdomain.cfg.pod.5 ++++ xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 @@ -4,9 +4,9 @@ xmdomain.cfg - xm domain config file for =head1 SYNOPSIS diff --git a/xen-qemu-iscsi-fix.patch b/xen-qemu-iscsi-fix.patch index b80a68d..dec7196 100644 --- a/xen-qemu-iscsi-fix.patch +++ b/xen-qemu-iscsi-fix.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +Index: xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.1.0-testing/tools/ioemu-qemu-xen/xenstore.c +--- xen-4.1.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c ++++ xen-4.1.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -449,7 +449,7 @@ void xenstore_parse_domain_config(int hv char *buf = NULL; char *fpath = NULL, *bpath = NULL, *btype = NULL, diff --git a/xen-rpmoptflags.diff b/xen-rpmoptflags.diff index 11479ad..0e3ae65 100644 --- a/xen-rpmoptflags.diff +++ b/xen-rpmoptflags.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/blktap/drivers/Makefile +Index: xen-4.1.1-testing/tools/blktap/drivers/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/drivers/Makefile -+++ xen-4.1.0-testing/tools/blktap/drivers/Makefile +--- xen-4.1.1-testing.orig/tools/blktap/drivers/Makefile ++++ xen-4.1.1-testing/tools/blktap/drivers/Makefile @@ -6,7 +6,6 @@ QCOW_UTIL = img2qcow qcow2raw qcow-cr LIBAIO_DIR = ../../libaio/src MEMSHR_DIR = ../../memshr @@ -10,10 +10,10 @@ Index: xen-4.1.0-testing/tools/blktap/drivers/Makefile CFLAGS += -Wno-unused CFLAGS += -I../lib CFLAGS += $(CFLAGS_libxenctrl) -Index: xen-4.1.0-testing/Config.mk +Index: xen-4.1.1-testing/Config.mk =================================================================== ---- xen-4.1.0-testing.orig/Config.mk -+++ xen-4.1.0-testing/Config.mk +--- xen-4.1.1-testing.orig/Config.mk ++++ xen-4.1.1-testing/Config.mk @@ -14,7 +14,7 @@ SHELL ?= /bin/sh # Tools to run on system hosting the build diff --git a/xen-unstable.xentrace.__insert_record-dst-type.patch b/xen-unstable.xentrace.__insert_record-dst-type.patch new file mode 100644 index 0000000..3e731a0 --- /dev/null +++ b/xen-unstable.xentrace.__insert_record-dst-type.patch @@ -0,0 +1,42 @@ +xentrace: Remove unneeded cast when assigning pointer value to dst + +(xen-unstable changeset: 23310:b7ca55907bd3) + +Remove unneeded cast when assigning pointer value to dst. +Both arrays are uint32_t and memcpy takes a void pointer. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -484,7 +484,7 @@ static inline void __insert_record(struc + const void *extra_data) + { + struct t_rec *rec; +- unsigned char *dst; ++ uint32_t *dst; + unsigned int extra_word = extra / sizeof(u32); + unsigned int local_rec_size = calc_rec_size(cycles, extra); + uint32_t next; +@@ -509,13 +509,13 @@ static inline void __insert_record(struc + + rec->event = event; + rec->extra_u32 = extra_word; +- dst = (unsigned char *)rec->u.nocycles.extra_u32; ++ dst = rec->u.nocycles.extra_u32; + if ( (rec->cycles_included = cycles) != 0 ) + { + u64 tsc = (u64)get_cycles(); + rec->u.cycles.cycles_lo = (uint32_t)tsc; + rec->u.cycles.cycles_hi = (uint32_t)(tsc >> 32); +- dst = (unsigned char *)rec->u.cycles.extra_u32; ++ dst = rec->u.cycles.extra_u32; + } + + if ( extra_data && extra ) diff --git a/xen-unstable.xentrace.comments.patch b/xen-unstable.xentrace.comments.patch new file mode 100644 index 0000000..ec906f6 --- /dev/null +++ b/xen-unstable.xentrace.comments.patch @@ -0,0 +1,30 @@ +xentrace: update comments + +(xen-unstable changeset 23094:d09e8885bc82) + +Fix a typo, remove redundant comment. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -197,12 +197,11 @@ static int alloc_trace_bufs(unsigned int + t_info->tbuf_size = pages; + + /* +- * Now share the pages to xentrace can map them, and write them in ++ * Now share the pages so xentrace can map them, and write them in + * the global t_info structure. + */ + for_each_online_cpu(cpu) + { +- /* Share pages so that xentrace can map them. */ + void *rawbuf = per_cpu(t_bufs, cpu); + struct page_info *p = virt_to_page(rawbuf); + uint32_t mfn = virt_to_mfn(rawbuf); diff --git a/xen-unstable.xentrace.data_size__read_mostly.patch b/xen-unstable.xentrace.data_size__read_mostly.patch new file mode 100644 index 0000000..91d93fd --- /dev/null +++ b/xen-unstable.xentrace.data_size__read_mostly.patch @@ -0,0 +1,23 @@ +xentrace: Mark data_size __read_mostly because it's only written once + +(xen-unstable changeset: 23309:0ddcc8063690) + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -55,7 +55,7 @@ static unsigned int t_info_pages; + static DEFINE_PER_CPU_READ_MOSTLY(struct t_buf *, t_bufs); + static DEFINE_PER_CPU_READ_MOSTLY(unsigned char *, t_data); + static DEFINE_PER_CPU_READ_MOSTLY(spinlock_t, t_lock); +-static u32 data_size; ++static u32 data_size __read_mostly; + + /* High water mark for trace buffers; */ + /* Send virtual interrupt when buffer level reaches this point */ diff --git a/xentrace.dynamic_sized_tbuf.patch b/xen-unstable.xentrace.dynamic_tbuf.patch similarity index 81% rename from xentrace.dynamic_sized_tbuf.patch rename to xen-unstable.xentrace.dynamic_tbuf.patch index 7617706..536f70a 100644 --- a/xentrace.dynamic_sized_tbuf.patch +++ b/xen-unstable.xentrace.dynamic_tbuf.patch @@ -1,21 +1,34 @@ ---- - xen/common/trace.c | 234 +++++++++++++++++++---------------------------------- - 1 file changed, 88 insertions(+), 146 deletions(-) +xentrace: dynamic tracebuffer allocation -Index: xen-4.1.0-testing/xen/common/trace.c +(xen-unstable changeset 23050:4ebba54b666f) + +Allocate tracebuffers dynamically, based on the requested buffer size. +Calculate t_info_size from requested t_buf size. +Fix allocation failure path, free pages outside the spinlock. +Remove casts for rawbuf, it can be a void pointer since no math is done. + +Signed-off-by: Olaf Hering + +--- +v3: + add comments to calculate_tbuf_size for side effects and max value +v2: + if per_cpu allocation fails, free also t_info to allow a retry with a + smaller tbuf_size + + xen/common/trace.c | 249 ++++++++++++++++++++++------------------------------- + 1 file changed, 104 insertions(+), 145 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/trace.c -+++ xen-4.1.0-testing/xen/common/trace.c -@@ -42,14 +42,18 @@ CHECK_t_buf; +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -42,14 +42,14 @@ CHECK_t_buf; #define compat_t_rec t_rec #endif -/* opt_tbuf_size: trace buffer size (in pages) */ -static unsigned int opt_tbuf_size = 0; -+#ifndef PFN_UP -+#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) -+#endif -+ +/* opt_tbuf_size: trace buffer size (in pages) for each cpu */ +static unsigned int opt_tbuf_size; integer_param("tbuf_size", opt_tbuf_size); @@ -29,7 +42,29 @@ Index: xen-4.1.0-testing/xen/common/trace.c static DEFINE_PER_CPU_READ_MOSTLY(struct t_buf *, t_bufs); static DEFINE_PER_CPU_READ_MOSTLY(unsigned char *, t_data); static DEFINE_PER_CPU_READ_MOSTLY(spinlock_t, t_lock); -@@ -85,20 +89,29 @@ static void calc_tinfo_first_offset(void +@@ -78,6 +78,21 @@ static u32 tb_event_mask = TRC_ALL; + * i.e., sizeof(_type) * ans >= _x. */ + #define fit_to_type(_type, _x) (((_x)+sizeof(_type)-1) / sizeof(_type)) + ++static int cpu_callback( ++ struct notifier_block *nfb, unsigned long action, void *hcpu) ++{ ++ unsigned int cpu = (unsigned long)hcpu; ++ ++ if ( action == CPU_UP_PREPARE ) ++ spin_lock_init(&per_cpu(t_lock, cpu)); ++ ++ return NOTIFY_DONE; ++} ++ ++static struct notifier_block cpu_nfb = { ++ .notifier_call = cpu_callback ++}; ++ + static void calc_tinfo_first_offset(void) + { + int offset_in_bytes = offsetof(struct t_info, mfn_offset[NR_CPUS]); +@@ -85,20 +100,34 @@ static void calc_tinfo_first_offset(void } /** @@ -37,20 +72,22 @@ Index: xen-4.1.0-testing/xen/common/trace.c + * calculate_tbuf_size - check to make sure that the proposed size will fit * in the currently sized struct t_info and allows prod and cons to * reach double the value without overflow. ++ * Initialize t_info_pages based on number of trace pages. */ -static int check_tbuf_size(u32 pages) +static int calculate_tbuf_size(unsigned int pages) { struct t_buf dummy; -- typeof(dummy.prod) size; + typeof(dummy.prod) size; - - size = ((typeof(dummy.prod))pages) * PAGE_SIZE; - - return (size / PAGE_SIZE != pages) - || (size + size < size) - || (num_online_cpus() * pages + t_info_first_offset > T_INFO_SIZE / sizeof(uint32_t)); -+ typeof(dummy.prod) size = -1; -+ unsigned int t_info_bytes; ++ ++ /* force maximum value for an unsigned type */ ++ size = -1; + + /* max size holds up to n pages */ + size /= PAGE_SIZE; @@ -61,14 +98,16 @@ Index: xen-4.1.0-testing/xen/common/trace.c + pages = size; + } + -+ t_info_bytes = num_online_cpus() * pages + t_info_first_offset; -+ t_info_bytes *= sizeof(uint32_t); -+ t_info_pages = PFN_UP(t_info_bytes); ++ t_info_pages = num_online_cpus() * pages + t_info_first_offset; ++ t_info_pages *= sizeof(uint32_t); ++ t_info_pages /= PAGE_SIZE; ++ if ( t_info_pages % PAGE_SIZE ) ++ t_info_pages++; + return pages; } /** -@@ -111,47 +124,28 @@ static int check_tbuf_size(u32 pages) +@@ -111,47 +140,28 @@ static int check_tbuf_size(u32 pages) * This function may also be called later when enabling trace buffers * via the SET_SIZE hypercall. */ @@ -95,7 +134,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c + if ( pages == 0 ) return -EINVAL; - } -- + - /* t_info size is fixed for now. Currently this works great, so there - * seems to be no need to make it dynamic. */ - t_info = alloc_xenheap_pages(get_order_from_pages(T_INFO_PAGES), 0); @@ -105,7 +144,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c - "Tracing disabled.\n"); - return -ENOMEM; - } - +- - for ( i = 0; i < T_INFO_PAGES; i++ ) - share_xen_page_with_privileged_guests( - virt_to_page(t_info) + i, XENSHARE_readonly); @@ -128,7 +167,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c /* * First, allocate buffers for all of the cpus. If any -@@ -159,27 +153,29 @@ static int alloc_trace_bufs(void) +@@ -159,27 +169,29 @@ static int alloc_trace_bufs(void) */ for_each_online_cpu(cpu) { @@ -167,17 +206,16 @@ Index: xen-4.1.0-testing/xen/common/trace.c /* * Now share the pages to xentrace can map them, and write them in -@@ -188,89 +184,74 @@ static int alloc_trace_bufs(void) +@@ -188,89 +200,75 @@ static int alloc_trace_bufs(void) for_each_online_cpu(cpu) { /* Share pages so that xentrace can map them. */ - char *rawbuf; - -- if ( (rawbuf = (char *)per_cpu(t_bufs, cpu)) ) + void *rawbuf = per_cpu(t_bufs, cpu); + struct page_info *p = virt_to_page(rawbuf); + uint32_t mfn = virt_to_mfn(rawbuf); -+ + +- if ( (rawbuf = (char *)per_cpu(t_bufs, cpu)) ) + for ( i = 0; i < pages; i++ ) { - struct page_info *p = virt_to_page(rawbuf); @@ -210,13 +248,14 @@ Index: xen-4.1.0-testing/xen/common/trace.c - data_size = (opt_tbuf_size * PAGE_SIZE - sizeof(struct t_buf)); + data_size = (pages * PAGE_SIZE - sizeof(struct t_buf)); t_buf_highwater = data_size >> 1; /* 50% high water */ - + opt_tbuf_size = pages; + ++ register_cpu_notifier(&cpu_nfb); ++ + printk("Xen trace buffers: initialised\n"); + wmb(); /* above must be visible before tb_init_done flag set */ + tb_init_done = 1; -+ + return 0; + out_dealloc: @@ -229,6 +268,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c - if ( (rawbuf = (char *)per_cpu(t_bufs, cpu)) ) + void *rawbuf = per_cpu(t_bufs, cpu); + per_cpu(t_bufs, cpu) = NULL; ++ printk("Xen trace buffers: cpu %d p %p\n", cpu, rawbuf); + if ( rawbuf ) { - per_cpu(t_bufs, cpu) = NULL; @@ -268,13 +308,13 @@ Index: xen-4.1.0-testing/xen/common/trace.c - if ( size != opt_tbuf_size ) - gdprintk(XENLOG_INFO, "tb_set_size from %d to %d not implemented\n", - opt_tbuf_size, size); -- return -EINVAL; -- } -- -- if ( size <= 0 ) + gdprintk(XENLOG_INFO, "tb_set_size from %d to %d not implemented\n", + opt_tbuf_size, pages); return -EINVAL; + } + +- if ( size <= 0 ) +- return -EINVAL; - - opt_tbuf_size = size; - @@ -282,15 +322,15 @@ Index: xen-4.1.0-testing/xen/common/trace.c - { - opt_tbuf_size = 0; - return ret; - } - +- } +- - printk("Xen trace buffers: initialized\n"); - return 0; + return alloc_trace_bufs(pages); } int trace_will_trace_event(u32 event) -@@ -299,21 +280,6 @@ int trace_will_trace_event(u32 event) +@@ -299,21 +297,6 @@ int trace_will_trace_event(u32 event) return 1; } @@ -312,7 +352,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c /** * init_trace_bufs - performs initialization of the per-cpu trace buffers. * -@@ -323,37 +289,13 @@ static struct notifier_block cpu_nfb = { +@@ -323,37 +306,13 @@ static struct notifier_block cpu_nfb = { */ void __init init_trace_bufs(void) { @@ -327,14 +367,14 @@ Index: xen-4.1.0-testing/xen/common/trace.c - register_cpu_notifier(&cpu_nfb); - - if ( opt_tbuf_size == 0 ) -+ if ( opt_tbuf_size && alloc_trace_bufs(opt_tbuf_size) ) - { +- { - printk("Xen trace buffers: disabled\n"); - goto fail; - } - - if ( alloc_trace_bufs() != 0 ) -- { ++ if ( opt_tbuf_size && alloc_trace_bufs(opt_tbuf_size) ) + { - dprintk(XENLOG_INFO, "Xen trace buffers: " - "allocation size %d failed, disabling\n", - opt_tbuf_size); @@ -355,7 +395,7 @@ Index: xen-4.1.0-testing/xen/common/trace.c } /** -@@ -372,7 +314,7 @@ int tb_control(xen_sysctl_tbuf_op_t *tbc +@@ -372,7 +331,7 @@ int tb_control(xen_sysctl_tbuf_op_t *tbc case XEN_SYSCTL_TBUFOP_get_info: tbc->evt_mask = tb_event_mask; tbc->buffer_mfn = t_info ? virt_to_mfn(t_info) : 0; diff --git a/xen-unstable.xentrace.empty_t_info_pages.patch b/xen-unstable.xentrace.empty_t_info_pages.patch new file mode 100644 index 0000000..abb6f63 --- /dev/null +++ b/xen-unstable.xentrace.empty_t_info_pages.patch @@ -0,0 +1,51 @@ +xentrace: fix t_info_pages calculation for the default case + +(xen-unstable changeset 23091:67632e5cf652) + +The default tracebuffer size of 32 pages was not tested with the previous patch. +As a result, t_info_pages will become zero and alloc_xenheap_pages() fails. +Catch this case and allocate at least one page. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -33,6 +33,8 @@ + #include + #include + ++#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) ++ + #ifdef CONFIG_COMPAT + #include + #define xen_t_buf t_buf +@@ -109,6 +111,7 @@ static int calculate_tbuf_size(unsigned + { + struct t_buf dummy; + typeof(dummy.prod) size; ++ unsigned int t_info_words, t_info_bytes; + + /* force maximum value for an unsigned type */ + size = -1; +@@ -122,11 +125,9 @@ static int calculate_tbuf_size(unsigned + pages = size; + } + +- t_info_pages = num_online_cpus() * pages + t_info_first_offset; +- t_info_pages *= sizeof(uint32_t); +- t_info_pages /= PAGE_SIZE; +- if ( t_info_pages % PAGE_SIZE ) +- t_info_pages++; ++ t_info_words = num_online_cpus() * pages + t_info_first_offset; ++ t_info_bytes = t_info_words * sizeof(uint32_t); ++ t_info_pages = PFN_UP(t_info_bytes); + return pages; + } + diff --git a/xen-unstable.xentrace.no_gdprintk.patch b/xen-unstable.xentrace.no_gdprintk.patch new file mode 100644 index 0000000..10a1adf --- /dev/null +++ b/xen-unstable.xentrace.no_gdprintk.patch @@ -0,0 +1,41 @@ +xentrace: remove gdprintk usage since they are not in guest context + +(xen-unstable changeset 23093:4b784605b089) + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -120,7 +120,7 @@ static int calculate_tbuf_size(unsigned + size /= PAGE_SIZE; + if ( pages > size ) + { +- gdprintk(XENLOG_INFO, "%s: requested number of %u pages reduced to %u\n", ++ printk(XENLOG_INFO "%s: requested number of %u pages reduced to %u\n", + __func__, pages, (unsigned int)size); + pages = size; + } +@@ -266,7 +266,7 @@ static int tb_set_size(unsigned int page + */ + if ( opt_tbuf_size && pages != opt_tbuf_size ) + { +- gdprintk(XENLOG_INFO, "tb_set_size from %d to %d not implemented\n", ++ printk(XENLOG_INFO "tb_set_size from %d to %d not implemented\n", + opt_tbuf_size, pages); + return -EINVAL; + } +@@ -311,7 +311,7 @@ void __init init_trace_bufs(void) + { + if ( opt_tbuf_size && alloc_trace_bufs(opt_tbuf_size) ) + { +- gdprintk(XENLOG_INFO, "Xen trace buffers: " ++ printk(XENLOG_INFO "Xen trace buffers: " + "allocation size %d failed, disabling\n", + opt_tbuf_size); + opt_tbuf_size = 0; diff --git a/xen-unstable.xentrace.printk_prefix.patch b/xen-unstable.xentrace.printk_prefix.patch new file mode 100644 index 0000000..5523fe4 --- /dev/null +++ b/xen-unstable.xentrace.printk_prefix.patch @@ -0,0 +1,107 @@ +xentrace: use consistent printk prefix + +(xen-unstable changeset 23095:941119d58655) + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -120,16 +120,18 @@ static int calculate_tbuf_size(unsigned + size /= PAGE_SIZE; + if ( pages > size ) + { +- printk(XENLOG_INFO "%s: requested number of %u pages reduced to %u\n", +- __func__, pages, (unsigned int)size); ++ printk(XENLOG_INFO "xentrace: requested number of %u pages " ++ "reduced to %u\n", ++ pages, (unsigned int)size); + pages = size; + } + + t_info_words = num_online_cpus() * pages + t_info_first_offset; + t_info_bytes = t_info_words * sizeof(uint32_t); + t_info_pages = PFN_UP(t_info_bytes); +- printk(XENLOG_INFO "xentrace: requesting %u t_info pages for %u trace pages on %u cpus\n", +- t_info_pages, pages, num_online_cpus()); ++ printk(XENLOG_INFO "xentrace: requesting %u t_info pages " ++ "for %u trace pages on %u cpus\n", ++ t_info_pages, pages, num_online_cpus()); + return pages; + } + +@@ -178,7 +180,8 @@ static int alloc_trace_bufs(unsigned int + if ( (rawbuf = alloc_xenheap_pages( + order, MEMF_bits(32 + PAGE_SHIFT))) == NULL ) + { +- printk("Xen trace buffers: memory allocation failed on cpu %d\n", cpu); ++ printk(XENLOG_INFO "xentrace: memory allocation failed " ++ "on cpu %d\n", cpu); + goto out_dealloc; + } + +@@ -213,7 +216,7 @@ static int alloc_trace_bufs(unsigned int + t_info_mfn_list[offset + i]=mfn + i; + } + t_info->mfn_offset[cpu]=offset; +- printk(XENLOG_INFO "p%d mfn %"PRIx32" offset %d\n", ++ printk(XENLOG_INFO "xentrace: p%d mfn %"PRIx32" offset %d\n", + cpu, mfn, offset); + offset+=i; + +@@ -226,7 +229,7 @@ static int alloc_trace_bufs(unsigned int + + register_cpu_notifier(&cpu_nfb); + +- printk("Xen trace buffers: initialised\n"); ++ printk("xentrace: initialised\n"); + wmb(); /* above must be visible before tb_init_done flag set */ + tb_init_done = 1; + +@@ -237,7 +240,7 @@ out_dealloc: + { + void *rawbuf = per_cpu(t_bufs, cpu); + per_cpu(t_bufs, cpu) = NULL; +- printk("Xen trace buffers: cpu %d p %p\n", cpu, rawbuf); ++ printk(XENLOG_DEBUG "xentrace: cpu %d p %p\n", cpu, rawbuf); + if ( rawbuf ) + { + ASSERT(!(virt_to_page(rawbuf)->count_info & PGC_allocated)); +@@ -246,7 +249,7 @@ out_dealloc: + } + free_xenheap_pages(t_info, get_order_from_pages(t_info_pages)); + t_info = NULL; +- printk("Xen trace buffers: allocation failed! Tracing disabled.\n"); ++ printk(XENLOG_WARNING "xentrace: allocation failed! Tracing disabled.\n"); + return -ENOMEM; + } + +@@ -265,8 +268,9 @@ static int tb_set_size(unsigned int page + */ + if ( opt_tbuf_size && pages != opt_tbuf_size ) + { +- printk(XENLOG_INFO "tb_set_size from %d to %d not implemented\n", +- opt_tbuf_size, pages); ++ printk(XENLOG_INFO "xentrace: tb_set_size from %d to %d " ++ "not implemented\n", ++ opt_tbuf_size, pages); + return -EINVAL; + } + +@@ -310,9 +314,8 @@ void __init init_trace_bufs(void) + { + if ( opt_tbuf_size && alloc_trace_bufs(opt_tbuf_size) ) + { +- printk(XENLOG_INFO "Xen trace buffers: " +- "allocation size %d failed, disabling\n", +- opt_tbuf_size); ++ printk(XENLOG_INFO "xentrace: allocation size %d failed, disabling\n", ++ opt_tbuf_size); + opt_tbuf_size = 0; + } + } diff --git a/xen-unstable.xentrace.register_cpu_notifier-boot_time.patch b/xen-unstable.xentrace.register_cpu_notifier-boot_time.patch new file mode 100644 index 0000000..3bc00fb --- /dev/null +++ b/xen-unstable.xentrace.register_cpu_notifier-boot_time.patch @@ -0,0 +1,35 @@ +xentrace: Move register_cpu_notifier() call into boot-time init. + +(xen-unstable changeset 23173:94cef9aaf0cd) + +We can't do it lazily from alloc_trace_bufs() as that gets called +later if tracing is enabled later by dom0. + +Signed-off-by: Keir Fraser + +--- + xen/common/trace.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -226,8 +226,6 @@ static int alloc_trace_bufs(unsigned int + t_buf_highwater = data_size >> 1; /* 50% high water */ + opt_tbuf_size = pages; + +- register_cpu_notifier(&cpu_nfb); +- + printk("xentrace: initialised\n"); + wmb(); /* above must be visible before tb_init_done flag set */ + tb_init_done = 1; +@@ -310,6 +308,8 @@ int trace_will_trace_event(u32 event) + */ + void __init init_trace_bufs(void) + { ++ register_cpu_notifier(&cpu_nfb); ++ + if ( opt_tbuf_size && alloc_trace_bufs(opt_tbuf_size) ) + { + printk(XENLOG_INFO "xentrace: allocation size %d failed, disabling\n", diff --git a/xen-unstable.xentrace.remove_debug_printk.patch b/xen-unstable.xentrace.remove_debug_printk.patch new file mode 100644 index 0000000..752b37a --- /dev/null +++ b/xen-unstable.xentrace.remove_debug_printk.patch @@ -0,0 +1,24 @@ +xentrace: remove unneeded debug printk + +(xen-unstable changeset 23129:219ba19aedeb) + +The pointer value in case of an allocation failure is rather uninteresting. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 1 - + 1 file changed, 1 deletion(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -240,7 +240,6 @@ out_dealloc: + { + void *rawbuf = per_cpu(t_bufs, cpu); + per_cpu(t_bufs, cpu) = NULL; +- printk(XENLOG_DEBUG "xentrace: cpu %d p %p\n", cpu, rawbuf); + if ( rawbuf ) + { + ASSERT(!(virt_to_page(rawbuf)->count_info & PGC_allocated)); diff --git a/xen-unstable.xentrace.t_info_first_offset.patch b/xen-unstable.xentrace.t_info_first_offset.patch new file mode 100644 index 0000000..f1cc77b --- /dev/null +++ b/xen-unstable.xentrace.t_info_first_offset.patch @@ -0,0 +1,68 @@ +xentrace: Move the global variable t_info_first_offset into calculate_tbuf_size() + +(xen-unstable changeset 23308:fb5313e64335) + +Move the global variable t_info_first_offset into +calculate_tbuf_size() because it is only used there. Change the type +from u32 to uint32_t to match type in other places. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -56,7 +56,6 @@ static DEFINE_PER_CPU_READ_MOSTLY(struct + static DEFINE_PER_CPU_READ_MOSTLY(unsigned char *, t_data); + static DEFINE_PER_CPU_READ_MOSTLY(spinlock_t, t_lock); + static u32 data_size; +-static u32 t_info_first_offset __read_mostly; + + /* High water mark for trace buffers; */ + /* Send virtual interrupt when buffer level reaches this point */ +@@ -95,10 +94,10 @@ static struct notifier_block cpu_nfb = { + .notifier_call = cpu_callback + }; + +-static void calc_tinfo_first_offset(void) ++static uint32_t calc_tinfo_first_offset(void) + { + int offset_in_bytes = offsetof(struct t_info, mfn_offset[NR_CPUS]); +- t_info_first_offset = fit_to_type(uint32_t, offset_in_bytes); ++ return fit_to_type(uint32_t, offset_in_bytes); + } + + /** +@@ -108,7 +107,7 @@ static void calc_tinfo_first_offset(void + * The t_info layout is fixed and cant be changed without breaking xentrace. + * Initialize t_info_pages based on number of trace pages. + */ +-static int calculate_tbuf_size(unsigned int pages) ++static int calculate_tbuf_size(unsigned int pages, uint32_t t_info_first_offset) + { + struct t_buf dummy_size; + typeof(dummy_size.prod) max_size; +@@ -157,6 +156,7 @@ static int alloc_trace_bufs(unsigned int + int i, cpu, order; + /* Start after a fixed-size array of NR_CPUS */ + uint32_t *t_info_mfn_list; ++ uint32_t t_info_first_offset; + int offset; + + if ( t_info ) +@@ -166,9 +166,9 @@ static int alloc_trace_bufs(unsigned int + return -EINVAL; + + /* Calculate offset in u32 of first mfn */ +- calc_tinfo_first_offset(); ++ t_info_first_offset = calc_tinfo_first_offset(); + +- pages = calculate_tbuf_size(pages); ++ pages = calculate_tbuf_size(pages, t_info_first_offset); + order = get_order_from_pages(pages); + + t_info = alloc_xenheap_pages(get_order_from_pages(t_info_pages), 0); diff --git a/xen-unstable.xentrace.t_info_page-overflow.patch b/xen-unstable.xentrace.t_info_page-overflow.patch new file mode 100644 index 0000000..e7cb34b --- /dev/null +++ b/xen-unstable.xentrace.t_info_page-overflow.patch @@ -0,0 +1,65 @@ +xentrace: correct overflow check for number of per-cpu trace pages + +(xen-unstable changeset 23239:51d89366c859) + +The calculated number of per-cpu trace pages is stored in t_info and +shared with tools like xentrace. Since its an u16 the value may overflow +because the current check is based on u32. +Using the u16 means each cpu could in theory use up to 256MB as trace +buffer. However such a large allocation will currently fail on x86 due +to the MAX_ORDER limit. +Check both max theoretical number of pages per cpu and max number of +pages reachable by struct t_buf->prod/cons variables with requested +number of pages. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 22 +++++++++++++++------- + 1 file changed, 15 insertions(+), 7 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -105,25 +105,33 @@ static void calc_tinfo_first_offset(void + * calculate_tbuf_size - check to make sure that the proposed size will fit + * in the currently sized struct t_info and allows prod and cons to + * reach double the value without overflow. ++ * The t_info layout is fixed and cant be changed without breaking xentrace. + * Initialize t_info_pages based on number of trace pages. + */ + static int calculate_tbuf_size(unsigned int pages) + { +- struct t_buf dummy; +- typeof(dummy.prod) size; ++ struct t_buf dummy_size; ++ typeof(dummy_size.prod) max_size; ++ struct t_info dummy_pages; ++ typeof(dummy_pages.tbuf_size) max_pages; + unsigned int t_info_words; + + /* force maximum value for an unsigned type */ +- size = -1; ++ max_size = -1; ++ max_pages = -1; + + /* max size holds up to n pages */ +- size /= PAGE_SIZE; +- if ( pages > size ) ++ max_size /= PAGE_SIZE; ++ ++ if ( max_size < max_pages ) ++ max_pages = max_size; ++ ++ if ( pages > max_pages ) + { + printk(XENLOG_INFO "xentrace: requested number of %u pages " + "reduced to %u\n", +- pages, (unsigned int)size); +- pages = size; ++ pages, max_pages); ++ pages = max_pages; + } + + t_info_words = num_online_cpus() * pages * sizeof(uint32_t); diff --git a/xen-unstable.xentrace.t_info_pages-formula.patch b/xen-unstable.xentrace.t_info_pages-formula.patch new file mode 100644 index 0000000..a2fa6bf --- /dev/null +++ b/xen-unstable.xentrace.t_info_pages-formula.patch @@ -0,0 +1,40 @@ +xentrace: correct formula to calculate t_info_pages + +(xen-unstable changeset 23128:4a335f1000ea) + +The current formula to calculate t_info_pages, based on the initial +code, is slightly incorrect. It may allocate more than needed. +Each cpu has some pages/mfns stored as uint32_t. +That list is stored with an offset at tinfo. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -111,7 +111,7 @@ static int calculate_tbuf_size(unsigned + { + struct t_buf dummy; + typeof(dummy.prod) size; +- unsigned int t_info_words, t_info_bytes; ++ unsigned int t_info_words; + + /* force maximum value for an unsigned type */ + size = -1; +@@ -126,9 +126,8 @@ static int calculate_tbuf_size(unsigned + pages = size; + } + +- t_info_words = num_online_cpus() * pages + t_info_first_offset; +- t_info_bytes = t_info_words * sizeof(uint32_t); +- t_info_pages = PFN_UP(t_info_bytes); ++ t_info_words = num_online_cpus() * pages * sizeof(uint32_t); ++ t_info_pages = PFN_UP(t_info_first_offset + t_info_words); + printk(XENLOG_INFO "xentrace: requesting %u t_info pages " + "for %u trace pages on %u cpus\n", + t_info_pages, pages, num_online_cpus()); diff --git a/xen-unstable.xentrace.verbose.patch b/xen-unstable.xentrace.verbose.patch new file mode 100644 index 0000000..3fdeebf --- /dev/null +++ b/xen-unstable.xentrace.verbose.patch @@ -0,0 +1,26 @@ +xentrace: print calculated numbers in calculate_tbuf_size() + +(xen-unstable changeset 23092:45dafa422812) + +Print number of pages to allocate for per-cpu tracebuffer and metadata +to ease debugging when allocation fails. + +Signed-off-by: Olaf Hering + +--- + xen/common/trace.c | 2 ++ + 1 file changed, 2 insertions(+) + +Index: xen-4.1.1-testing/xen/common/trace.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/common/trace.c ++++ xen-4.1.1-testing/xen/common/trace.c +@@ -128,6 +128,8 @@ static int calculate_tbuf_size(unsigned + t_info_words = num_online_cpus() * pages + t_info_first_offset; + t_info_bytes = t_info_words * sizeof(uint32_t); + t_info_pages = PFN_UP(t_info_bytes); ++ printk(XENLOG_INFO "xentrace: requesting %u t_info pages for %u trace pages on %u cpus\n", ++ t_info_pages, pages, num_online_cpus()); + return pages; + } + diff --git a/xen-warnings-unused.diff b/xen-warnings-unused.diff index 4bec9eb..9080395 100644 --- a/xen-warnings-unused.diff +++ b/xen-warnings-unused.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/libxc/xc_tmem.c +Index: xen-4.1.1-testing/tools/libxc/xc_tmem.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxc/xc_tmem.c -+++ xen-4.1.0-testing/tools/libxc/xc_tmem.c +--- xen-4.1.1-testing.orig/tools/libxc/xc_tmem.c ++++ xen-4.1.1-testing/tools/libxc/xc_tmem.c @@ -390,7 +390,8 @@ static int xc_tmem_restore_new_pool( int xc_tmem_restore(xc_interface *xch, int dom, int io_fd) @@ -12,10 +12,10 @@ Index: xen-4.1.0-testing/tools/libxc/xc_tmem.c uint32_t this_max_pools, this_version; uint32_t pool_id; uint32_t minusone; -Index: xen-4.1.0-testing/tools/libxc/xc_domain_restore.c +Index: xen-4.1.1-testing/tools/libxc/xc_domain_restore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxc/xc_domain_restore.c -+++ xen-4.1.0-testing/tools/libxc/xc_domain_restore.c +--- xen-4.1.1-testing.orig/tools/libxc/xc_domain_restore.c ++++ xen-4.1.1-testing/tools/libxc/xc_domain_restore.c @@ -1087,7 +1087,6 @@ int xc_domain_restore(xc_interface *xch, int vcpuextstate = 0; uint32_t vcpuextstate_size = 0; @@ -32,10 +32,10 @@ Index: xen-4.1.0-testing/tools/libxc/xc_domain_restore.c n = m = 0; loadpages: -Index: xen-4.1.0-testing/tools/misc/gtraceview.c +Index: xen-4.1.1-testing/tools/misc/gtraceview.c =================================================================== ---- xen-4.1.0-testing.orig/tools/misc/gtraceview.c -+++ xen-4.1.0-testing/tools/misc/gtraceview.c +--- xen-4.1.1-testing.orig/tools/misc/gtraceview.c ++++ xen-4.1.1-testing/tools/misc/gtraceview.c @@ -622,7 +622,8 @@ void crt_init(void) void nr_addch(int nr, int ch) { @@ -46,10 +46,10 @@ Index: xen-4.1.0-testing/tools/misc/gtraceview.c getyx(stdscr, y, x); for (i = 0; i < nr; i++) { if (x == COLS-1) -Index: xen-4.1.0-testing/tools/xcutils/xc_restore.c +Index: xen-4.1.1-testing/tools/xcutils/xc_restore.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xcutils/xc_restore.c -+++ xen-4.1.0-testing/tools/xcutils/xc_restore.c +--- xen-4.1.1-testing.orig/tools/xcutils/xc_restore.c ++++ xen-4.1.1-testing/tools/xcutils/xc_restore.c @@ -19,7 +19,8 @@ int main(int argc, char **argv) { @@ -60,10 +60,10 @@ Index: xen-4.1.0-testing/tools/xcutils/xc_restore.c xc_interface *xch; int io_fd, ret; int superpages; -Index: xen-4.1.0-testing/tools/firmware/rombios/32bit/tcgbios/tcgbios.c +Index: xen-4.1.1-testing/tools/firmware/rombios/32bit/tcgbios/tcgbios.c =================================================================== ---- xen-4.1.0-testing.orig/tools/firmware/rombios/32bit/tcgbios/tcgbios.c -+++ xen-4.1.0-testing/tools/firmware/rombios/32bit/tcgbios/tcgbios.c +--- xen-4.1.1-testing.orig/tools/firmware/rombios/32bit/tcgbios/tcgbios.c ++++ xen-4.1.1-testing/tools/firmware/rombios/32bit/tcgbios/tcgbios.c @@ -1064,7 +1064,7 @@ uint32_t HashLogEvent32(struct hlei *hle uint32_t rc = 0; uint16_t size; @@ -73,10 +73,10 @@ Index: xen-4.1.0-testing/tools/firmware/rombios/32bit/tcgbios/tcgbios.c uint32_t hashdataptr; uint32_t hashdatalen; -Index: xen-4.1.0-testing/tools/console/client/main.c +Index: xen-4.1.1-testing/tools/console/client/main.c =================================================================== ---- xen-4.1.0-testing.orig/tools/console/client/main.c -+++ xen-4.1.0-testing/tools/console/client/main.c +--- xen-4.1.1-testing.orig/tools/console/client/main.c ++++ xen-4.1.1-testing/tools/console/client/main.c @@ -277,7 +277,8 @@ int main(int argc, char **argv) }; @@ -87,10 +87,10 @@ Index: xen-4.1.0-testing/tools/console/client/main.c struct xs_handle *xs; char *end; console_type type = CONSOLE_INVAL; -Index: xen-4.1.0-testing/tools/xenstat/xentop/xentop.c +Index: xen-4.1.1-testing/tools/xenstat/xentop/xentop.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstat/xentop/xentop.c -+++ xen-4.1.0-testing/tools/xenstat/xentop/xentop.c +--- xen-4.1.1-testing.orig/tools/xenstat/xentop/xentop.c ++++ xen-4.1.1-testing/tools/xenstat/xentop/xentop.c @@ -272,7 +272,8 @@ static void fail(const char *str) /* Return the row containing the cursor. */ static int current_row(void) @@ -111,10 +111,10 @@ Index: xen-4.1.0-testing/tools/xenstat/xentop/xentop.c getmaxyx(stdscr, y, x); return y; } -Index: xen-4.1.0-testing/tools/libxl/libxlu_cfg.c +Index: xen-4.1.1-testing/tools/libxl/libxlu_cfg.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/libxlu_cfg.c -+++ xen-4.1.0-testing/tools/libxl/libxlu_cfg.c +--- xen-4.1.1-testing.orig/tools/libxl/libxlu_cfg.c ++++ xen-4.1.1-testing/tools/libxl/libxlu_cfg.c @@ -348,7 +348,7 @@ char *xlu__cfgl_dequote(CfgParseContext #define NUMERIC_CHAR(minlen,maxlen,base,basetext) do{ \ @@ -124,10 +124,10 @@ Index: xen-4.1.0-testing/tools/libxl/libxlu_cfg.c \ strncpy(numbuf,p,(maxlen)); \ numbuf[(maxlen)]= 0; \ -Index: xen-4.1.0-testing/tools/libxl/libxl.c +Index: xen-4.1.1-testing/tools/libxl/libxl.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/libxl.c -+++ xen-4.1.0-testing/tools/libxl/libxl.c +--- xen-4.1.1-testing.orig/tools/libxl/libxl.c ++++ xen-4.1.1-testing/tools/libxl/libxl.c @@ -221,7 +221,7 @@ int libxl_domain_rename(libxl_ctx *ctx, int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid) { @@ -155,10 +155,10 @@ Index: xen-4.1.0-testing/tools/libxl/libxl.c libxl__sprintf(&gc, "%s/device/vif", dompath), &nb_nics); if (!l) goto err; -Index: xen-4.1.0-testing/tools/libxl/libxl_pci.c +Index: xen-4.1.1-testing/tools/libxl/libxl_pci.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/libxl_pci.c -+++ xen-4.1.0-testing/tools/libxl/libxl_pci.c +--- xen-4.1.1-testing.orig/tools/libxl/libxl_pci.c ++++ xen-4.1.1-testing/tools/libxl/libxl_pci.c @@ -240,7 +240,7 @@ static int libxl_create_pci_backend(libx flexarray_t *front = NULL; flexarray_t *back = NULL; @@ -177,10 +177,10 @@ Index: xen-4.1.0-testing/tools/libxl/libxl_pci.c LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Creating pci backend"); /* add pci device */ -Index: xen-4.1.0-testing/tools/libxl/libxl_dom.c +Index: xen-4.1.1-testing/tools/libxl/libxl_dom.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/libxl_dom.c -+++ xen-4.1.0-testing/tools/libxl/libxl_dom.c +--- xen-4.1.1-testing.orig/tools/libxl/libxl_dom.c ++++ xen-4.1.1-testing/tools/libxl/libxl_dom.c @@ -265,14 +265,13 @@ int libxl__build_hvm(libxl_ctx *ctx, uin libxl_domain_build_info *info, libxl_domain_build_state *state) { @@ -205,10 +205,10 @@ Index: xen-4.1.0-testing/tools/libxl/libxl_dom.c out: libxl__free_all(&gc); return 0; -Index: xen-4.1.0-testing/tools/libxl/libxl_utils.c +Index: xen-4.1.1-testing/tools/libxl/libxl_utils.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/libxl_utils.c -+++ xen-4.1.0-testing/tools/libxl/libxl_utils.c +--- xen-4.1.1-testing.orig/tools/libxl/libxl_utils.c ++++ xen-4.1.1-testing/tools/libxl/libxl_utils.c @@ -531,7 +531,7 @@ int libxl_devid_to_device_disk(libxl_ctx libxl__gc gc = LIBXL_INIT_GC(ctx); char *endptr, *val; @@ -218,10 +218,10 @@ Index: xen-4.1.0-testing/tools/libxl/libxl_utils.c int rc = ERROR_INVAL; devid_n = strtoul(devid, &endptr, 10); -Index: xen-4.1.0-testing/tools/libxl/xl_cmdimpl.c +Index: xen-4.1.1-testing/tools/libxl/xl_cmdimpl.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxl/xl_cmdimpl.c -+++ xen-4.1.0-testing/tools/libxl/xl_cmdimpl.c +--- xen-4.1.1-testing.orig/tools/libxl/xl_cmdimpl.c ++++ xen-4.1.1-testing/tools/libxl/xl_cmdimpl.c @@ -5448,7 +5448,7 @@ int main_cpupoollist(int argc, char **ar {"cpus", 0, 0, 'c'}, {0, 0, 0, 0} @@ -231,10 +231,10 @@ Index: xen-4.1.0-testing/tools/libxl/xl_cmdimpl.c int opt_cpus = 0; const char *pool = NULL; libxl_cpupoolinfo *poolinfo; -Index: xen-4.1.0-testing/tools/debugger/gdbsx/gx/gx_comm.c +Index: xen-4.1.1-testing/tools/debugger/gdbsx/gx/gx_comm.c =================================================================== ---- xen-4.1.0-testing.orig/tools/debugger/gdbsx/gx/gx_comm.c -+++ xen-4.1.0-testing/tools/debugger/gdbsx/gx/gx_comm.c +--- xen-4.1.1-testing.orig/tools/debugger/gdbsx/gx/gx_comm.c ++++ xen-4.1.1-testing/tools/debugger/gdbsx/gx/gx_comm.c @@ -163,7 +163,7 @@ readchar(void) static char buf[BUFSIZ]; static int bufcnt = 0; @@ -244,10 +244,10 @@ Index: xen-4.1.0-testing/tools/debugger/gdbsx/gx/gx_comm.c if (bufcnt-- > 0) return *bufp++ & 0x7f; -Index: xen-4.1.0-testing/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c +Index: xen-4.1.1-testing/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c -+++ xen-4.1.0-testing/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c +--- xen-4.1.1-testing.orig/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c ++++ xen-4.1.1-testing/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c @@ -820,7 +820,7 @@ static int create_suspend_thread(checkpo static void stop_suspend_thread(checkpoint_state* s) @@ -257,10 +257,10 @@ Index: xen-4.1.0-testing/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c s->done = 1; -Index: xen-4.1.0-testing/tools/python/xen/lowlevel/netlink/libnetlink.c +Index: xen-4.1.1-testing/tools/python/xen/lowlevel/netlink/libnetlink.c =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/lowlevel/netlink/libnetlink.c -+++ xen-4.1.0-testing/tools/python/xen/lowlevel/netlink/libnetlink.c +--- xen-4.1.1-testing.orig/tools/python/xen/lowlevel/netlink/libnetlink.c ++++ xen-4.1.1-testing/tools/python/xen/lowlevel/netlink/libnetlink.c @@ -433,7 +433,8 @@ int rtnl_from_file(FILE *rtnl, rtnl_filt nladdr.nl_groups = 0; @@ -271,10 +271,10 @@ Index: xen-4.1.0-testing/tools/python/xen/lowlevel/netlink/libnetlink.c int l; status = fread(&buf, 1, sizeof(*h), rtnl); -Index: xen-4.1.0-testing/xen/arch/x86/msi.c +Index: xen-4.1.1-testing/xen/arch/x86/msi.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/msi.c -+++ xen-4.1.0-testing/xen/arch/x86/msi.c +--- xen-4.1.1-testing.orig/xen/arch/x86/msi.c ++++ xen-4.1.1-testing/xen/arch/x86/msi.c @@ -745,7 +745,7 @@ static void __pci_disable_msi(struct msi { struct pci_dev *dev; @@ -284,10 +284,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/msi.c u8 bus, slot, func; dev = entry->dev; -Index: xen-4.1.0-testing/xen/arch/x86/microcode_amd.c +Index: xen-4.1.1-testing/xen/arch/x86/microcode_amd.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/microcode_amd.c -+++ xen-4.1.0-testing/xen/arch/x86/microcode_amd.c +--- xen-4.1.1-testing.orig/xen/arch/x86/microcode_amd.c ++++ xen-4.1.1-testing/xen/arch/x86/microcode_amd.c @@ -164,7 +164,7 @@ static int apply_microcode(int cpu) static int get_next_ucode_from_buffer_amd(void *mc, const void *buf, size_t size, unsigned long *offset) @@ -297,10 +297,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/microcode_amd.c size_t total_size; const uint8_t *bufp = buf; unsigned long off; -Index: xen-4.1.0-testing/xen/common/cpupool.c +Index: xen-4.1.1-testing/xen/common/cpupool.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/cpupool.c -+++ xen-4.1.0-testing/xen/common/cpupool.c +--- xen-4.1.1-testing.orig/xen/common/cpupool.c ++++ xen-4.1.1-testing/xen/common/cpupool.c @@ -356,7 +356,7 @@ int cpupool_add_domain(struct domain *d, { struct cpupool *c; @@ -321,10 +321,10 @@ Index: xen-4.1.0-testing/xen/common/cpupool.c if ( d->cpupool == NULL ) return; -Index: xen-4.1.0-testing/xen/common/grant_table.c +Index: xen-4.1.1-testing/xen/common/grant_table.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/grant_table.c -+++ xen-4.1.0-testing/xen/common/grant_table.c +--- xen-4.1.1-testing.orig/xen/common/grant_table.c ++++ xen-4.1.1-testing/xen/common/grant_table.c @@ -765,7 +765,7 @@ __gnttab_unmap_common( struct domain *ld, *rd; struct active_grant_entry *act; @@ -334,23 +334,10 @@ Index: xen-4.1.0-testing/xen/common/grant_table.c ld = current->domain; -Index: xen-4.1.0-testing/xen/drivers/passthrough/vtd/iommu.c +Index: xen-4.1.1-testing/xen/common/kexec.c =================================================================== ---- xen-4.1.0-testing.orig/xen/drivers/passthrough/vtd/iommu.c -+++ xen-4.1.0-testing/xen/drivers/passthrough/vtd/iommu.c -@@ -1743,7 +1743,7 @@ static int vtd_ept_page_compatible(struc - static bool_t vtd_ept_share(void) - { - struct acpi_drhd_unit *drhd; -- struct iommu *iommu; -+ struct iommu __attribute__((__unused__)) *iommu; - bool_t share = TRUE; - - /* sharept defaults to 0 for now, default to 1 when feature matures */ -Index: xen-4.1.0-testing/xen/common/kexec.c -=================================================================== ---- xen-4.1.0-testing.orig/xen/common/kexec.c -+++ xen-4.1.0-testing/xen/common/kexec.c +--- xen-4.1.1-testing.orig/xen/common/kexec.c ++++ xen-4.1.1-testing/xen/common/kexec.c @@ -563,7 +563,8 @@ static int kexec_exec(XEN_GUEST_HANDLE(v { xen_kexec_exec_t exec; @@ -361,11 +348,11 @@ Index: xen-4.1.0-testing/xen/common/kexec.c if ( unlikely(copy_from_guest(&exec, uarg, 1)) ) return -EFAULT; -Index: xen-4.1.0-testing/xen/drivers/passthrough/vtd/intremap.c +Index: xen-4.1.1-testing/xen/drivers/passthrough/vtd/intremap.c =================================================================== ---- xen-4.1.0-testing.orig/xen/drivers/passthrough/vtd/intremap.c -+++ xen-4.1.0-testing/xen/drivers/passthrough/vtd/intremap.c -@@ -363,7 +363,7 @@ unsigned int io_apic_read_remap_rte( +--- xen-4.1.1-testing.orig/xen/drivers/passthrough/vtd/intremap.c ++++ xen-4.1.1-testing/xen/drivers/passthrough/vtd/intremap.c +@@ -367,7 +367,7 @@ unsigned int io_apic_read_remap_rte( unsigned int ioapic_pin = (reg - 0x10) / 2; int index; struct IO_xAPIC_route_entry old_rte = { 0 }; @@ -374,7 +361,7 @@ Index: xen-4.1.0-testing/xen/drivers/passthrough/vtd/intremap.c int rte_upper = (reg & 1) ? 1 : 0; struct iommu *iommu = ioapic_to_iommu(IO_APIC_ID(apic)); struct ir_ctrl *ir_ctrl = iommu_ir_ctrl(iommu); -@@ -844,7 +844,7 @@ int iommu_enable_x2apic_IR(void) +@@ -850,7 +850,7 @@ int iommu_enable_x2apic_IR(void) for_each_drhd_unit ( drhd ) { @@ -383,11 +370,11 @@ Index: xen-4.1.0-testing/xen/drivers/passthrough/vtd/intremap.c iommu = drhd->iommu; qi_ctrl = iommu_qi_ctrl(iommu); -Index: xen-4.1.0-testing/xen/common/sched_credit2.c +Index: xen-4.1.1-testing/xen/common/sched_credit2.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/sched_credit2.c -+++ xen-4.1.0-testing/xen/common/sched_credit2.c -@@ -1847,7 +1847,8 @@ static void deactivate_runqueue(struct c +--- xen-4.1.1-testing.orig/xen/common/sched_credit2.c ++++ xen-4.1.1-testing/xen/common/sched_credit2.c +@@ -1854,7 +1854,8 @@ static void deactivate_runqueue(struct c static void init_pcpu(const struct scheduler *ops, int cpu) { @@ -397,10 +384,10 @@ Index: xen-4.1.0-testing/xen/common/sched_credit2.c struct csched_private *prv = CSCHED_PRIV(ops); struct csched_runqueue_data *rqd; spinlock_t *old_lock; -Index: xen-4.1.0-testing/xen/common/unlzo.c +Index: xen-4.1.1-testing/xen/common/unlzo.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/unlzo.c -+++ xen-4.1.0-testing/xen/common/unlzo.c +--- xen-4.1.1-testing.orig/xen/common/unlzo.c ++++ xen-4.1.1-testing/xen/common/unlzo.c @@ -68,7 +68,7 @@ static int INIT parse_header(u8 *input, { int l; @@ -410,11 +397,11 @@ Index: xen-4.1.0-testing/xen/common/unlzo.c u16 version; /* read magic: 9 first bits */ -Index: xen-4.1.0-testing/xen/arch/x86/time.c +Index: xen-4.1.1-testing/xen/arch/x86/time.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/time.c -+++ xen-4.1.0-testing/xen/arch/x86/time.c -@@ -1003,7 +1003,8 @@ static void local_time_calibration(void) +--- xen-4.1.1-testing.orig/xen/arch/x86/time.c ++++ xen-4.1.1-testing/xen/arch/x86/time.c +@@ -1001,7 +1001,8 @@ static void local_time_calibration(void) * System timestamps, extrapolated from local and master oscillators, * taken during this calibration and the previous calibration. */ @@ -424,10 +411,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/time.c s_time_t prev_master_stime, curr_master_stime; /* TSC timestamps taken during this calibration and prev calibration. */ -Index: xen-4.1.0-testing/xen/arch/x86/cpu/amd.c +Index: xen-4.1.1-testing/xen/arch/x86/cpu/amd.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/cpu/amd.c -+++ xen-4.1.0-testing/xen/arch/x86/cpu/amd.c +--- xen-4.1.1-testing.orig/xen/arch/x86/cpu/amd.c ++++ xen-4.1.1-testing/xen/arch/x86/cpu/amd.c @@ -348,7 +348,7 @@ static void __devinit init_amd(struct cp { u32 l, h; @@ -437,11 +424,11 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/amd.c #ifdef CONFIG_SMP unsigned long long value; -Index: xen-4.1.0-testing/xen/arch/x86/mm/p2m.c +Index: xen-4.1.1-testing/xen/arch/x86/mm/p2m.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.1.0-testing/xen/arch/x86/mm/p2m.c -@@ -2266,7 +2266,7 @@ p2m_remove_page(struct p2m_domain *p2m, +--- xen-4.1.1-testing.orig/xen/arch/x86/mm/p2m.c ++++ xen-4.1.1-testing/xen/arch/x86/mm/p2m.c +@@ -2338,7 +2338,7 @@ p2m_remove_page(struct p2m_domain *p2m, unsigned int page_order) { unsigned long i; @@ -450,7 +437,7 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm/p2m.c p2m_type_t t; p2m_access_t a; -@@ -2335,7 +2335,7 @@ guest_physmap_mark_populate_on_demand(st +@@ -2407,7 +2407,7 @@ guest_physmap_mark_populate_on_demand(st struct p2m_domain *p2m = p2m_get_hostp2m(d); unsigned long i; p2m_type_t ot; @@ -459,10 +446,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm/p2m.c int pod_count = 0; int rc = 0; -Index: xen-4.1.0-testing/xen/arch/x86/hvm/emulate.c +Index: xen-4.1.1-testing/xen/arch/x86/hvm/emulate.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/hvm/emulate.c -+++ xen-4.1.0-testing/xen/arch/x86/hvm/emulate.c +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/emulate.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/emulate.c @@ -59,7 +59,7 @@ static int hvmemul_do_io( ioreq_t *p = get_ioreq(curr); unsigned long ram_gfn = paddr_to_pfn(ram_gpa); @@ -472,10 +459,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/hvm/emulate.c int rc; /* Check for paged out page */ -Index: xen-4.1.0-testing/xen/arch/x86/hvm/hvm.c +Index: xen-4.1.1-testing/xen/arch/x86/hvm/hvm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/hvm/hvm.c -+++ xen-4.1.0-testing/xen/arch/x86/hvm/hvm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/hvm.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/hvm.c @@ -253,7 +253,8 @@ void hvm_migrate_timers(struct vcpu *v) void hvm_migrate_pirqs(struct vcpu *v) @@ -486,7 +473,7 @@ Index: xen-4.1.0-testing/xen/arch/x86/hvm/hvm.c struct irq_desc *desc; struct domain *d = v->domain; struct hvm_irq_dpci *hvm_irq_dpci = d->arch.hvm_domain.irq.dpci; -@@ -3468,7 +3469,7 @@ long do_hvm_op(unsigned long op, XEN_GUE +@@ -3582,7 +3583,7 @@ long do_hvm_op(unsigned long op, XEN_GUE { p2m_type_t t; p2m_type_t nt; @@ -495,10 +482,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/hvm/hvm.c mfn = gfn_to_mfn_unshare(p2m, pfn, &t, 0); if ( p2m_is_paging(t) ) { -Index: xen-4.1.0-testing/xen/arch/x86/acpi/cpu_idle.c +Index: xen-4.1.1-testing/xen/arch/x86/acpi/cpu_idle.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/acpi/cpu_idle.c -+++ xen-4.1.0-testing/xen/arch/x86/acpi/cpu_idle.c +--- xen-4.1.1-testing.orig/xen/arch/x86/acpi/cpu_idle.c ++++ xen-4.1.1-testing/xen/arch/x86/acpi/cpu_idle.c @@ -273,7 +273,7 @@ static void acpi_processor_ffh_cstate_en static void acpi_idle_do_entry(struct acpi_processor_cx *cx) @@ -508,10 +495,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/acpi/cpu_idle.c switch ( cx->entry_method ) { -Index: xen-4.1.0-testing/xen/arch/x86/cpu/intel.c +Index: xen-4.1.1-testing/xen/arch/x86/cpu/intel.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/cpu/intel.c -+++ xen-4.1.0-testing/xen/arch/x86/cpu/intel.c +--- xen-4.1.1-testing.orig/xen/arch/x86/cpu/intel.c ++++ xen-4.1.1-testing/xen/arch/x86/cpu/intel.c @@ -35,7 +35,7 @@ struct movsl_mask movsl_mask __read_most */ static void __devinit set_cpuidmask(const struct cpuinfo_x86 *c) @@ -521,10 +508,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/intel.c if (!~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx & opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx)) -Index: xen-4.1.0-testing/xen/arch/x86/cpu/intel_cacheinfo.c +Index: xen-4.1.1-testing/xen/arch/x86/cpu/intel_cacheinfo.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/cpu/intel_cacheinfo.c -+++ xen-4.1.0-testing/xen/arch/x86/cpu/intel_cacheinfo.c +--- xen-4.1.1-testing.orig/xen/arch/x86/cpu/intel_cacheinfo.c ++++ xen-4.1.1-testing/xen/arch/x86/cpu/intel_cacheinfo.c @@ -170,7 +170,8 @@ unsigned int __cpuinit init_intel_cachei unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */ unsigned int new_l1d = 0, new_l1i = 0; /* Cache sizes from cpuid(4) */ @@ -535,10 +522,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/intel_cacheinfo.c if (c->cpuid_level > 3) { static int is_initialized; -Index: xen-4.1.0-testing/xen/arch/x86/mm/mem_sharing.c +Index: xen-4.1.1-testing/xen/arch/x86/mm/mem_sharing.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/mm/mem_sharing.c -+++ xen-4.1.0-testing/xen/arch/x86/mm/mem_sharing.c +--- xen-4.1.1-testing.orig/xen/arch/x86/mm/mem_sharing.c ++++ xen-4.1.1-testing/xen/arch/x86/mm/mem_sharing.c @@ -376,7 +376,7 @@ int mem_sharing_debug_gfn(struct domain { p2m_type_t p2mt; @@ -548,10 +535,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm/mem_sharing.c mfn = gfn_to_mfn(p2m_get_hostp2m(d), gfn, &p2mt); page = mfn_to_page(mfn); -Index: xen-4.1.0-testing/xen/arch/x86/hvm/viridian.c +Index: xen-4.1.1-testing/xen/arch/x86/hvm/viridian.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/hvm/viridian.c -+++ xen-4.1.0-testing/xen/arch/x86/hvm/viridian.c +--- xen-4.1.1-testing.orig/xen/arch/x86/hvm/viridian.c ++++ xen-4.1.1-testing/xen/arch/x86/hvm/viridian.c @@ -270,7 +270,7 @@ int rdmsr_viridian_regs(uint32_t idx, ui int viridian_hypercall(struct cpu_user_regs *regs) { @@ -561,10 +548,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/hvm/viridian.c uint16_t status = HV_STATUS_SUCCESS; union hypercall_input { -Index: xen-4.1.0-testing/xen/arch/x86/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/mm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/mm.c -+++ xen-4.1.0-testing/xen/arch/x86/mm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/mm.c @@ -4900,7 +4900,7 @@ static int ptwr_emulated_update( { unsigned long mfn; @@ -574,10 +561,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm.c l1_pgentry_t pte, ol1e, nl1e, *pl1e; struct vcpu *v = current; struct domain *d = v->domain; -Index: xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c +Index: xen-4.1.1-testing/xen/arch/x86/x86_64/mm.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/x86_64/mm.c -+++ xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c +--- xen-4.1.1-testing.orig/xen/arch/x86/x86_64/mm.c ++++ xen-4.1.1-testing/xen/arch/x86/x86_64/mm.c @@ -435,7 +435,8 @@ void destroy_m2p_mapping(struct mem_hota static int setup_compat_m2p_table(struct mem_hotadd_info *info) { @@ -588,10 +575,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/x86_64/mm.c l3_pgentry_t *l3_ro_mpt = NULL; l2_pgentry_t *l2_ro_mpt = NULL; struct page_info *l1_pg; -Index: xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/mce.c +Index: xen-4.1.1-testing/xen/arch/x86/cpu/mcheck/mce.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/cpu/mcheck/mce.c -+++ xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/mce.c +--- xen-4.1.1-testing.orig/xen/arch/x86/cpu/mcheck/mce.c ++++ xen-4.1.1-testing/xen/arch/x86/cpu/mcheck/mce.c @@ -151,7 +151,6 @@ static struct mcinfo_bank *mca_init_bank struct mc_info *mi, int bank) { @@ -617,7 +604,7 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/mce.c /* Skip bank if corresponding bit in bankmask is clear */ if (!mcabanks_test(i, bankmask)) -@@ -1214,7 +1212,7 @@ static void x86_mc_msrinject(void *data) +@@ -1215,7 +1213,7 @@ static void x86_mc_msrinject(void *data) { struct xen_mc_msrinject *mci = data; struct mcinfo_msr *msr; @@ -626,10 +613,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/mce.c uint64_t hwcr = 0; int intpose; int i; -Index: xen-4.1.0-testing/xen/common/tmem.c +Index: xen-4.1.1-testing/xen/common/tmem.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/tmem.c -+++ xen-4.1.0-testing/xen/common/tmem.c +--- xen-4.1.1-testing.orig/xen/common/tmem.c ++++ xen-4.1.1-testing/xen/common/tmem.c @@ -1351,7 +1351,8 @@ obj_unlock: static int tmem_evict(void) { @@ -650,10 +637,10 @@ Index: xen-4.1.0-testing/xen/common/tmem.c client_t *client = pool->client; int ret = client->frozen ? -EFROZEN : -ENOMEM; -Index: xen-4.1.0-testing/xen/common/tmem_xen.c +Index: xen-4.1.1-testing/xen/common/tmem_xen.c =================================================================== ---- xen-4.1.0-testing.orig/xen/common/tmem_xen.c -+++ xen-4.1.0-testing/xen/common/tmem_xen.c +--- xen-4.1.1-testing.orig/xen/common/tmem_xen.c ++++ xen-4.1.1-testing/xen/common/tmem_xen.c @@ -177,7 +177,7 @@ EXPORT int tmh_copy_from_client(pfp_t *p EXPORT int tmh_compress_from_client(tmem_cli_mfn_t cmfn, void **out_va, size_t *out_len, void *cli_va) @@ -691,10 +678,10 @@ Index: xen-4.1.0-testing/xen/common/tmem_xen.c tmh->persistent_pool = xmem_pool_create(name, tmh_persistent_pool_page_get, tmh_persistent_pool_page_put, PAGE_SIZE, 0, PAGE_SIZE); if ( tmh->persistent_pool == NULL ) -Index: xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/vmce.c +Index: xen-4.1.1-testing/xen/arch/x86/cpu/mcheck/vmce.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/cpu/mcheck/vmce.c -+++ xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/vmce.c +--- xen-4.1.1-testing.orig/xen/arch/x86/cpu/mcheck/vmce.c ++++ xen-4.1.1-testing/xen/arch/x86/cpu/mcheck/vmce.c @@ -574,7 +574,7 @@ int is_vmce_ready(struct mcinfo_bank *ba */ int unmmap_broken_page(struct domain *d, mfn_t mfn, unsigned long gfn) @@ -704,10 +691,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/cpu/mcheck/vmce.c struct p2m_domain *p2m; p2m_type_t pt; -Index: xen-4.1.0-testing/xen/arch/x86/mm/shadow/multi.c +Index: xen-4.1.1-testing/xen/arch/x86/mm/shadow/multi.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/mm/shadow/multi.c -+++ xen-4.1.0-testing/xen/arch/x86/mm/shadow/multi.c +--- xen-4.1.1-testing.orig/xen/arch/x86/mm/shadow/multi.c ++++ xen-4.1.1-testing/xen/arch/x86/mm/shadow/multi.c @@ -124,7 +124,7 @@ set_shadow_status(struct vcpu *v, mfn_t /* Put a shadow into the hash table */ { @@ -726,10 +713,10 @@ Index: xen-4.1.0-testing/xen/arch/x86/mm/shadow/multi.c shadow_l1e_t *sl1p, sl1e; struct page_info *sp; -Index: xen-4.1.0-testing/xen/arch/x86/domain_build.c +Index: xen-4.1.1-testing/xen/arch/x86/domain_build.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/domain_build.c -+++ xen-4.1.0-testing/xen/arch/x86/domain_build.c +--- xen-4.1.1-testing.orig/xen/arch/x86/domain_build.c ++++ xen-4.1.1-testing/xen/arch/x86/domain_build.c @@ -375,8 +375,7 @@ int __init construct_dom0( return rc; @@ -740,11 +727,11 @@ Index: xen-4.1.0-testing/xen/arch/x86/domain_build.c machine = elf_uval(&elf, elf.ehdr, e_machine); switch (CONFIG_PAGING_LEVELS) { case 3: /* x86_32p */ -Index: xen-4.1.0-testing/xen/arch/x86/traps.c +Index: xen-4.1.1-testing/xen/arch/x86/traps.c =================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/traps.c -+++ xen-4.1.0-testing/xen/arch/x86/traps.c -@@ -1708,7 +1708,11 @@ static int emulate_privileged_op(struct +--- xen-4.1.1-testing.orig/xen/arch/x86/traps.c ++++ xen-4.1.1-testing/xen/arch/x86/traps.c +@@ -1742,7 +1742,11 @@ static int emulate_privileged_op(struct struct vcpu *v = current; unsigned long *reg, eip = regs->eip; u8 opcode, modrm_reg = 0, modrm_rm = 0, rep_prefix = 0, lock = 0, rex = 0; diff --git a/xen-warnings.diff b/xen-warnings.diff index abb066b..2b7543b 100644 --- a/xen-warnings.diff +++ b/xen-warnings.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/misc/miniterm/miniterm.c +Index: xen-4.1.1-testing/tools/misc/miniterm/miniterm.c =================================================================== ---- xen-4.1.0-testing.orig/tools/misc/miniterm/miniterm.c -+++ xen-4.1.0-testing/tools/misc/miniterm/miniterm.c +--- xen-4.1.1-testing.orig/tools/misc/miniterm/miniterm.c ++++ xen-4.1.1-testing/tools/misc/miniterm/miniterm.c @@ -157,7 +157,7 @@ int main(int argc, char **argv) case 0: close(1); /* stdout not needed */ @@ -35,10 +35,10 @@ Index: xen-4.1.0-testing/tools/misc/miniterm/miniterm.c break; } -Index: xen-4.1.0-testing/tools/libxc/xc_dom_elfloader.c +Index: xen-4.1.1-testing/tools/libxc/xc_dom_elfloader.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxc/xc_dom_elfloader.c -+++ xen-4.1.0-testing/tools/libxc/xc_dom_elfloader.c +--- xen-4.1.1-testing.orig/tools/libxc/xc_dom_elfloader.c ++++ xen-4.1.1-testing/tools/libxc/xc_dom_elfloader.c @@ -228,8 +228,9 @@ static int xc_dom_load_elf_symtab(struct if ( load ) @@ -50,10 +50,10 @@ Index: xen-4.1.0-testing/tools/libxc/xc_dom_elfloader.c elf_section_start(elf, shdr2), size); } -Index: xen-4.1.0-testing/tools/xenstore/Makefile +Index: xen-4.1.1-testing/tools/xenstore/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/Makefile -+++ xen-4.1.0-testing/tools/xenstore/Makefile +--- xen-4.1.1-testing.orig/tools/xenstore/Makefile ++++ xen-4.1.1-testing/tools/xenstore/Makefile @@ -4,7 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk MAJOR = 3.0 MINOR = 0 @@ -63,10 +63,10 @@ Index: xen-4.1.0-testing/tools/xenstore/Makefile CFLAGS += -I. CFLAGS += $(CFLAGS_libxenctrl) -Index: xen-4.1.0-testing/tools/xenstore/xenstored_core.c +Index: xen-4.1.1-testing/tools/xenstore/xenstored_core.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/xenstored_core.c -+++ xen-4.1.0-testing/tools/xenstore/xenstored_core.c +--- xen-4.1.1-testing.orig/tools/xenstore/xenstored_core.c ++++ xen-4.1.1-testing/tools/xenstore/xenstored_core.c @@ -77,8 +77,8 @@ static void check_store(void); int quota_nb_entry_per_domain = 1000; @@ -109,10 +109,10 @@ Index: xen-4.1.0-testing/tools/xenstore/xenstored_core.c break; case 'T': tracefile = optarg; -Index: xen-4.1.0-testing/tools/xenstore/xenstored_domain.c +Index: xen-4.1.1-testing/tools/xenstore/xenstored_domain.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/xenstored_domain.c -+++ xen-4.1.0-testing/tools/xenstore/xenstored_domain.c +--- xen-4.1.1-testing.orig/tools/xenstore/xenstored_domain.c ++++ xen-4.1.1-testing/tools/xenstore/xenstored_domain.c @@ -213,7 +213,7 @@ void handle_event(void) { evtchn_port_t port; @@ -131,10 +131,10 @@ Index: xen-4.1.0-testing/tools/xenstore/xenstored_domain.c return -1; dom0 = new_domain(NULL, 0, port); -Index: xen-4.1.0-testing/tools/xenstore/xenstored_transaction.c +Index: xen-4.1.1-testing/tools/xenstore/xenstored_transaction.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/xenstored_transaction.c -+++ xen-4.1.0-testing/tools/xenstore/xenstored_transaction.c +--- xen-4.1.1-testing.orig/tools/xenstore/xenstored_transaction.c ++++ xen-4.1.1-testing/tools/xenstore/xenstored_transaction.c @@ -82,7 +82,7 @@ struct transaction struct list_head changed_domains; }; @@ -144,10 +144,10 @@ Index: xen-4.1.0-testing/tools/xenstore/xenstored_transaction.c static unsigned int generation; /* Return tdb context to use for this connection. */ -Index: xen-4.1.0-testing/tools/xenstore/xenstore_client.c +Index: xen-4.1.1-testing/tools/xenstore/xenstore_client.c =================================================================== ---- xen-4.1.0-testing.orig/tools/xenstore/xenstore_client.c -+++ xen-4.1.0-testing/tools/xenstore/xenstore_client.c +--- xen-4.1.1-testing.orig/tools/xenstore/xenstore_client.c ++++ xen-4.1.1-testing/tools/xenstore/xenstore_client.c @@ -255,7 +255,7 @@ do_chmod(char *path, struct xs_permissio char **xsval = xs_directory(xsh, xth, path, &xsval_n); @@ -157,10 +157,10 @@ Index: xen-4.1.0-testing/tools/xenstore/xenstore_client.c for (i = 0; i < xsval_n; i++) { snprintf(buf, MAX_PATH_LEN, "%s/%s", path, xsval[i]); -Index: xen-4.1.0-testing/tools/libxen/src/xen_common.c +Index: xen-4.1.1-testing/tools/libxen/src/xen_common.c =================================================================== ---- xen-4.1.0-testing.orig/tools/libxen/src/xen_common.c -+++ xen-4.1.0-testing/tools/libxen/src/xen_common.c +--- xen-4.1.1-testing.orig/tools/libxen/src/xen_common.c ++++ xen-4.1.1-testing/tools/libxen/src/xen_common.c @@ -1057,6 +1057,8 @@ static size_t size_of_member(const abstr default: assert(false); @@ -179,10 +179,10 @@ Index: xen-4.1.0-testing/tools/libxen/src/xen_common.c } -Index: xen-4.1.0-testing/tools/blktap2/drivers/block-remus.c +Index: xen-4.1.1-testing/tools/blktap2/drivers/block-remus.c =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap2/drivers/block-remus.c -+++ xen-4.1.0-testing/tools/blktap2/drivers/block-remus.c +--- xen-4.1.1-testing.orig/tools/blktap2/drivers/block-remus.c ++++ xen-4.1.1-testing/tools/blktap2/drivers/block-remus.c @@ -1579,7 +1579,7 @@ static int tdremus_open(td_driver_t *dri td_flag_t flags) { @@ -192,10 +192,10 @@ Index: xen-4.1.0-testing/tools/blktap2/drivers/block-remus.c RPRINTF("opening %s\n", name); -Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +Index: xen-4.1.1-testing/tools/blktap/lib/blktaplib.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap/lib/blktaplib.h -+++ xen-4.1.0-testing/tools/blktap/lib/blktaplib.h +--- xen-4.1.1-testing.orig/tools/blktap/lib/blktaplib.h ++++ xen-4.1.1-testing/tools/blktap/lib/blktaplib.h @@ -196,6 +196,7 @@ typedef struct msg_pid { } msg_pid_t; @@ -204,10 +204,10 @@ Index: xen-4.1.0-testing/tools/blktap/lib/blktaplib.h #define WRITE 1 /*Control Messages between manager and tapdev*/ -Index: xen-4.1.0-testing/tools/blktap2/include/blktaplib.h +Index: xen-4.1.1-testing/tools/blktap2/include/blktaplib.h =================================================================== ---- xen-4.1.0-testing.orig/tools/blktap2/include/blktaplib.h -+++ xen-4.1.0-testing/tools/blktap2/include/blktaplib.h +--- xen-4.1.1-testing.orig/tools/blktap2/include/blktaplib.h ++++ xen-4.1.1-testing/tools/blktap2/include/blktaplib.h @@ -190,6 +190,7 @@ typedef struct msg_lock { } msg_lock_t; @@ -216,22 +216,3 @@ Index: xen-4.1.0-testing/tools/blktap2/include/blktaplib.h #define WRITE 1 /*Control Messages between manager and tapdev*/ -Index: xen-4.1.0-testing/xen/arch/x86/io_apic.c -=================================================================== ---- xen-4.1.0-testing.orig/xen/arch/x86/io_apic.c -+++ xen-4.1.0-testing/xen/arch/x86/io_apic.c -@@ -227,12 +227,13 @@ int restore_IO_APIC_setup(struct IO_APIC - if (!ioapic_entries[apic]) - return -ENOMEM; - -- for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) -+ for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { - entry = ioapic_entries[apic][pin]; - spin_lock_irqsave(&ioapic_lock, flags); - __io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1)); - __io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0)); - spin_unlock_irqrestore(&ioapic_lock, flags); -+ } - } - - return 0; diff --git a/xen-xm-top-needs-root.diff b/xen-xm-top-needs-root.diff index 3e69aeb..45b36eb 100644 --- a/xen-xm-top-needs-root.diff +++ b/xen-xm-top-needs-root.diff @@ -1,10 +1,10 @@ From: Charles Coffing Upstream: no -Index: xen-4.1.0-testing/tools/python/xen/xm/main.py +Index: xen-4.1.1-testing/tools/python/xen/xm/main.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/main.py -+++ xen-4.1.0-testing/tools/python/xen/xm/main.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/main.py ++++ xen-4.1.1-testing/tools/python/xen/xm/main.py @@ -2201,6 +2201,10 @@ def xm_debug_keys(args): def xm_top(args): arg_check(args, "top", 0) diff --git a/xen-xmexample-vti.diff b/xen-xmexample-vti.diff index b9d3bd5..cc8a710 100644 --- a/xen-xmexample-vti.diff +++ b/xen-xmexample-vti.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/examples/Makefile +Index: xen-4.1.1-testing/tools/examples/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/Makefile -+++ xen-4.1.0-testing/tools/examples/Makefile +--- xen-4.1.1-testing.orig/tools/examples/Makefile ++++ xen-4.1.1-testing/tools/examples/Makefile @@ -18,7 +18,6 @@ XEN_CONFIGS += xmexample.hvm XEN_CONFIGS += xmexample.hvm-stubdom XEN_CONFIGS += xmexample.pv-grub diff --git a/xen-xmexample.diff b/xen-xmexample.diff index 13f956a..aebdf22 100644 --- a/xen-xmexample.diff +++ b/xen-xmexample.diff @@ -1,9 +1,9 @@ Change various example paths in the config files to match SUSE. -Index: xen-4.1.0-testing/tools/examples/xmexample1 +Index: xen-4.1.1-testing/tools/examples/xmexample1 =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xmexample1 -+++ xen-4.1.0-testing/tools/examples/xmexample1 +--- xen-4.1.1-testing.orig/tools/examples/xmexample1 ++++ xen-4.1.1-testing/tools/examples/xmexample1 @@ -7,11 +7,13 @@ #============================================================================ @@ -43,10 +43,10 @@ Index: xen-4.1.0-testing/tools/examples/xmexample1 #---------------------------------------------------------------------------- # Configure the behaviour when a domain exits. There are three 'reasons' -Index: xen-4.1.0-testing/tools/examples/xmexample2 +Index: xen-4.1.1-testing/tools/examples/xmexample2 =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xmexample2 -+++ xen-4.1.0-testing/tools/examples/xmexample2 +--- xen-4.1.1-testing.orig/tools/examples/xmexample2 ++++ xen-4.1.1-testing/tools/examples/xmexample2 @@ -35,11 +35,13 @@ xm_vars.var('vmid', xm_vars.check() @@ -86,10 +86,10 @@ Index: xen-4.1.0-testing/tools/examples/xmexample2 #---------------------------------------------------------------------------- # Configure the behaviour when a domain exits. There are three 'reasons' -Index: xen-4.1.0-testing/tools/examples/xmexample3 +Index: xen-4.1.1-testing/tools/examples/xmexample3 =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xmexample3 -+++ xen-4.1.0-testing/tools/examples/xmexample3 +--- xen-4.1.1-testing.orig/tools/examples/xmexample3 ++++ xen-4.1.1-testing/tools/examples/xmexample3 @@ -35,11 +35,13 @@ xm_vars.var('vmid', xm_vars.check() @@ -108,10 +108,10 @@ Index: xen-4.1.0-testing/tools/examples/xmexample3 # The domain build function. Default is 'linux'. #builder='linux' -Index: xen-4.1.0-testing/tools/examples/xmexample.hvm +Index: xen-4.1.1-testing/tools/examples/xmexample.hvm =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xmexample.hvm -+++ xen-4.1.0-testing/tools/examples/xmexample.hvm +--- xen-4.1.1-testing.orig/tools/examples/xmexample.hvm ++++ xen-4.1.1-testing/tools/examples/xmexample.hvm @@ -78,7 +78,7 @@ vif = [ 'type=ioemu, bridge=xenbr0' ] # and MODE is r for read-only, w for read-write. @@ -121,10 +121,10 @@ Index: xen-4.1.0-testing/tools/examples/xmexample.hvm #---------------------------------------------------------------------------- # Configure the behaviour when a domain exits. There are three 'reasons' -Index: xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +Index: xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xmdomain.cfg.pod.5 -+++ xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 +--- xen-4.1.1-testing.orig/docs/man/xmdomain.cfg.pod.5 ++++ xen-4.1.1-testing/docs/man/xmdomain.cfg.pod.5 @@ -38,13 +38,13 @@ file. The kernel image for the domain. The format of the parameter is the @@ -160,10 +160,10 @@ Index: xen-4.1.0-testing/docs/man/xmdomain.cfg.pod.5 at hda1, which is the root filesystem. =item I -Index: xen-4.1.0-testing/docs/man/xm.pod.1 +Index: xen-4.1.1-testing/docs/man/xm.pod.1 =================================================================== ---- xen-4.1.0-testing.orig/docs/man/xm.pod.1 -+++ xen-4.1.0-testing/docs/man/xm.pod.1 +--- xen-4.1.1-testing.orig/docs/man/xm.pod.1 ++++ xen-4.1.1-testing/docs/man/xm.pod.1 @@ -161,8 +161,8 @@ soon as it is run. =item I diff --git a/xen.changes b/xen.changes index c8e7b9c..4f6192a 100644 --- a/xen.changes +++ b/xen.changes @@ -1,3 +1,96 @@ +------------------------------------------------------------------- +Thu May 26 06:36:49 MDT 2011 - carnold@novell.com + +- Upstream patches from Jan + 23233-hvm-cr-access.patch + 23234-svm-decode-assist-base.patch + 23235-svm-decode-assist-crs.patch + 23236-svm-decode-assist-invlpg.patch + 23238-svm-decode-assist-insn-fetch.patch + 23303-cpufreq-misc.patch + 23304-amd-oprofile-strings.patch + 23305-amd-fam15-xenoprof.patch + 23306-amd-fam15-vpmu.patch + 23334-amd-fam12+14-vpmu.patch + 23338-vtd-force-intremap.patch + +------------------------------------------------------------------- +Thu May 26 06:27:56 MDT 2011 - carnold@novell.com + +- fate#310957 - Update to Xen 4.1.1-rc1 c/s 23064 + +------------------------------------------------------------------- +Tue May 24 18:19:04 CEST 2011 - ohering@suse.de + +- xentrace: dynamic tracebuffer allocation + xen-unstable.xentrace.dynamic_tbuf.patch + xen-unstable.xentrace.empty_t_info_pages.patch + xen-unstable.xentrace.verbose.patch + xen-unstable.xentrace.no_gdprintk.patch + xen-unstable.xentrace.comments.patch + xen-unstable.xentrace.printk_prefix.patch + xen-unstable.xentrace.remove_debug_printk.patch + xen-unstable.xentrace.t_info_pages-formula.patch + xen-unstable.xentrace.register_cpu_notifier-boot_time.patch + xen-unstable.xentrace.t_info_page-overflow.patch + xen-unstable.xentrace.t_info_first_offset.patch + xen-unstable.xentrace.data_size__read_mostly.patch + xen-unstable.xentrace.__insert_record-dst-type.patch + +------------------------------------------------------------------- +Tue May 24 13:51:14 CEST 2011 - ohering@suse.de + +- fate#310510 - fix xenpaging + update xenpaging patches for xen 4.1 + xenpaging.guest_remove_page.slow_path.patch + xenpaging.mem_event-no-p2mt.patch + xenpaging.no-srand.patch + xenpaging.return-void.patch + xenpaging.catch-xc_mem_paging_resume-error.patch + xenpaging.xenpaging_populate_page-gfn.patch + xenpaging.autostart.patch + +------------------------------------------------------------------- +Fri May 20 10:48:54 MDT 2011 - carnold@novell.com + +- bnc#670465 - When connecting to Xen guest through vncviewer mouse + tracking is off. +- Upstream patch 23298-hvmop-get-mem-type.patch replaces + xen.sles11sp1.bug684297.HVMOP_get_mem_type.patch +- Upstream patches from Jan + 23333-hvm-32bit-compat-hypercalls.patch + 23337-vtd-malicious-msi-filter.patch + 23338-vtd-force-intremap.patch (CVE-2011-1898) + 23341-x86-ioapic-write-entry.patch + 23343-vtd-error-path-leaks.patch + +------------------------------------------------------------------- +Thu May 19 11:22:51 CEST 2011 - ohering@suse.de + +- bnc#684305 - on_crash is being ignored with kdump now working in HVM + xend-config-enable-dump-comment.patch + +------------------------------------------------------------------- +Thu May 19 11:19:37 CEST 2011 - ohering@suse.de + +- disable xend's logrotation for xend.log, use included logrotate.conf + +------------------------------------------------------------------- +Wed May 18 17:00:16 CEST 2011 - ohering@suse.de + +- bnc#684297 - HVM taking too long to dump vmcore + xen.sles11sp1.bug684297.HVMOP_get_mem_type.patch + new hvm_op hyper call option + xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch + Use new Xen HVMOP_get_mem_type hvmop hypercall option and new Linux + kernel register_oldmem_pfn_is_ram interface. + (depends on two kernel-source changes) + +------------------------------------------------------------------- +Tue May 17 11:31:49 MDT 2011 - carnold@novell.com + +- Update to Xen 4.1.1-rc1-pre c/s 23051 + ------------------------------------------------------------------- Thu May 12 21:10:21 MDT 2011 - carnold@novell.com @@ -41,6 +134,12 @@ Tue May 3 11:11:05 MDT 2011 - carnold@novell.com 23200-amd-iommu-intremap-sync.patch 23228-x86-conditional-write_tsc.patch +------------------------------------------------------------------- +Tue May 3 08:54:51 MDT 2011 - carnold@novell.com + +- bnc#691238 - L3: question on behaviour change xm list + snapshot-xend.patch + ------------------------------------------------------------------- Mon May 2 12:42:16 CEST 2011 - ohering@suse.de @@ -51,7 +150,7 @@ Mon May 2 12:42:16 CEST 2011 - ohering@suse.de - add xenalyze.gcc46.patch to fix unused-but-set-variable errors ------------------------------------------------------------------- -Thu Apr 28 14:12:13 MDT 2011 - jfehlig@novell.com +Thu Apr 28 10:24:46 MDT 2011 - jfehlig@novell.com - bnc#688473 - VUL-0: potential buffer overflow in tools cve-2011-1583-4.0.patch @@ -62,6 +161,20 @@ Thu Apr 28 17:18:57 CEST 2011 - ohering@suse.de - hotplug.losetup.patch correct dev:inode detection and use variable expansion +------------------------------------------------------------------- +Tue Apr 26 11:30:39 MDT 2011 - carnold@novell.com + +- bnc#623680 - xen kernel freezes during boot when processor module + is loaded + 23228-x86-conditional-write_tsc.patch +- bnc#680824 - dom0 can't recognize boot disk when IOMMU is enabled + 23200-amd-iommu-intremap-sync.patch +- Upstream patches from Jan + 23127-vtd-bios-settings.patch + 23153-x86-amd-clear-DramModEn.patch + 23154-x86-amd-iorr-no-rdwr.patch + 23199-amd-iommu-unmapped-intr-fault.patch + ------------------------------------------------------------------- Thu Apr 21 16:30:30 CEST 2011 - ohering@suse.de @@ -73,6 +186,13 @@ Wed Apr 20 17:50:04 CEST 2011 - ohering@suse.de - bnc#688519: correct indention in xend-domain-lock.patch +------------------------------------------------------------------- +Thu Apr 19 06:43:19 MST 2011 - jfehlig@novell.com + +- bnc#687981 - L3: mistyping model type when defining VIF crashes + VM + xend-validate-nic-model.patch + ------------------------------------------------------------------- Mon Apr 11 15:55:04 MDT 2011 - jfehlig@suse.de @@ -107,6 +227,15 @@ Thu Apr 7 17:50:23 CEST 2011 - ohering@suse.de - call /sbin/ldconfig directly in xen-libs post install scripts +------------------------------------------------------------------- +Tue Apr 5 10:57:20 MDT 2011 - carnold@novell.com + +- Upstream patches from Jan + 23103-x86-pirq-guest-eoi-check.patch + 23030-x86-hpet-init.patch + 23061-amd-iommu-resume.patch + 23127-vtd-bios-settings.patch + ------------------------------------------------------------------- Thu Mar 31 12:41:24 UTC 2011 - coolo@novell.com @@ -117,6 +246,13 @@ Tue Mar 29 10:18:09 MDT 2011 - carnold@novell.com - Remus support is enabled for now. +------------------------------------------------------------------- +Mon Mar 28 09:28:49 MDT 2011 - carnold@novell.com + +- Enable support for kernel decompression for gzip, bzip2, and LZMA + so that kernels compressed with any of these methods can be + launched + ------------------------------------------------------------------- Fri Mar 25 09:48:04 MDT 2011 - carnold@novell.com @@ -145,18 +281,72 @@ Mon Mar 21 10:09:50 MDT 2011 - carnold@novell.com named ext" xm-create-xflag.patch +------------------------------------------------------------------- +Thu Mar 17 06:22:30 MDT 2011 - carnold@novell.com + +- bnc#675817 - Kernel panic when creating HVM guests on AMD + platforms with XSAVE + 22462-x86-xsave-init-common.patch + +------------------------------------------------------------------- +Tue Mar 15 09:22:24 MDT 2011 - carnold@novell.com + +- bnc#679344 - Xen: multi-vCPU pv guest may crash host + 23034-x86-arch_set_info_guest-DoS.patch +- bnc#678871 - dom0 hangs long time when starting hvm guests with + memory >= 64GB + 22780-pod-preempt.patch +- bnc#675363 - Random lockups with kernel-xen. Possibly graphics + related + 22997-x86-map_pages_to_xen-check.patch +- Upstream patches from Jan + 22949-x86-nmi-pci-serr.patch + 22992-x86-fiop-m32i.patch + 22996-x86-alloc_xen_pagetable-no-BUG.patch + 23020-x86-cpuidle-ordering.patch + 23039-csched-constrain-cpu.patch + ------------------------------------------------------------------- Mon Mar 14 22:20:39 MDT 2011 - jfehlig@novell.com - Fix xen-utils to cope with xen-unstable c/s 21483 +------------------------------------------------------------------- +Mon Mar 14 10:11:19 MDT 2011 - carnold@novell.com + +- bnc#678229 - restore of sles HVM fails + 22873-svm-sr-32bit-sysenter-msrs.patch + ------------------------------------------------------------------- Fri Mar 11 22:28:37 CET 2011 - ohering@suse.de - xz-devel is available since 11.2, make it optional for SLES11SP1 ------------------------------------------------------------------- -Fri Feb 18 09:46:56 CST 2011 - lidongyang@novell.com +Mon Feb 28 14:07:01 CST 2011 - cyliu@novell.com + +- Fix /vm/uuid xenstore leak on tapdisk2 device cleanup + 22499-xen-hotplug-cleanup.patch + +------------------------------------------------------------------- +Fri Feb 25 14:07:01 MST 2011 - carnold@novell.com + +- Upstream patches from Jan + 22872-amd-iommu-pci-reattach.patch + 22879-hvm-no-self-set-mem-type.patch + 22899-x86-tighten-msr-permissions.patch + 22915-x86-hpet-msi-s3.patch + 22947-amd-k8-mce-init-all-msrs.patch + +------------------------------------------------------------------- +Thu Feb 17 21:18:19 MST 2011 - jfehlig@novell.com + +- bnc#672833 - xen-tools bug causing problems with Ubuntu 10.10 + under Xen 4. + 22238-pygrub-grub2-fix.patch + +------------------------------------------------------------------- +Thu Feb 17 20:06:07 CST 2011 - lidongyang@novell.com - bnc#665610 - xm console > 1 to same VM messes up both consoles Upstream rejected due to portability concern, see @@ -170,11 +360,26 @@ Fri Feb 11 11:50:20 MST 2011 - carnold@novell.com so that kernels compressed with any of these methods can be launched. +------------------------------------------------------------------- +Tue Feb 10 14:12:46 CST 2011 - lidongyang@novell.com + +- bnc#651822 - xm snapshot-xxx scripts lead to an XP SP3 HVM domU + to chkdsk + Make sure we only apply the snapshot once, and the changes made + after snapshot-apply hit the disk. + ------------------------------------------------------------------- Wed Feb 9 16:38:12 MST 2011 - carnold@novell.com - Update to Xen 4.1.0 c/s 22861 +------------------------------------------------------------------- +Tue Feb 8 16:02:46 MST 2011 - jfehlig@novell.com + +- bnc#658569 - SLES 11 SP1 dom0 iptables gives lots of physdev + messages + 22385-vif-common.patch + ------------------------------------------------------------------- Mon Feb 7 13:25:04 CET 2011 - ohering@suse.de @@ -219,7 +424,7 @@ Tue Feb 1 16:01:45 MST 2011 - carnold@novell.com ------------------------------------------------------------------- Mon Jan 31 10:45:21 MST 2011 - carnold@novell.com -- bnc#633573 - System fail to boot after running several warm +- bnc#633573 - System fail to boot after running several warm reboot tests 22749-vtd-workarounds.patch - Upstream patches from Jan @@ -229,7 +434,7 @@ Mon Jan 31 10:45:21 MST 2011 - carnold@novell.com 22782-x86-emul-smsw.patch 22789-i386-no-x2apic.patch 22790-svm-resume-migrate-pirqs.patch - 22816-x86-pirq-drop-priv-check.patch + 22816-x86-pirq-drop-priv-check.patch ------------------------------------------------------------------- Thu Jan 27 06:23:35 MST 2011 - carnold@novell.com @@ -241,7 +446,7 @@ Fri Jan 14 08:29:15 MST 2011 - carnold@novell.com - bnc#658704 - SLES11 SP1 Xen boot panic in x2apic mode 22707-x2apic-preenabled-check.patch -- bnc#641419 - L3: Xen: qemu-dm reports "xc_map_foreign_batch: mmap failed: +- bnc#641419 - L3: Xen: qemu-dm reports "xc_map_foreign_batch: mmap failed: Cannot allocate memory" 7434-qemu-rlimit-as.patch - Additional or upstream patches from Jan @@ -293,12 +498,12 @@ Fri Jan 7 16:13:24 MST 2011 - jfehlig@novell.com ------------------------------------------------------------------- Tue Jan 4 18:06:31 MST 2011 - carnold@novell.com -- bnc#656369 - g5plus: sles11sp1 xen crash with 8 socket x2apic +- bnc#656369 - g5plus: sles11sp1 xen crash with 8 socket x2apic preenabled 21989-x2apic-resume.patch 22475-x2apic-cleanup.patch 22535-x2apic-preenabled.patch -- bnc#658163 - maintenance release - Nehalem system cannot boot +- bnc#658163 - maintenance release - Nehalem system cannot boot into xen with maintenance release installed 22504-iommu-dom0-holes.patch 22506-x86-iommu-dom0-estimate.patch @@ -319,7 +524,7 @@ Tue Jan 4 18:06:31 MST 2011 - carnold@novell.com ------------------------------------------------------------------- Tue Jan 4 16:53:54 MST 2011 - carnold@novell.com -- bnc#661298 - maintenance release candidate - Windows VMs reboot +- bnc#661298 - maintenance release candidate - Windows VMs reboot too fast, triggering failsafe xen-minimum-restart-time.patch @@ -335,6 +540,15 @@ Tue Dec 28 11:23:18 MST 2010 - jfehlig@novell.com - bnc#659466 - XEN drbd block device type not working on SLES 11 SP1 20158-revert.patch +------------------------------------------------------------------- +Mon Dec 27 15:35:04 MST 2010 - jfehlig@novell.com + +- Revert changes made to snapshot-xend.patch and + snapshot-ioemu-restore.patch made on 2010-11-19. The changes + were intended to fix bnc#651822, but testing revealed additional + changes were needed to completely resolve the bug. bnc#651822 + will be fixed in a subsequent maintenance release. + ------------------------------------------------------------------- Mon Dec 27 14:43:13 CST 2010 - lidongyang@novell.com @@ -346,7 +560,7 @@ Mon Dec 27 14:43:13 CST 2010 - lidongyang@novell.com ioemu-disable-emulated-ide-if-pv.patch ------------------------------------------------------------------- -Wed Dec 22 11:56:38 CST 2010 - cyliu@novell.com +Wed Dec 22 11:31:52 CST 2010 - cyliu@novell.com - Upstream patch to replace xenfb_32bpp.patch 7426-xenfb-depth.patch @@ -369,16 +583,47 @@ Fri Dec 17 14:34:18 CET 2010 - ohering@suse.de add mainline tag to merged patches ------------------------------------------------------------------- -Thu Dec 16 17:33:52 MST 2010 - jfehlig@novell.com +Thu Dec 16 17:29:11 MST 2010 - jfehlig@novell.com - bnc#613584 - If available, use kpartx '-f' option in domUloader ------------------------------------------------------------------- -Thu Dec 16 10:21:13 MST 2010 - jfehlig@novell.com +Thu Dec 16 10:14:47 MST 2010 - jfehlig@novell.com - bnc#659872 - xend: Do no release domain lock on checkpoint operation. +------------------------------------------------------------------- +Tue Dec 14 11:59:26 MST 2010 - carnold@novell.com + +- Upstream patches from Jan + 22431-p2m-remove-bug-check.patch + 22448-x86_64-gdt-ldt-fault-filter.patch + 22466-x86-sis-apic-bug.patch + 22451-hvm-cap-clobber.patch + 22388-x2apic-panic.patch + 22452-x86-irq-migrate-directed-eoi.patch + +------------------------------------------------------------------- +Tue Dec 14 10:39:56 MST 2010 - carnold@novell.com + +- bnc#658163 - maintenance release - Nehalem system cannot boot + into xen with maintenance release installed + iommu-dom0-holes.patch + x86-iommu-dom0-estimate.patch + +------------------------------------------------------------------- +Tue Dec 14 10:35:52 MST 2010 - carnold@novell.com + +- bnc#659085 - physical host is rebooted with unknown reason + Regression: Remove the patch 22071-ept-get-entry-lock.patch + +------------------------------------------------------------------- +Tue Dec 13 10:27:04 MST 2010 - carnold@novell.com + +- Removed 7410-qemu-alt-gr.patch and altgr_2.patch. It causes a + regression (see bnc#659070) + ------------------------------------------------------------------- Tue Dec 7 15:38:58 CET 2010 - ohering@suse.de @@ -411,7 +656,13 @@ Tue Dec 7 14:25:54 CET 2010 - ohering@suse.de - set xenpaging_delay to 0.0 to start xenpaging right away ------------------------------------------------------------------- -Fri Dec 3 16:50:01 CST 2010 - cyliu@novell.com +Fri Dec 3 15:57:58 MST 2010 - carnold@novell.com + +- bnc#654591 - SLES11 SP0->Sp1 regression? (Xen, HVMs, NPIV) + Fixed xen-qemu-iscsi-fix.patch + +------------------------------------------------------------------- +Fri Dec 3 14:50:01 CST 2010 - cyliu@novell.com - blktap2 patch - fix problem that blktap2 device info not cleared when block-attach fail. @@ -420,7 +671,7 @@ Fri Dec 3 16:50:01 CST 2010 - cyliu@novell.com ------------------------------------------------------------------- Tue Nov 30 13:44:35 MST 2010 - carnold@novell.com -- bnc#655438 - Using performance counter in domU on Nehalem cpus +- bnc#655438 - Using performance counter in domU on Nehalem cpus 22417-vpmu-nehalem.patch - Upstream patches from Jan 22389-amd-iommu-decls.patch @@ -430,8 +681,8 @@ Tue Nov 30 13:44:35 MST 2010 - carnold@novell.com ------------------------------------------------------------------- Tue Nov 30 06:46:28 MST 2010 - carnold@novell.com -- bnc#656245 - VUL-1: hypervisor: application or kernel in any pv - Xen domain can crash Xen +- bnc#656245 - VUL-1: hypervisor: application or kernel in any pv + Xen domain can crash Xen x86_64-gdt-ldt-fault-filter.patch ------------------------------------------------------------------- @@ -444,6 +695,15 @@ Mon Nov 29 10:06:49 MST 2010 - carnold@novell.com ------------------------------------------------------------------- Tue Nov 23 15:46:09 MST 2010 - jfehlig@novell.com +- bnc#628729 - Add a small, fast alternative to 'xm list' for + enumerating active domains. xen-list is a C program that uses + libxenstore and libxenctl directly, bypassing the python + toolstack. + xen-utils-0.1.tar.bz2 + +------------------------------------------------------------------- +Mon Nov 22 11:51:30 MST 2010 - jfehlig@novell.com + - bnc#628729 - Add a small, fast alternative to 'xm list' for enumerating active domains. xen-list is a C program that uses libxenstore and libxenctl directly, bypassing the python @@ -478,9 +738,9 @@ Fri Nov 12 09:48:14 MST 2010 - carnold@novell.com 22045-python27-compat.patch ------------------------------------------------------------------- -Thu Nov 11 18:44:48 CST 2010 - cyliu@novell.com +Thu Nov 11 18:44:48 CST 2010 - cyliu@novell.com -- bnc#641144 - FV Xen VM running windows or linux cannot write to +- bnc#641144 - FV Xen VM running windows or linux cannot write to virtual floppy drive bdrv_default_rwflag.patch @@ -494,8 +754,8 @@ Thu Nov 11 21:01:12 CET 2010 - ohering@suse.de ------------------------------------------------------------------- Thu Nov 11 10:11:35 MST 2010 - carnold@novell.com -- bnc#649864 - automatic numa cpu placement of xen conflicts with - cpupools +- bnc#649864 - automatic numa cpu placement of xen conflicts with + cpupools 22326-cpu-pools-numa-placement.patch ------------------------------------------------------------------- @@ -540,12 +800,12 @@ Fri Nov 5 16:22:15 CET 2010 - ohering@suse.de ------------------------------------------------------------------- Fri Nov 5 09:13:38 MDT 2010 - carnold@novell.com -- bnc#647681 - L3: Passthrough of certain PCI device broken after - SLES 11 to SP1 upgrade +- bnc#647681 - L3: Passthrough of certain PCI device broken after + SLES 11 to SP1 upgrade - bnc#650871 - Regression in Xen PCI Passthrough 22348-vtd-check-secbus-devfn.patch - Upstream patches from Jan - 22223-vtd-workarounds.patch + 22223-vtd-workarounds.patch (bnc#652935) 22231-x86-pv-ucode-msr-intel.patch 22232-x86-64-lahf-lm-bios-workaround.patch 22280-kexec.patch @@ -554,7 +814,7 @@ Fri Nov 5 09:13:38 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Wed Nov 3 16:26:10 MDT 2010 - carnold@novell.com -- bnc#497149 - SLES11 64bit Xen - SLES11 64bit HVM guest has +- bnc#497149 - SLES11 64bit Xen - SLES11 64bit HVM guest has corrupt text console stdvga-cache.patch @@ -584,18 +844,18 @@ Wed Oct 27 20:08:51 CEST 2010 - ohering@suse.de xenpaging.doc.patch - add /var/lib/xen/xenpaging directory +------------------------------------------------------------------- +Wed Oct 27 11:50:17 MDT 2010 - ksrinivasan@novell.com + +- Some cleanup in the APIC handling code in the HyperV shim. + hv_apic.patch + ------------------------------------------------------------------- Wed Oct 27 18:04:30 CEST 2010 - ohering@suse.de - fate#310510 - fix xenpaging xenpaging.memory_op.patch, correct delay handling in retry loop -------------------------------------------------------------------- -Wed Oct 27 08:50:17 MDT 2010 - ksrinivasan@novell.com - -- Some cleanup in the APIC handling code in the HyperV shim. - hv_apic.patch - ------------------------------------------------------------------- Wed Oct 27 03:56:38 EDT 2010 - cyliu@novell.com @@ -677,7 +937,7 @@ Tue Oct 8 14:11:31 CST 2010 - cyliu@novell.com altgr_2.patch ------------------------------------------------------------------- -Thu Oct 7 11:18:12 MDT 2010 - jfehlig@novell.com +Thu Oct 7 10:58:39 MDT 2010 - jfehlig@novell.com - bnc#618087 - VNC view won't stay connected to fully virtualized Linux Xen VMs @@ -686,12 +946,12 @@ Thu Oct 7 11:18:12 MDT 2010 - jfehlig@novell.com ------------------------------------------------------------------- Tue Oct 5 09:34:20 MDT 2010 - carnold@novell.com -- bnc#639546 - Dom-U deleted after introduction of the parameter - "change_home_server False" in the VM configuration +- bnc#639546 - Dom-U deleted after introduction of the parameter + "change_home_server False" in the VM configuration change_home_server.patch ------------------------------------------------------------------- -Mon Oct 4 09:10:03 MDT 2010 - jfehlig@novell.com +Mon Oct 4 09:06:41 MDT 2010 - jfehlig@novell.com - bnc#641859 - block-dmmd script does not handle the configuration when only MD is used @@ -706,7 +966,7 @@ Thu Sep 30 17:52:55 CEST 2010 - ohering@suse.de ------------------------------------------------------------------- Mon Sep 27 09:59:37 MDT 2010 - carnold@novell.com -- bnc#640773 - Xen kernel crashing right after grub +- bnc#640773 - Xen kernel crashing right after grub 21894-intel-unmask-cpuid.patch - Upstream patch from Jan 22148-serial-irq-dest.patch @@ -731,6 +991,13 @@ Wed Sep 22 10:50:20 CEST 2010 - ohering@suse.de xenpaging.xenpaging_init.patch xenpaging.policy_linear.patch +------------------------------------------------------------------- +Tue Sep 20 14:11:31 CST 2010 - cyliu@novell.com + +- bnc#632956 - fix VNC altgr-insert behavior + 7410-qemu-alt-gr.patch + altgr_2.patch + ------------------------------------------------------------------- Fri Sep 17 15:59:45 CEST 2010 - ohering@suse.de @@ -746,7 +1013,7 @@ Fri Sep 17 15:59:45 CEST 2010 - ohering@suse.de Mon Sep 13 16:24:31 MDT 2010 - carnold@novell.com - bnc#636231 - XEN: Unable to disconnect/remove CDROM drive from VM - xend-devid-or-name.patch + xend-devid-or-name.patch ------------------------------------------------------------------- Mon Sep 13 10:50:56 MDT 2010 - carnold@novell.com @@ -766,16 +1033,35 @@ Mon Sep 13 10:47:09 MDT 2010 - carnold@novell.com 22135-heap-lock.patch ------------------------------------------------------------------- -Thu Sep 9 11:29:45 MDT 2010 - carnold@novell.com +Thu Sep 10 14:14:50 MDT 2010 - carnold@novell.com - Update to Xen 4.0.1. This is a bug fix release. +------------------------------------------------------------------- +Thu Sep 9 16:42:43 MDT 2010 - jfehlig@novell.com + +- bnc#635380 - Fix pygrub Grub2 support + See update to Xen 4.0.1 for fixes + +------------------------------------------------------------------- +Fri Aug 27 16:22:48 CST 2010 - cyliu@novell.com + +- bnc#628701 - Improve performance when activate/deactivate dmmd + devices + modified block-dmmd script + +------------------------------------------------------------------- +Wed Aug 25 16:18:39 MDT 2010 - jfehlig@novell.com + +- bnc#628701 - Fix qemu-dm handling of dmmd devices + modified xen-qemu-iscsi-fix.patch + ------------------------------------------------------------------- Mon Aug 16 18:35:11 MDT 2010 - carnold@novell.com -- bnc#626262 - Populate-on-demand memory problem on xen with hvm +- bnc#626262 - Populate-on-demand memory problem on xen with hvm guest - 21971-pod-accounting.patch + 21971-pod-accounting.patch ------------------------------------------------------------------- Mon Aug 16 17:03:58 CST 2010 - cyliu@novell.com @@ -792,8 +1078,8 @@ Thu Aug 12 06:13:44 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Mon Aug 9 09:47:09 MDT 2010 - carnold@novell.com -- bnc#613529 - TP-L3: kdump kernel hangs when crash was initiated - from xen kernel +- bnc#613529 - TP-L3: kdump kernel hangs when crash was initiated + from xen kernel 21886-kexec-shutdown.patch ------------------------------------------------------------------- @@ -802,7 +1088,7 @@ Mon Aug 2 16:42:41 MDT 2010 - carnold@novell.com - Upstream Intel patches to improve X2APIC handling. 21716-iommu-alloc.patch 21717-ir-qi.patch - 21718-x2apic-logic.patch + 21718-x2apic-logic.patch ------------------------------------------------------------------- Tue Jul 27 16:23:09 MDT 2010 - jfehlig@novell.com @@ -828,11 +1114,17 @@ Mon Jul 26 16:22:56 MDT 2010 - jfehlig@novell.com in xend 21847-pscsi.patch +------------------------------------------------------------------- +Mon Jul 26 16:01:07 MDT 2010 - carnold@novell.com + +- Enable the packaging of create.dtd. This is needed for when xm + is configured to use xenapi. + ------------------------------------------------------------------- Wed Jul 21 11:46:41 MDT 2010 - carnold@novell.com - bnc#624285 - TP-L3: xen rdtsc emulation reports wrong frequency - 21445-x86-tsc-handling-cleanups-v2.patch + 21445-x86-tsc-handling-cleanups-v2.patch ------------------------------------------------------------------- Thu Jul 20 13:23:14 MDT 2010 - carnold@novell.com @@ -844,9 +1136,9 @@ Thu Jul 20 13:23:14 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Thu Jul 8 15:27:14 MDT 2010 - carnold@novell.com -- bnc#620694 - Xen yast vm-install for existing paravirtualized - disk fails with UnboundLocalError: local variable 'dev_type' - referenced before assignment +- bnc#620694 - Xen yast vm-install for existing paravirtualized + disk fails with UnboundLocalError: local variable 'dev_type' + referenced before assignment 21678-xend-mac-fix.patch ------------------------------------------------------------------- @@ -871,7 +1163,7 @@ Tue Jul 6 11:31:33 MDT 2010 - carnold@novell.com 21700-32on64-vm86-gpf.patch 21705-trace-printk.patch 21706-trace-security.patch - 21712-amd-osvw.patch + 21712-amd-osvw.patch 21744-x86-cpufreq-range-check.patch 21933-vtd-ioapic-write.patch 21953-msi-enable.patch @@ -899,8 +1191,8 @@ Wed Jun 16 08:36:44 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Mon Jun 14 10:00:07 MDT 2010 - carnold@novell.com -- bnc#609153 - xm migrate localhost -l fails on - Windows VMs +- bnc#609153 - xm migrate localhost -l fails on + Windows VMs 21615-dont-save-xen-heap-pages.patch - Upstream fixes from Jan 21446-iommu-graceful-generic-fail.patch @@ -914,34 +1206,34 @@ Mon Jun 14 10:00:07 MDT 2010 - carnold@novell.com Mon Jun 7 10:55:20 MDT 2010 - carnold@novell.com - bnc#612189 - Clear APIC Timer Initial Count Register when masking - timer interrupt + timer interrupt 21542-amd-erratum-411.patch ------------------------------------------------------------------- Fri Jun 4 10:48:30 MDT 2010 - carnold@novell.com -- bnc#610658 - XEN: PXE boot fails for fully virtualized guests - +- bnc#610658 - XEN: PXE boot fails for fully virtualized guests - e1000 virtual nic. (see also bnc#484778) enable_more_nic_pxe.patch ------------------------------------------------------------------- Tue May 25 15:17:38 MDT 2010 - carnold@novell.com -- bnc#608191 - /var/adm/fillup-templates/sysconfig.xend from - package xen-tools is no valid sysconfig file +- bnc#608191 - /var/adm/fillup-templates/sysconfig.xend from + package xen-tools is no valid sysconfig file xend-sysconfig.patch ------------------------------------------------------------------- Tue May 25 14:32:57 MDT 2010 - carnold@novell.com -- bnc#608194 - /etc/xen/* config files are not packaged with - noreplace +- bnc#608194 - /etc/xen/* config files are not packaged with + noreplace ------------------------------------------------------------------- Tue May 25 13:19:17 MDT 2010 - carnold@novell.com -- bnc#569744 - SLE HVM guest clock/timezone is incorrect after - reboot +- bnc#569744 - SLE HVM guest clock/timezone is incorrect after + reboot 21460-xend-timeoffset.patch ------------------------------------------------------------------- @@ -966,7 +1258,7 @@ Thu May 20 09:56:07 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Wed May 19 13:23:36 MDT 2010 - carnold@novell.com -- bnc#607219 - AMD Erratum 383 workaround for Xen +- bnc#607219 - AMD Erratum 383 workaround for Xen 21408-amd-erratum-383.patch ------------------------------------------------------------------- @@ -981,7 +1273,7 @@ Mon May 17 08:31:24 MDT 2010 - carnold@novell.com - bnc#603008 - On an 8 Socket Nehalem-EX system, the fix for 593536 causes a hang during network setup. - Upstream patches from Jan. - 21360-x86-mce-polling-diabled-init.patch + 21360-x86-mce-polling-disabled-init.patch 21372-x86-cross-cpu-wait.patch 21331-svm-vintr-during-nmi.patch 21333-xentrace-t_info-size.patch @@ -990,9 +1282,9 @@ Mon May 17 08:31:24 MDT 2010 - carnold@novell.com 21373-dummy-domain-io-caps.patch ------------------------------------------------------------------- -Wed May 12 08:43:20 MDT 2010 - carnold@novell.com +Wed May 12 08:42:20 MDT 2010 - carnold@novell.com -- bnc#605182 - /etc/xen/scripts/xen-hotplug-cleanup: line 24: [: +- bnc#605182 - /etc/xen/scripts/xen-hotplug-cleanup: line 24: [: !=: unary operator expected 21129-xen-hotplug-cleanup.patch @@ -1000,7 +1292,7 @@ Wed May 12 08:43:20 MDT 2010 - carnold@novell.com Mon May 10 10:26:07 MDT 2010 - carnold@novell.com - bnc#599929 - Hot add/remove Kawela NIC device over 500 times will - cause guest domain crash + cause guest domain crash passthrough-hotplug-segfault.patch ------------------------------------------------------------------- @@ -1014,7 +1306,7 @@ Fri May 7 09:00:12 MDT 2010 - jfehlig@novell.com Thu May 6 08:33:22 MDT 2010 - carnold@novell.com - Match upstreams cpu pools switch from domctl to sysctl -- Upstream replacements for two of our custom patches (to ease +- Upstream replacements for two of our custom patches (to ease applying further backports) - Fixed dump-exec-state.patch (could previously hang the system, as could - with lower probability - the un-patched implementation) @@ -1023,7 +1315,7 @@ Thu May 6 08:33:22 MDT 2010 - carnold@novell.com Wed May 5 08:20:45 MDT 2010 - carnold@novell.com - bnc#593536 - xen hypervisor takes very long to initialize Dom0 on - 128 CPUs and 256Gb + 128 CPUs and 256Gb 21272-x86-dom0-alloc-performance.patch 21266-vmx-disabled-check.patch 21271-x86-cache-flush-global.patch @@ -1032,15 +1324,15 @@ Wed May 5 08:20:45 MDT 2010 - carnold@novell.com Tue May 4 09:46:22 MDT 2010 - carnold@novell.com - bnc#558815 - using multiple npiv luns with same wwpn/wwnn broken -- bnc#601104 - Xen /etc/xen/scripts/block-npiv script fails when - accessing multiple disks using NPIV +- bnc#601104 - Xen /etc/xen/scripts/block-npiv script fails when + accessing multiple disks using NPIV block-npiv ------------------------------------------------------------------- Fri Apr 30 08:10:52 MDT 2010 - carnold@novell.com -- bnc#595124 - VT-d can not be enabled on 32PAE Xen on Nehalem-EX - platform +- bnc#595124 - VT-d can not be enabled on 32PAE Xen on Nehalem-EX + platform 21234-x86-bad-srat-clear-pxm2node.patch bnc#585371 - kdump fails to load with xen: locate_hole failed 21235-crashkernel-advanced.patch @@ -1048,9 +1340,9 @@ Fri Apr 30 08:10:52 MDT 2010 - carnold@novell.com ------------------------------------------------------------------- Thu Apr 29 08:02:49 MDT 2010 - carnold@novell.com -- bnc#588918 - Attaching a U-disk to domain's failed by - "xm usb-attach" - init.xend +- bnc#588918 - Attaching a U-disk to domain's failed by + "xm usb-attach" + init.xend ------------------------------------------------------------------- Wed Apr 21 21:15:04 MDT 2010 - jfehlig@novell.com diff --git a/xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch b/xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch new file mode 100644 index 0000000..600b77c --- /dev/null +++ b/xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch @@ -0,0 +1,65 @@ +Use new Xen HVMOP_get_mem_type hvmop hypercall option and new Linux kernel +register_oldmem_pfn_is_ram interface. + +Signed-off-by: Olaf Hering + +--- + unmodified_drivers/linux-2.6/platform-pci/platform-pci.c | 31 +++++++++++++++ + 1 file changed, 31 insertions(+) + +Index: xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +=================================================================== +--- xen-4.1.1-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c ++++ xen-4.1.1-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -359,6 +360,32 @@ static int check_platform_magic(struct d + return -ENODEV; + } + ++#if defined(HAVE_OLDMEM_PFN_IS_RAM) && defined(HVMOP_get_mem_type) ++static int xen_oldmem_pfn_is_ram(unsigned long pfn) ++{ ++ struct xen_hvm_get_mem_type a; ++ int ram; ++ ++ a.domid = DOMID_SELF; ++ a.pfn = pfn; ++ if (HYPERVISOR_hvm_op(HVMOP_get_mem_type, &a)) ++ return -ENXIO; ++ ++ switch (a.mem_type) { ++ case HVMMEM_mmio_dm: ++ ram = 0; ++ break; ++ case HVMMEM_ram_rw: ++ case HVMMEM_ram_ro: ++ default: ++ ram = 1; ++ break; ++ } ++ ++ return ram; ++} ++#endif ++ + static int __devinit platform_pci_init(struct pci_dev *pdev, + const struct pci_device_id *ent) + { +@@ -427,6 +454,10 @@ static int __devinit platform_pci_init(s + if ((ret = xen_panic_handler_init())) + goto out; + ++#if defined(HAVE_OLDMEM_PFN_IS_RAM) && defined(HVMOP_get_mem_type) ++ register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram); ++#endif ++ + out: + if (ret) { + pci_release_region(pdev, 0); diff --git a/xen.spec b/xen.spec index c1c7b26..3d564eb 100644 --- a/xen.spec +++ b/xen.spec @@ -22,8 +22,8 @@ Name: xen ExclusiveArch: %ix86 x86_64 %define xvers 4.1 %define xvermaj 4 -%define changeset 23013 -%define xen_build_dir xen-4.1.0-testing +%define changeset 23064 +%define xen_build_dir xen-4.1.1-testing %define with_kmp 1 %define with_stubdom 0 %if %suse_version > 1140 @@ -79,14 +79,14 @@ BuildRequires: glibc-devel %if %{?with_kmp}0 BuildRequires: kernel-source kernel-syms module-init-tools xorg-x11 %endif -Version: 4.1.0_01 +Version: 4.1.1_01 Release: 13 License: GPLv2+ Group: System/Kernel AutoReqProv: on PreReq: %insserv_prereq %fillup_prereq Summary: Xen Virtualization: Hypervisor (aka VMM aka Microkernel) -Source0: xen-4.1.0-testing-src.tar.bz2 +Source0: xen-4.1.1-testing-src.tar.bz2 Source1: stubdom.tar.bz2 Source2: xen-utils-0.1.tar.bz2 Source3: README.SuSE @@ -120,7 +120,6 @@ Source99: baselibs.conf # http://xenbits.xensource.com/ext/xenalyze Source20000: xenalyze.hg.tar.bz2 # Upstream patches -Patch0: cve-2011-1583-4.1.patch Patch1: 22998-x86-get_page_from_l1e-retcode.patch Patch2: 22999-x86-mod_l1_entry-retcode.patch Patch3: 23000-x86-mod_l2_entry-retcode.patch @@ -128,11 +127,18 @@ Patch4: 23096-x86-hpet-no-cpumask_lock.patch Patch5: 23099-x86-rwlock-scalability.patch Patch6: 23103-x86-pirq-guest-eoi-check.patch Patch7: 23127-vtd-bios-settings.patch -Patch8: 23153-x86-amd-clear-DramModEn.patch -Patch9: 23154-x86-amd-iorr-no-rdwr.patch -Patch10: 23199-amd-iommu-unmapped-intr-fault.patch -Patch11: 23200-amd-iommu-intremap-sync.patch -Patch12: 23228-x86-conditional-write_tsc.patch +Patch8: 23199-amd-iommu-unmapped-intr-fault.patch +Patch9: 23233-hvm-cr-access.patch +Patch10: 23234-svm-decode-assist-base.patch +Patch11: 23235-svm-decode-assist-crs.patch +Patch12: 23236-svm-decode-assist-invlpg.patch +Patch13: 23238-svm-decode-assist-insn-fetch.patch +Patch14: 23303-cpufreq-misc.patch +Patch15: 23304-amd-oprofile-strings.patch +Patch16: 23305-amd-fam15-xenoprof.patch +Patch17: 23306-amd-fam15-vpmu.patch +Patch18: 23334-amd-fam12+14-vpmu.patch +Patch19: 23338-vtd-force-intremap.patch # Upstream qemu patches # Our patches Patch300: xen-config.diff @@ -221,8 +227,9 @@ Patch439: minios-fixups.patch Patch440: bdrv_default_rwflag.patch Patch442: xen-minimum-restart-time.patch Patch443: vif-bridge.mtu.patch -Patch444: xentrace.dynamic_sized_tbuf.patch Patch445: hotplug.losetup.patch +Patch446: xend-disable-internal-logrotate.patch +Patch447: xend-config-enable-dump-comment.patch # Jim's domain lock patch Patch450: xend-domain-lock.patch # Hypervisor and PV driver Patches @@ -238,39 +245,33 @@ Patch509: blktap-pv-cdrom.patch Patch510: pv-driver-build.patch Patch511: supported_module.diff Patch512: magic_ioport_compat.patch +Patch513: xen.sles11sp1.bug684297.xen_oldmem_pfn_is_ram.patch Patch650: disable_emulated_device.diff Patch651: ioemu-disable-scsi.patch Patch652: ioemu-disable-emulated-ide-if-pv.patch Patch700: hv_extid_compatibility.patch +# xentrace / xenalyze +Patch1000: xen-unstable.xentrace.dynamic_tbuf.patch +Patch1001: xen-unstable.xentrace.empty_t_info_pages.patch +Patch1002: xen-unstable.xentrace.verbose.patch +Patch1003: xen-unstable.xentrace.no_gdprintk.patch +Patch1004: xen-unstable.xentrace.comments.patch +Patch1005: xen-unstable.xentrace.printk_prefix.patch +Patch1006: xen-unstable.xentrace.remove_debug_printk.patch +Patch1007: xen-unstable.xentrace.t_info_pages-formula.patch +Patch1008: xen-unstable.xentrace.register_cpu_notifier-boot_time.patch +Patch1009: xen-unstable.xentrace.t_info_page-overflow.patch +Patch1010: xen-unstable.xentrace.t_info_first_offset.patch +Patch1011: xen-unstable.xentrace.data_size__read_mostly.patch +Patch1012: xen-unstable.xentrace.__insert_record-dst-type.patch # FATE 310510 -Patch10001: xenpaging.tools_xenpaging_cleanup.patch -Patch10002: xenpaging.pageout_policy.patch -Patch10003: xenpaging.get_paged_frame.patch -Patch10004: xenpaging.makefile.patch -Patch10010: xenpaging.policy_linear.patch -Patch10011: xenpaging.pagefile.patch -Patch10012: xenpaging.xenpaging_init.patch -Patch10013: xenpaging.mem_paging_tool_qemu_flush_cache.patch -Patch10014: xenpaging.machine_to_phys_mapping.patch -Patch10015: xenpaging.populate_only_if_paged.patch -Patch10017: xenpaging.autostart.patch -Patch10018: xenpaging.signal_handling.patch -Patch10019: xenpaging.MRU_SIZE.patch -Patch10020: xenpaging.guest_remove_page.patch -Patch10021: xenpaging.mem_event_check_ring-free_requests.patch -Patch10022: xenpaging.blacklist.patch -Patch10023: xenpaging.autostart_delay.patch -Patch10024: xenpaging.page_already_populated.patch -Patch10025: xenpaging.notify_policy_only_once.patch -Patch10026: xenpaging.num_pages_equal_max_pages.patch -Patch10027: xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch -Patch10028: xenpaging.HVMCOPY_gfn_paged_out.patch -Patch10029: xenpaging.optimize_p2m_mem_paging_populate.patch -Patch10030: xenpaging.paging_prep_enomem.patch -Patch10031: xenpaging.print-arguments.patch -Patch10032: xenpaging.no_domain_id.patch -Patch10033: xenpaging.runtime_mru_size.patch -Patch10040: xenpaging.doc.patch +Patch1100: xenpaging.guest_remove_page.slow_path.patch +Patch1101: xenpaging.mem_event-no-p2mt.patch +Patch1102: xenpaging.no-srand.patch +Patch1103: xenpaging.return-void.patch +Patch1104: xenpaging.catch-xc_mem_paging_resume-error.patch +Patch1105: xenpaging.xenpaging_populate_page-gfn.patch +Patch1106: xenpaging.autostart.patch # xenalyze Patch20000: xenalyze.gcc46.patch # Build patch @@ -608,7 +609,6 @@ Authors: %setup -q -n %xen_build_dir -a 1 -a 20000 %patch20000 -p1 tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools -%patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 @@ -621,6 +621,13 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 %patch300 -p1 %patch301 -p1 %patch302 -p1 @@ -703,8 +710,9 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools %patch440 -p1 %patch442 -p1 %patch443 -p1 -%patch444 -p1 %patch445 -p1 +%patch446 -p1 +%patch447 -p1 %patch450 -p1 %patch500 -p1 %patch501 -p1 @@ -718,38 +726,34 @@ tar xfj %{SOURCE2} -C $RPM_BUILD_DIR/%{xen_build_dir}/tools %patch510 -p1 %patch511 -p1 %patch512 -p1 +%patch513 -p1 %patch650 -p1 %patch651 -p1 %patch652 -p1 %patch700 -p1 -#%patch10001 -p1 -#%patch10002 -p1 -#%patch10003 -p1 -#%patch10004 -p1 -#%patch10010 -p1 -#%patch10011 -p1 -#%patch10012 -p1 -#%patch10013 -p1 -#%patch10014 -p1 -#%patch10015 -p1 -#%patch10017 -p1 -#%patch10018 -p1 -#%patch10019 -p1 -#%patch10020 -p1 -#%patch10021 -p1 -#%patch10022 -p1 -#%patch10023 -p1 -#%patch10024 -p1 -#%patch10025 -p1 -#%patch10026 -p1 -#%patch10027 -p1 -#%patch10028 -p1 -#%patch10029 -p1 -#%patch10030 -p1 -#%patch10031 -p1 -#%patch10032 -p1 -#%patch10033 -p1 -#%patch10040 -p1 +# xentrace / xenalyze +%patch1000 -p1 +%patch1001 -p1 +%patch1002 -p1 +%patch1003 -p1 +%patch1004 -p1 +%patch1005 -p1 +%patch1006 -p1 +%patch1007 -p1 +%patch1008 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 +%patch1012 -p1 +# FATE 310510 +%patch1100 -p1 +%patch1101 -p1 +%patch1102 -p1 +%patch1103 -p1 +%patch1104 -p1 +%patch1105 -p1 +%patch1106 -p1 +# %patch99998 -p1 %patch99999 -p1 diff --git a/xenalyze.gcc46.patch b/xenalyze.gcc46.patch index 1d68bc4..15d496f 100644 --- a/xenalyze.gcc46.patch +++ b/xenalyze.gcc46.patch @@ -18,10 +18,10 @@ cc1: all warnings being treated as errors xenalyze.hg/xenalyze.c | 21 --------------------- 1 file changed, 21 deletions(-) -Index: xen-4.1.0-testing/xenalyze.hg/xenalyze.c +Index: xen-4.1.1-testing/xenalyze.hg/xenalyze.c =================================================================== ---- xen-4.1.0-testing.orig/xenalyze.hg/xenalyze.c -+++ xen-4.1.0-testing/xenalyze.hg/xenalyze.c +--- xen-4.1.1-testing.orig/xenalyze.hg/xenalyze.c ++++ xen-4.1.1-testing/xenalyze.hg/xenalyze.c @@ -2016,8 +2016,6 @@ float weighted_percentile(float * A, /* float X, t1; unsigned long long t2; diff --git a/xenapi-console-protocol.patch b/xenapi-console-protocol.patch index 0d1970d..335c3f4 100644 --- a/xenapi-console-protocol.patch +++ b/xenapi-console-protocol.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -3934,6 +3934,14 @@ class XendDomainInfo: if not config.has_key('backend'): config['backend'] = "00000000-0000-0000-0000-000000000000" diff --git a/xenconsole-no-multiple-connections.patch b/xenconsole-no-multiple-connections.patch index 2b00d9f..772724c 100644 --- a/xenconsole-no-multiple-connections.patch +++ b/xenconsole-no-multiple-connections.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/console/client/main.c +Index: xen-4.1.1-testing/tools/console/client/main.c =================================================================== ---- xen-4.1.0-testing.orig/tools/console/client/main.c -+++ xen-4.1.0-testing/tools/console/client/main.c +--- xen-4.1.1-testing.orig/tools/console/client/main.c ++++ xen-4.1.1-testing/tools/console/client/main.c @@ -96,6 +96,7 @@ static int get_pty_fd(struct xs_handle * * Assumes there is already a watch set in the store for this path. */ { diff --git a/xend-config-enable-dump-comment.patch b/xend-config-enable-dump-comment.patch new file mode 100644 index 0000000..3e5e40d --- /dev/null +++ b/xend-config-enable-dump-comment.patch @@ -0,0 +1,20 @@ +bnc#684305 + +--- + tools/examples/xend-config.sxp | 3 +++ + 1 file changed, 3 insertions(+) + +Index: xen-4.1.1-testing/tools/examples/xend-config.sxp +=================================================================== +--- xen-4.1.1-testing.orig/tools/examples/xend-config.sxp ++++ xen-4.1.1-testing/tools/examples/xend-config.sxp +@@ -250,6 +250,9 @@ + (dom0-cpus 0) + + # Whether to enable core-dumps when domains crash. ++# This setting overrides the per-domain dump value 'on_crash' and causes a ++# core dump on all crashed domains. For finer grain control, it is best to ++# disable this setting (which is default) and use the per-domain controls. + #(enable-dump no) + + # The tool used for initiating virtual TPM migration diff --git a/xend-config.diff b/xend-config.diff index 319cdbc..d3c9ce8 100644 --- a/xend-config.diff +++ b/xend-config.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/init.d/sysconfig.xendomains +Index: xen-4.1.1-testing/tools/hotplug/Linux/init.d/sysconfig.xendomains =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/init.d/sysconfig.xendomains -+++ xen-4.1.0-testing/tools/hotplug/Linux/init.d/sysconfig.xendomains +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/init.d/sysconfig.xendomains ++++ xen-4.1.1-testing/tools/hotplug/Linux/init.d/sysconfig.xendomains @@ -1,4 +1,4 @@ -## Path: System/xen +## Path: System/Virtualization @@ -27,10 +27,10 @@ Index: xen-4.1.0-testing/tools/hotplug/Linux/init.d/sysconfig.xendomains ## Type: integer ## Default: 300 -Index: xen-4.1.0-testing/tools/examples/xend-config.sxp +Index: xen-4.1.1-testing/tools/examples/xend-config.sxp =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xend-config.sxp -+++ xen-4.1.0-testing/tools/examples/xend-config.sxp +--- xen-4.1.1-testing.orig/tools/examples/xend-config.sxp ++++ xen-4.1.1-testing/tools/examples/xend-config.sxp @@ -58,11 +58,12 @@ diff --git a/xend-core-dump-loc.diff b/xend-core-dump-loc.diff index ab0b1b3..a6c143c 100644 --- a/xend-core-dump-loc.diff +++ b/xend-core-dump-loc.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -2303,7 +2303,7 @@ class XendDomainInfo: # To prohibit directory traversal based_name = os.path.basename(self.info['name_label']) diff --git a/xend-devid-or-name.patch b/xend-devid-or-name.patch index 391f2d6..e9ff8e8 100644 --- a/xend-devid-or-name.patch +++ b/xend-devid-or-name.patch @@ -11,10 +11,10 @@ form, e.g. it would accept '5632' or 'hdc'. This patch restores that behavior. Signed-off-by: Jim Fehlig -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -1203,6 +1203,9 @@ class XendDomainInfo: except ValueError: pass diff --git a/xend-disable-internal-logrotate.patch b/xend-disable-internal-logrotate.patch new file mode 100644 index 0000000..1f421ce --- /dev/null +++ b/xend-disable-internal-logrotate.patch @@ -0,0 +1,20 @@ +Disable internal logging and enable the logrotate.conf from the xen package. +This allows larger xend.log files + +--- + tools/python/xen/xend/XendLogging.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: xen-4.1.1-testing/tools/python/xen/xend/XendLogging.py +=================================================================== +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendLogging.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendLogging.py +@@ -76,7 +76,7 @@ if 'TRACE' not in logging.__dict__: + log = logging.getLogger("xend") + + +-MAX_BYTES = 1 << 20 # 1MB ++MAX_BYTES = 0 + BACKUP_COUNT = 5 + + STDERR_FORMAT = "[%(name)s] %(levelname)s (%(module)s:%(lineno)d) %(message)s" diff --git a/xend-domain-lock.patch b/xend-domain-lock.patch index 7047c47..a25a2f4 100644 --- a/xend-domain-lock.patch +++ b/xend-domain-lock.patch @@ -8,11 +8,11 @@ tools/python/xen/xend/XendOptions.py | 29 +++++++++++ 7 files changed, 290 insertions(+) -Index: xen-4.1.0-testing/tools/examples/xend-config.sxp +Index: xen-4.1.1-testing/tools/examples/xend-config.sxp =================================================================== ---- xen-4.1.0-testing.orig/tools/examples/xend-config.sxp -+++ xen-4.1.0-testing/tools/examples/xend-config.sxp -@@ -321,6 +321,65 @@ +--- xen-4.1.1-testing.orig/tools/examples/xend-config.sxp ++++ xen-4.1.1-testing/tools/examples/xend-config.sxp +@@ -324,6 +324,65 @@ # device assignment could really work properly even after we do this. #(pci-passthrough-strict-check yes) @@ -78,10 +78,10 @@ Index: xen-4.1.0-testing/tools/examples/xend-config.sxp # If we have a very big scsi device configuration, start of xend is slow, # because xend scans all the device paths to build its internal PSCSI device # list. If we need only a few devices for assigning to a guest, we can reduce -Index: xen-4.1.0-testing/tools/hotplug/Linux/Makefile +Index: xen-4.1.1-testing/tools/hotplug/Linux/Makefile =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/Makefile -+++ xen-4.1.0-testing/tools/hotplug/Linux/Makefile +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/Makefile ++++ xen-4.1.1-testing/tools/hotplug/Linux/Makefile @@ -22,6 +22,7 @@ XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate @@ -90,10 +90,10 @@ Index: xen-4.1.0-testing/tools/hotplug/Linux/Makefile XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh -Index: xen-4.1.0-testing/tools/hotplug/Linux/domain-lock +Index: xen-4.1.1-testing/tools/hotplug/Linux/domain-lock =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/hotplug/Linux/domain-lock ++++ xen-4.1.1-testing/tools/hotplug/Linux/domain-lock @@ -0,0 +1,83 @@ +#!/bin/bash + @@ -178,10 +178,10 @@ Index: xen-4.1.0-testing/tools/hotplug/Linux/domain-lock + get_status $vm_path + ;; +esac -Index: xen-4.1.0-testing/tools/hotplug/Linux/vm-monitor +Index: xen-4.1.1-testing/tools/hotplug/Linux/vm-monitor =================================================================== --- /dev/null -+++ xen-4.1.0-testing/tools/hotplug/Linux/vm-monitor ++++ xen-4.1.1-testing/tools/hotplug/Linux/vm-monitor @@ -0,0 +1,41 @@ +#!/bin/bash + @@ -224,10 +224,10 @@ Index: xen-4.1.0-testing/tools/hotplug/Linux/vm-monitor +elif [ $0 = "$basedir/vm-monitor" ]; then + monitor $* +fi -Index: xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendCheckpoint.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendCheckpoint.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendCheckpoint.py @@ -133,6 +133,8 @@ def save(fd, dominfo, network, live, dst dominfo.shutdown('suspend') dominfo.waitForSuspend() @@ -245,10 +245,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendCheckpoint.py return dominfo except Exception, exn: dominfo.destroy() -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py @@ -470,6 +470,7 @@ class XendDomainInfo: if self._stateGet() in (XEN_API_VM_POWER_STATE_HALTED, XEN_API_VM_POWER_STATE_SUSPENDED, XEN_API_VM_POWER_STATE_CRASHED): @@ -344,10 +344,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomainInfo.py def __str__(self): return '' % \ (str(self.domid), self.info['name_label'], -Index: xen-4.1.0-testing/tools/python/xen/xend/XendOptions.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendOptions.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendOptions.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendOptions.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendOptions.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendOptions.py @@ -154,6 +154,17 @@ class XendOptions: use loose check automatically if necessary.""" pci_dev_assign_strict_check_default = True diff --git a/xend-sysconfig.patch b/xend-sysconfig.patch index 38a509b..ed0f7c2 100644 --- a/xend-sysconfig.patch +++ b/xend-sysconfig.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons +Index: xen-4.1.1-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons =================================================================== ---- xen-4.1.0-testing.orig/tools/hotplug/Linux/init.d/sysconfig.xencommons -+++ xen-4.1.0-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons +--- xen-4.1.1-testing.orig/tools/hotplug/Linux/init.d/sysconfig.xencommons ++++ xen-4.1.1-testing/tools/hotplug/Linux/init.d/sysconfig.xencommons @@ -1,11 +1,31 @@ +## Path: System/Virtualization +## Type: string(none,guest,hv,all) diff --git a/xenpaging.HVMCOPY_gfn_paged_out.patch b/xenpaging.HVMCOPY_gfn_paged_out.patch deleted file mode 100644 index 6002643..0000000 --- a/xenpaging.HVMCOPY_gfn_paged_out.patch +++ /dev/null @@ -1,151 +0,0 @@ -Subject: xenpaging: handle HVMCOPY_gfn_paged_out in copy_from/to_user - -copy_from_user_hvm can fail when __hvm_copy returns -HVMCOPY_gfn_paged_out for a referenced gfn, for example during guests -pagetable walk. This has to be handled in some way. One hypercall that -failed was do_memory_op/XENMEM_decrease_reservation which lead to a -BUG_ON balloon.c. Since do_memory_op already has restart support for -the hypercall, copy_from_guest uses this existing retry code. In -addition, cleanup on error was added to increase_reservation and -populate_physmap. - -Signed-off-by: Olaf Hering - ---- - xen/arch/x86/hvm/hvm.c | 4 ++++ - xen/common/memory.c | 39 ++++++++++++++++++++++++++++++++++----- - 2 files changed, 38 insertions(+), 5 deletions(-) - -Index: xen-4.0.2-testing/xen/arch/x86/hvm/hvm.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/hvm/hvm.c -+++ xen-4.0.2-testing/xen/arch/x86/hvm/hvm.c -@@ -1843,6 +1843,8 @@ unsigned long copy_to_user_hvm(void *to, - - rc = hvm_copy_to_guest_virt_nofault((unsigned long)to, (void *)from, - len, 0); -+ if ( rc == HVMCOPY_gfn_paged_out ) -+ return -EAGAIN; - return rc ? len : 0; /* fake a copy_to_user() return code */ - } - -@@ -1859,6 +1861,8 @@ unsigned long copy_from_user_hvm(void *t - #endif - - rc = hvm_copy_from_guest_virt_nofault(to, (unsigned long)from, len, 0); -+ if ( rc == HVMCOPY_gfn_paged_out ) -+ return -EAGAIN; - return rc ? len : 0; /* fake a copy_from_user() return code */ - } - -Index: xen-4.0.2-testing/xen/common/memory.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/common/memory.c -+++ xen-4.0.2-testing/xen/common/memory.c -@@ -47,6 +47,7 @@ static void increase_reservation(struct - { - struct page_info *page; - unsigned long i; -+ unsigned long ctg_ret; - xen_pfn_t mfn; - struct domain *d = a->domain; - -@@ -80,8 +81,13 @@ static void increase_reservation(struct - if ( !guest_handle_is_null(a->extent_list) ) - { - mfn = page_to_mfn(page); -- if ( unlikely(__copy_to_guest_offset(a->extent_list, i, &mfn, 1)) ) -+ ctg_ret = __copy_to_guest_offset(a->extent_list, i, &mfn, 1); -+ if ( unlikely(ctg_ret) ) -+ { -+ if ( (long)ctg_ret == -EAGAIN ) -+ a->preempted = 1; - goto out; -+ } - } - } - -@@ -93,6 +99,7 @@ static void populate_physmap(struct memo - { - struct page_info *page; - unsigned long i, j; -+ unsigned long cftg_ret; - xen_pfn_t gpfn, mfn; - struct domain *d = a->domain; - -@@ -111,8 +118,13 @@ static void populate_physmap(struct memo - goto out; - } - -- if ( unlikely(__copy_from_guest_offset(&gpfn, a->extent_list, i, 1)) ) -+ cftg_ret = __copy_from_guest_offset(&gpfn, a->extent_list, i, 1); -+ if ( unlikely(cftg_ret) ) -+ { -+ if ( (long)cftg_ret == -EAGAIN ) -+ a->preempted = 1; - goto out; -+ } - - if ( a->memflags & MEMF_populate_on_demand ) - { -@@ -142,8 +154,13 @@ static void populate_physmap(struct memo - set_gpfn_from_mfn(mfn + j, gpfn + j); - - /* Inform the domain of the new page's machine address. */ -- if ( unlikely(__copy_to_guest_offset(a->extent_list, i, &mfn, 1)) ) -+ cftg_ret = __copy_to_guest_offset(a->extent_list, i, &mfn, 1); -+ if ( unlikely(cftg_ret) ) -+ { -+ if ( (long)cftg_ret == -EAGAIN ) -+ a->preempted = 1; - goto out; -+ } - } - } - } -@@ -212,6 +229,7 @@ int guest_remove_page(struct domain *d, - static void decrease_reservation(struct memop_args *a) - { - unsigned long i, j; -+ unsigned long cfg_ret; - xen_pfn_t gmfn; - - if ( !guest_handle_subrange_okay(a->extent_list, a->nr_done, -@@ -226,8 +244,13 @@ static void decrease_reservation(struct - goto out; - } - -- if ( unlikely(__copy_from_guest_offset(&gmfn, a->extent_list, i, 1)) ) -+ cfg_ret = __copy_from_guest_offset(&gmfn, a->extent_list, i, 1); -+ if ( unlikely(cfg_ret) ) -+ { -+ if ( (long)cfg_ret == -EAGAIN ) -+ a->preempted = 1; - goto out; -+ } - - if ( tb_init_done ) - { -@@ -511,6 +534,7 @@ long do_memory_op(unsigned long cmd, XEN - int rc, op; - unsigned int address_bits; - unsigned long start_extent; -+ unsigned long cfg_ret; - struct xen_memory_reservation reservation; - struct memop_args args; - domid_t domid; -@@ -524,8 +548,13 @@ long do_memory_op(unsigned long cmd, XEN - case XENMEM_populate_physmap: - start_extent = cmd >> MEMOP_EXTENT_SHIFT; - -- if ( copy_from_guest(&reservation, arg, 1) ) -+ cfg_ret = copy_from_guest(&reservation, arg, 1); -+ if ( unlikely(cfg_ret) ) -+ { -+ if ( (long)cfg_ret == -EAGAIN ) -+ return hypercall_create_continuation(__HYPERVISOR_memory_op, "lh", cmd, arg); - return start_extent; -+ } - - /* Is size too large for us to encode a continuation? */ - if ( reservation.nr_extents > (ULONG_MAX >> MEMOP_EXTENT_SHIFT) ) diff --git a/xenpaging.MRU_SIZE.patch b/xenpaging.MRU_SIZE.patch deleted file mode 100644 index 370664b..0000000 --- a/xenpaging.MRU_SIZE.patch +++ /dev/null @@ -1,27 +0,0 @@ -Subject: xenpaging: increase recently used pages from 4MB to 64MB - -Increase recently used pages from 4MB to 64MB. -Keeping more pages in memory allows the guest to make more progress if the -paging file spans the entire guest memory. - -(xen-unstable changeset: 22447:aba70e59a90d) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/policy_default.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: xen-4.0.2-testing/tools/xenpaging/policy_default.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy_default.c -+++ xen-4.0.2-testing/tools/xenpaging/policy_default.c -@@ -26,7 +26,7 @@ - #include "policy.h" - - --#define MRU_SIZE 1024 -+#define MRU_SIZE (1024 * 16) - - - static unsigned long mru[MRU_SIZE]; diff --git a/xenpaging.autostart.patch b/xenpaging.autostart.patch index 8f5cff3..ca3f276 100644 --- a/xenpaging.autostart.patch +++ b/xenpaging.autostart.patch @@ -1,14 +1,21 @@ -Subject: xenpaging: start xenpaging via config option +xenpaging: start xenpaging via config option Start xenpaging via config option. -TODO: add config option for pagefile directory TODO: add libxl support TODO: parse config values like 42K, 42M, 42G, 42% Signed-off-by: Olaf Hering --- +v4: + add config option for pagefile directory + add config option to enable debug + add config option to set polic mru_size + fail if chdir fails + force self.xenpaging* variables to be strings because a xm new may turn some + of them into type int and later os.execve fails with a TypeError + v3: decouple create/destroycreateXenPaging from _create/_removeDevices init xenpaging variable to 0 if xenpaging is not in config file to @@ -18,80 +25,105 @@ v2: unlink logfile instead of truncating it. allows hardlinking for further inspection - tools/examples/xmexample.hvm | 3 + - tools/python/README.XendConfig | 1 - tools/python/README.sxpcfg | 1 - tools/python/xen/xend/XendConfig.py | 3 + +--- + tools/examples/xmexample.hvm | 12 ++++ + tools/python/README.XendConfig | 4 + + tools/python/README.sxpcfg | 4 + + tools/python/xen/xend/XendConfig.py | 12 ++++ tools/python/xen/xend/XendDomainInfo.py | 12 ++++ - tools/python/xen/xend/image.py | 84 ++++++++++++++++++++++++++++++++ - tools/python/xen/xm/create.py | 5 + - tools/python/xen/xm/xenapi_create.py | 1 - 8 files changed, 110 insertions(+) + tools/python/xen/xend/image.py | 87 ++++++++++++++++++++++++++++++++ + tools/python/xen/xm/create.py | 20 +++++++ + tools/python/xen/xm/xenapi_create.py | 4 + + 8 files changed, 155 insertions(+) -Index: xen-4.0.2-testing/tools/examples/xmexample.hvm +Index: xen-4.1.1-testing/tools/examples/xmexample.hvm =================================================================== ---- xen-4.0.2-testing.orig/tools/examples/xmexample.hvm -+++ xen-4.0.2-testing/tools/examples/xmexample.hvm -@@ -127,6 +127,9 @@ disk = [ 'file:/var/lib/xen/images/disk. +--- xen-4.1.1-testing.orig/tools/examples/xmexample.hvm ++++ xen-4.1.1-testing/tools/examples/xmexample.hvm +@@ -127,6 +127,18 @@ disk = [ 'file:/var/lib/xen/images/disk. # Device Model to be used device_model = 'qemu-dm' -+# xenpaging, number of pages -+xenpaging = 42 ++# number of guest pages to page-out, or -1 for entire guest memory range ++xenpaging=42 ++ ++# directory to store guest page file ++#xenpaging_workdir="/var/lib/xen/xenpaging" ++ ++# enable debug output in pager ++#xenpaging_debug=0 ++ ++# number of paged-in pages to keep in memory ++#xenpaging_policy_mru_size=1024 + #----------------------------------------------------------------------------- # boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) # default: hard disk, cd-rom, floppy -Index: xen-4.0.2-testing/tools/python/README.XendConfig +Index: xen-4.1.1-testing/tools/python/README.XendConfig =================================================================== ---- xen-4.0.2-testing.orig/tools/python/README.XendConfig -+++ xen-4.0.2-testing/tools/python/README.XendConfig -@@ -120,6 +120,7 @@ otherConfig +--- xen-4.1.1-testing.orig/tools/python/README.XendConfig ++++ xen-4.1.1-testing/tools/python/README.XendConfig +@@ -120,6 +120,10 @@ otherConfig image.vncdisplay image.vncunused image.hvm.device_model + image.hvm.xenpaging ++ image.hvm.xenpaging_workdir ++ image.hvm.xenpaging_debug ++ image.hvm.xenpaging_policy_mru_size image.hvm.display image.hvm.xauthority image.hvm.vncconsole -Index: xen-4.0.2-testing/tools/python/README.sxpcfg +Index: xen-4.1.1-testing/tools/python/README.sxpcfg =================================================================== ---- xen-4.0.2-testing.orig/tools/python/README.sxpcfg -+++ xen-4.0.2-testing/tools/python/README.sxpcfg -@@ -51,6 +51,7 @@ image +--- xen-4.1.1-testing.orig/tools/python/README.sxpcfg ++++ xen-4.1.1-testing/tools/python/README.sxpcfg +@@ -51,6 +51,10 @@ image - vncunused (HVM) - device_model + - xenpaging ++ - xenpaging_workdir ++ - xenpaging_debug ++ - xenpaging_policy_mru_size - display - xauthority - vncconsole -Index: xen-4.0.2-testing/tools/python/xen/xend/XendConfig.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py =================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xend/XendConfig.py -+++ xen-4.0.2-testing/tools/python/xen/xend/XendConfig.py -@@ -145,6 +145,7 @@ XENAPI_PLATFORM_CFG_TYPES = { +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendConfig.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendConfig.py +@@ -147,6 +147,10 @@ XENAPI_PLATFORM_CFG_TYPES = { 'apic': int, 'boot': str, 'device_model': str, + 'xenpaging': str, ++ 'xenpaging_workdir': str, ++ 'xenpaging_debug': str, ++ 'xenpaging_policy_mru_size': str, 'loader': str, 'display' : str, 'fda': str, -@@ -508,6 +509,8 @@ class XendConfig(dict): +@@ -514,6 +518,14 @@ class XendConfig(dict): self['platform']['nomigrate'] = 0 if self.is_hvm(): + if 'xenpaging' not in self['platform']: + self['platform']['xenpaging'] = "0" ++ if 'xenpaging_workdir' not in self['platform']: ++ self['platform']['xenpaging_workdir'] = "/var/lib/xen/xenpaging" ++ if 'xenpaging_debug' not in self['platform']: ++ self['platform']['xenpaging_debug'] = "0" ++ if 'xenpaging_policy_mru_size' not in self['platform']: ++ self['platform']['xenpaging_policy_mru_size'] = "0" if 'timer_mode' not in self['platform']: self['platform']['timer_mode'] = 1 if 'extid' in self['platform'] and int(self['platform']['extid']) == 1: -Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py -+++ xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py -@@ -2293,6 +2293,8 @@ class XendDomainInfo: +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomainInfo.py +@@ -2277,6 +2277,8 @@ class XendDomainInfo: self.info['name_label'], self.domid, self.info['uuid'], new_name, new_uuid) self._unwatchVm() @@ -100,7 +132,7 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py self._releaseDevices() # Remove existing vm node in xenstore self._removeVm() -@@ -2954,6 +2956,9 @@ class XendDomainInfo: +@@ -2948,6 +2950,9 @@ class XendDomainInfo: self._createDevices() @@ -110,7 +142,7 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py self.image.cleanupTmpImages() self.info['start_time'] = time.time() -@@ -2978,6 +2983,8 @@ class XendDomainInfo: +@@ -2972,6 +2977,8 @@ class XendDomainInfo: self.refresh_shutdown_lock.acquire() try: self.unwatchShutdown() @@ -119,7 +151,7 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py self._releaseDevices() bootloader_tidy(self) -@@ -3062,6 +3069,7 @@ class XendDomainInfo: +@@ -3056,6 +3063,7 @@ class XendDomainInfo: self.image = image.create(self, self.info) if self.image: self._createDevices(True) @@ -127,7 +159,7 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py self._storeDomDetails() self._registerWatches() self.refreshShutdown() -@@ -3202,6 +3210,8 @@ class XendDomainInfo: +@@ -3196,6 +3204,8 @@ class XendDomainInfo: # could also fetch a parsed note from xenstore fast = self.info.get_notes().get('SUSPEND_CANCEL') and 1 or 0 if not fast: @@ -136,7 +168,7 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py self._releaseDevices() self.testDeviceComplete() self.testvifsComplete() -@@ -3217,6 +3227,8 @@ class XendDomainInfo: +@@ -3211,6 +3221,8 @@ class XendDomainInfo: self._storeDomDetails() self._createDevices() @@ -145,30 +177,29 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/XendDomainInfo.py log.debug("XendDomainInfo.resumeDomain: devices created") xc.domain_resume(self.domid, fast) -Index: xen-4.0.2-testing/tools/python/xen/xend/image.py +Index: xen-4.1.1-testing/tools/python/xen/xend/image.py =================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.0.2-testing/tools/python/xen/xend/image.py -@@ -122,12 +122,14 @@ class ImageHandler: +--- xen-4.1.1-testing.orig/tools/python/xen/xend/image.py ++++ xen-4.1.1-testing/tools/python/xen/xend/image.py +@@ -122,6 +122,11 @@ class ImageHandler: self.vm.permissionsVm("image/cmdline", { 'dom': self.vm.getDomid(), 'read': True } ) self.device_model = vmConfig['platform'].get('device_model') -+ self.xenpaging = vmConfig['platform'].get('xenpaging') ++ self.xenpaging = str(vmConfig['platform'].get('xenpaging')) ++ self.xenpaging_workdir = str(vmConfig['platform'].get('xenpaging_workdir')) ++ self.xenpaging_debug = str(vmConfig['platform'].get('xenpaging_debug')) ++ self.xenpaging_policy_mru_size = str(vmConfig['platform'].get('xenpaging_policy_mru_size')) ++ self.xenpaging_pid = None self.display = vmConfig['platform'].get('display') self.xauthority = vmConfig['platform'].get('xauthority') - self.vncconsole = int(vmConfig['platform'].get('vncconsole', 0)) - self.dmargs = self.parseDeviceModelArgs(vmConfig) - self.pid = None -+ self.xenpaging_pid = None - rtc_timeoffset = int(vmConfig['platform'].get('rtc_timeoffset', 0)) - if int(vmConfig['platform'].get('localtime', 0)): - if time.localtime(time.time())[8]: -@@ -392,6 +394,88 @@ class ImageHandler: +@@ -392,6 +397,88 @@ class ImageHandler: sentinel_fifos_inuse[sentinel_path_fifo] = 1 self.sentinel_path_fifo = sentinel_path_fifo + def createXenPaging(self): ++ if not self.vm.info.is_hvm(): ++ return + if self.xenpaging == "0": + return + if self.xenpaging_pid: @@ -178,6 +209,10 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/image.py + args = args + ([ "%d" % self.vm.getDomid()]) + args = args + ([ "%s" % self.xenpaging]) + env = dict(os.environ) ++ if not self.xenpaging_debug == "0": ++ env['XENPAGING_DEBUG'] = self.xenpaging_debug ++ if not self.xenpaging_policy_mru_size == "0": ++ env['XENPAGING_POLICY_MRU_SIZE'] = self.xenpaging_policy_mru_size + self.xenpaging_logfile = "/var/log/xen/xenpaging-%s.log" % str(self.vm.info['name_label']) + logfile_mode = os.O_WRONLY|os.O_CREAT|os.O_APPEND|os.O_TRUNC + null = os.open("/dev/null", os.O_RDONLY) @@ -191,25 +226,19 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/image.py + xenpaging_pid = os.fork() + if xenpaging_pid == 0: #child + try: -+ xenpaging_dir = "/var/lib/xen/xenpaging" + osdep.postfork(contract) + os.dup2(null, 0) + os.dup2(logfd, 1) + os.dup2(logfd, 2) -+ try: -+ os.chdir(xenpaging_dir) -+ except: -+ log.warn("chdir %s failed" % xenpaging_dir) ++ os.chdir(self.xenpaging_workdir) + try: + log.info("starting %s" % args) + os.execve(xenpaging_bin, args, env) + except Exception, e: -+ print >>sys.stderr, ( -+ 'failed to execute xenpaging: %s: %s' % -+ xenpaging_bin, utils.exception_string(e)) ++ log.warn('failed to execute xenpaging: %s' % utils.exception_string(e)) + os._exit(126) -+ except Exception, e: -+ log.warn("staring xenpaging in %s failed" % xenpaging_dir) ++ except: ++ log.warn("starting xenpaging in %s failed" % self.xenpaging_workdir) + os._exit(127) + else: + osdep.postfork(contract, abandon=True) @@ -253,38 +282,56 @@ Index: xen-4.0.2-testing/tools/python/xen/xend/image.py def createDeviceModel(self, restore = False): if self.device_model is None: return -Index: xen-4.0.2-testing/tools/python/xen/xm/create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/create.py =================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xm/create.py -+++ xen-4.0.2-testing/tools/python/xen/xm/create.py -@@ -495,6 +495,10 @@ gopts.var('nfs_root', val="PATH", +--- xen-4.1.1-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/create.py +@@ -495,6 +495,22 @@ gopts.var('nfs_root', val="PATH", fn=set_value, default=None, use="Set the path of the root NFS directory.") +gopts.var('xenpaging', val='NUM', + fn=set_value, default='0', + use="Number of pages to swap.") ++ ++gopts.var('xenpaging_workdir', val='PATH', ++ fn=set_value, default='/var/lib/xen/xenpaging', ++ use="Number of pages to swap.") ++ ++gopts.var('xenpaging_debug', val='NUM', ++ fn=set_value, default='0', ++ use="Number of pages to swap.") ++ ++gopts.var('xenpaging_policy_mru_size', val='NUM', ++ fn=set_value, default='0', ++ use="Number of pages to swap.") + gopts.var('device_model', val='FILE', fn=set_value, default=None, use="Path to device model program.") -@@ -1080,6 +1084,7 @@ def configure_hvm(config_image, vals): +@@ -1080,6 +1096,10 @@ def configure_hvm(config_image, vals): args = [ 'acpi', 'apic', 'boot', 'cpuid', 'cpuid_check', + 'xenpaging', ++ 'xenpaging_workdir', ++ 'xenpaging_debug', ++ 'xenpaging_policy_mru_size', 'device_model', 'display', 'fda', 'fdb', 'gfx_passthru', 'guest_os_type', -Index: xen-4.0.2-testing/tools/python/xen/xm/xenapi_create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/xenapi_create.py =================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xm/xenapi_create.py -+++ xen-4.0.2-testing/tools/python/xen/xm/xenapi_create.py -@@ -1085,6 +1085,7 @@ class sxp2xml: +--- xen-4.1.1-testing.orig/tools/python/xen/xm/xenapi_create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/xenapi_create.py +@@ -1085,6 +1085,10 @@ class sxp2xml: 'acpi', 'apic', 'boot', + 'xenpaging', ++ 'xenpaging_workdir', ++ 'xenpaging_debug', ++ 'xenpaging_policy_mru_size', 'device_model', 'loader', 'fda', diff --git a/xenpaging.autostart_delay.patch b/xenpaging.autostart_delay.patch deleted file mode 100644 index 81ca91b..0000000 --- a/xenpaging.autostart_delay.patch +++ /dev/null @@ -1,85 +0,0 @@ -Subject: xenpaging: add dynamic startup delay for xenpaging - -This is a debug helper. Since the xenpaging support is still fragile, run -xenpaging at different stages in the bootprocess. Different delays will trigger -more bugs. This implementation starts without delay for 5 reboots, then -increments the delay by 0.1 seconds It uses xenstore for presistant storage of -delay values - -TODO: find the correct place to remove the xenstore directory when the guest is shutdown or crashed - -Signed-off-by: Olaf Hering - ---- - tools/python/xen/xend/image.py | 33 +++++++++++++++++++++++++++++++++ - 1 file changed, 33 insertions(+) - -Index: xen-4.0.2-testing/tools/python/xen/xend/image.py -=================================================================== ---- xen-4.0.2-testing.orig/tools/python/xen/xend/image.py -+++ xen-4.0.2-testing/tools/python/xen/xend/image.py -@@ -123,6 +123,19 @@ class ImageHandler: - - self.device_model = vmConfig['platform'].get('device_model') - self.xenpaging = vmConfig['platform'].get('xenpaging') -+ if self.xenpaging is not "0": -+ self.xenpaging_delay = xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label']) -+ if self.xenpaging_delay == None: -+ log.warn("XXX creating /local/domain/0/xenpaging/%s" % self.vm.info['name_label']) -+ xstransact.Mkdir("/local/domain/0/xenpaging/%s" % self.vm.info['name_label']) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay', '0.0')) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_inc', '0.1')) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_use', '5')) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_used', '0')) -+ self.xenpaging_delay = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay" % self.vm.info['name_label'])) -+ self.xenpaging_delay_inc = float(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_inc" % self.vm.info['name_label'])) -+ self.xenpaging_delay_use = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_use" % self.vm.info['name_label'])) -+ self.xenpaging_delay_used = int(xstransact.Read("/local/domain/0/xenpaging/%s/xenpaging_delay_used" % self.vm.info['name_label'])) - - self.display = vmConfig['platform'].get('display') - self.xauthority = vmConfig['platform'].get('xauthority') -@@ -399,6 +412,17 @@ class ImageHandler: - return - if self.xenpaging_pid: - return -+ if self.xenpaging_delay_used < self.xenpaging_delay_use: -+ self.xenpaging_delay_used += 1 -+ else: -+ self.xenpaging_delay_used = 0 -+ self.xenpaging_delay += self.xenpaging_delay_inc -+ log.info("delay_used %s" % self.xenpaging_delay_used) -+ log.info("delay_use %s" % self.xenpaging_delay_use) -+ log.info("delay %s" % self.xenpaging_delay) -+ log.info("delay_inc %s" % self.xenpaging_delay_inc) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay', self.xenpaging_delay)) -+ xstransact.Store("/local/domain/0/xenpaging/%s" % self.vm.info['name_label'], ('xenpaging_delay_used', self.xenpaging_delay_used)) - xenpaging_bin = auxbin.pathTo("xenpaging") - args = [xenpaging_bin] - args = args + ([ "%d" % self.vm.getDomid()]) -@@ -427,6 +451,9 @@ class ImageHandler: - except: - log.warn("chdir %s failed" % xenpaging_dir) - try: -+ if self.xenpaging_delay != 0.0: -+ log.info("delaying xenpaging startup %s seconds ..." % self.xenpaging_delay) -+ time.sleep(self.xenpaging_delay) - log.info("starting %s" % args) - os.execve(xenpaging_bin, args, env) - except Exception, e: -@@ -442,10 +469,16 @@ class ImageHandler: - self.xenpaging_pid = xenpaging_pid - os.close(null) - os.close(logfd) -+ if self.xenpaging_delay == 0.0: -+ log.warn("waiting for xenpaging ...") -+ time.sleep(22) -+ log.warn("waiting for xenpaging done.") - - def destroyXenPaging(self): - if self.xenpaging == "0": - return -+ # FIXME find correct place for guest shutdown or crash -+ #xstransact.Remove("/local/domain/0/xenpaging/%s" % self.vm.info['name_label']) - if self.xenpaging_pid: - try: - os.kill(self.xenpaging_pid, signal.SIGHUP) diff --git a/xenpaging.blacklist.patch b/xenpaging.blacklist.patch deleted file mode 100644 index f870f39..0000000 --- a/xenpaging.blacklist.patch +++ /dev/null @@ -1,29 +0,0 @@ -Subject: xenpaging: prevent page-out of first 16MB - -This is more a workaround than a bugfix: -Don't page out first 16MB of memory. -When the BIOS does its initialization process and xenpaging removes pages, -crashes will occour due to lack of support of xenpaging. - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/policy_default.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/policy_default.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy_default.c -+++ xen-4.0.2-testing/tools/xenpaging/policy_default.c -@@ -60,8 +60,9 @@ int policy_init(xenpaging_t *paging) - for ( i = 0; i < MRU_SIZE; i++ ) - mru[i] = INVALID_MFN; - -- /* Don't page out page 0 */ -- set_bit(0, bitmap); -+ /* Don't page out first 16MB */ -+ for ( i = 0; i < ((16*1024*1024)/4096); i++ ) -+ set_bit(i, bitmap); - - out: - return rc; diff --git a/xenpaging.catch-xc_mem_paging_resume-error.patch b/xenpaging.catch-xc_mem_paging_resume-error.patch new file mode 100644 index 0000000..ea32e12 --- /dev/null +++ b/xenpaging.catch-xc_mem_paging_resume-error.patch @@ -0,0 +1,27 @@ +xenpaging: catch xc_mem_paging_resume errors + +In the unlikely event that xc_mem_paging_resume() fails, do not overwrite the +error with the return value from xc_evtchn_notify() + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -405,8 +405,9 @@ static int xenpaging_resume_page(xenpagi + /* Tell Xen page is ready */ + ret = xc_mem_paging_resume(paging->xc_handle, paging->mem_event.domain_id, + rsp->gfn); +- ret = xc_evtchn_notify(paging->mem_event.xce_handle, +- paging->mem_event.port); ++ if ( ret == 0 ) ++ ret = xc_evtchn_notify(paging->mem_event.xce_handle, ++ paging->mem_event.port); + + out: + return ret; diff --git a/xenpaging.doc.patch b/xenpaging.doc.patch deleted file mode 100644 index dd3a287..0000000 --- a/xenpaging.doc.patch +++ /dev/null @@ -1,63 +0,0 @@ -Subject: xenpaging: (sparse) documenation - -Write up some sparse documentation about xenpaging usage. - -Signed-off-by: Olaf Hering - ---- - docs/misc/xenpaging.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - -Index: xen-4.0.2-testing/docs/misc/xenpaging.txt -=================================================================== ---- /dev/null -+++ xen-4.0.2-testing/docs/misc/xenpaging.txt -@@ -0,0 +1,48 @@ -+Warning: -+ -+The xenpaging code is new and not fully debugged. -+Usage of xenpaging can crash Xen or cause severe data corruption in the -+guest memory and its filesystems! -+ -+Description: -+ -+xenpaging writes memory pages of a given guest to a file and moves the -+pages back to the pool of available memory. Once the guests wants to -+access the paged-out memory, the page is read from disk and placed into -+memory. This allows the sum of all running guests to use more memory -+than physically available on the host. -+ -+Usage: -+ -+Once the guest is running, run xenpaging with the guest_id and the -+number of pages to page-out: -+ -+ chdir /var/lib/xen/xenpaging -+ xenpaging -+ -+To obtain the guest_id, run 'xm list'. -+xenpaging will write the pagefile to the current directory. -+Example with 128MB pagefile on guest 1: -+ -+ xenpaging 1 32768 -+ -+Caution: stopping xenpaging manually will cause the guest to stall or -+crash because the paged-out memory is not written back into the guest! -+ -+After a reboot of a guest, its guest_id changes, the current xenpaging -+binary has no target anymore. To automate restarting of xenpaging after -+guest reboot, specify the number if pages in the guest configuration -+file /etc/xen/vm/: -+ -+xenpaging=32768 -+ -+Redo the guest with 'xm create /etc/xen/vm/' to activate the -+changes. -+ -+ -+Todo: -+- implement stopping of xenpaging -+- implement live migration -+ -+ -+# vim: tw=72 diff --git a/xenpaging.get_paged_frame.patch b/xenpaging.get_paged_frame.patch deleted file mode 100644 index e125505..0000000 --- a/xenpaging.get_paged_frame.patch +++ /dev/null @@ -1,174 +0,0 @@ -Subject: xenpaging: page-in granttable entries - -When converting a gfn to mfn, check if the page is paged-out. -If it is, request a page-in and return GNTST_eagain to the caller -to indicate a retry of the hypercall is required. -This fixes granttable errors when xenpaging is enabled in the guest. - -(xen-unstable changeset: 22209:50c1cc209f8f) - -Signed-off-by: Olaf Hering -Already-Acked-by: Patrick Colp -Already-Acked-by: Keir Fraser - ---- - xen/common/grant_table.c | 94 ++++++++++++++++++++++++++++++----------------- - 1 file changed, 60 insertions(+), 34 deletions(-) - -Index: xen-4.0.2-testing/xen/common/grant_table.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/common/grant_table.c -+++ xen-4.0.2-testing/xen/common/grant_table.c -@@ -139,6 +139,37 @@ shared_entry_header(struct grant_table * - #define active_entry(t, e) \ - ((t)->active[(e)/ACGNT_PER_PAGE][(e)%ACGNT_PER_PAGE]) - -+/* Check if the page has been paged out */ -+static int __get_paged_frame(unsigned long gfn, unsigned long *frame, int readonly, struct domain *rd) -+{ -+ p2m_type_t p2mt; -+ mfn_t mfn; -+ int rc = GNTST_okay; -+ -+ if ( readonly ) -+ mfn = gfn_to_mfn(rd, gfn, &p2mt); -+ else -+ mfn = gfn_to_mfn_unshare(rd, gfn, &p2mt, 1); -+ -+ if ( p2m_is_valid(p2mt) ) -+ { -+ *frame = mfn_x(mfn); -+ if ( p2m_is_paging(p2mt) ) -+ { -+ if ( p2m_is_paged(p2mt) ) -+ p2m_mem_paging_populate(rd, gfn); -+ rc = GNTST_eagain; -+ } -+ } -+ else -+ { -+ *frame = INVALID_MFN; -+ rc = GNTST_bad_page; -+ } -+ -+ return rc; -+} -+ - static inline int - __get_maptrack_handle( - struct grant_table *t) -@@ -527,14 +558,16 @@ __gnttab_map_grant_ref( - - if ( !act->pin ) - { -+ unsigned long gfn; -+ unsigned long frame; -+ -+ gfn = sha1 ? sha1->frame : sha2->full_page.frame; -+ rc = __get_paged_frame(gfn, &frame, !!(op->flags & GNTMAP_readonly), rd); -+ if ( rc != GNTST_okay ) -+ goto unlock_out; -+ act->gfn = gfn; - act->domid = ld->domain_id; -- if ( sha1 ) -- act->gfn = sha1->frame; -- else -- act->gfn = sha2->full_page.frame; -- act->frame = (op->flags & GNTMAP_readonly) ? -- gmfn_to_mfn(rd, act->gfn) : -- gfn_to_mfn_private(rd, act->gfn); -+ act->frame = frame; - act->start = 0; - act->length = PAGE_SIZE; - act->is_sub_page = 0; -@@ -1697,6 +1730,7 @@ __acquire_grant_for_copy( - domid_t trans_domid; - grant_ref_t trans_gref; - struct domain *rrd; -+ unsigned long gfn; - unsigned long grant_frame; - unsigned trans_page_off; - unsigned trans_length; -@@ -1814,9 +1848,11 @@ __acquire_grant_for_copy( - } - else if ( sha1 ) - { -- act->gfn = sha1->frame; -- grant_frame = readonly ? gmfn_to_mfn(rd, act->gfn) : -- gfn_to_mfn_private(rd, act->gfn); -+ gfn = sha1->frame; -+ rc = __get_paged_frame(gfn, &grant_frame, readonly, rd); -+ if ( rc != GNTST_okay ) -+ goto unlock_out; -+ act->gfn = gfn; - is_sub_page = 0; - trans_page_off = 0; - trans_length = PAGE_SIZE; -@@ -1824,9 +1860,11 @@ __acquire_grant_for_copy( - } - else if ( !(sha2->hdr.flags & GTF_sub_page) ) - { -- act->gfn = sha2->full_page.frame; -- grant_frame = readonly ? gmfn_to_mfn(rd, act->gfn) : -- gfn_to_mfn_private(rd, act->gfn); -+ gfn = sha2->full_page.frame; -+ rc = __get_paged_frame(gfn, &grant_frame, readonly, rd); -+ if ( rc != GNTST_okay ) -+ goto unlock_out; -+ act->gfn = gfn; - is_sub_page = 0; - trans_page_off = 0; - trans_length = PAGE_SIZE; -@@ -1834,9 +1872,11 @@ __acquire_grant_for_copy( - } - else - { -- act->gfn = sha2->sub_page.frame; -- grant_frame = readonly ? gmfn_to_mfn(rd, act->gfn) : -- gfn_to_mfn_private(rd, act->gfn); -+ gfn = sha2->sub_page.frame; -+ rc = __get_paged_frame(gfn, &grant_frame, readonly, rd); -+ if ( rc != GNTST_okay ) -+ goto unlock_out; -+ act->gfn = gfn; - is_sub_page = 1; - trans_page_off = sha2->sub_page.page_off; - trans_length = sha2->sub_page.length; -@@ -1932,16 +1972,9 @@ __gnttab_copy( - else - { - #ifdef CONFIG_X86 -- p2m_type_t p2mt; -- s_frame = mfn_x(gfn_to_mfn(sd, op->source.u.gmfn, &p2mt)); -- if ( !p2m_is_valid(p2mt) ) -- s_frame = INVALID_MFN; -- if ( p2m_is_paging(p2mt) ) -- { -- p2m_mem_paging_populate(sd, op->source.u.gmfn); -- rc = -ENOENT; -+ rc = __get_paged_frame(op->source.u.gmfn, &s_frame, 1, sd); -+ if ( rc != GNTST_okay ) - goto error_out; -- } - #else - s_frame = gmfn_to_mfn(sd, op->source.u.gmfn); - #endif -@@ -1978,16 +2011,9 @@ __gnttab_copy( - else - { - #ifdef CONFIG_X86 -- p2m_type_t p2mt; -- d_frame = mfn_x(gfn_to_mfn_unshare(dd, op->dest.u.gmfn, &p2mt, 1)); -- if ( !p2m_is_valid(p2mt) ) -- d_frame = INVALID_MFN; -- if ( p2m_is_paging(p2mt) ) -- { -- p2m_mem_paging_populate(dd, op->dest.u.gmfn); -- rc = -ENOENT; -+ rc = __get_paged_frame(op->dest.u.gmfn, &d_frame, 0, dd); -+ if ( rc != GNTST_okay ) - goto error_out; -- } - #else - d_frame = gmfn_to_mfn(dd, op->dest.u.gmfn); - #endif diff --git a/xenpaging.guest_remove_page.patch b/xenpaging.guest_remove_page.patch deleted file mode 100644 index e4b00d6..0000000 --- a/xenpaging.guest_remove_page.patch +++ /dev/null @@ -1,191 +0,0 @@ -Subject: xenpaging: drop paged pages in guest_remove_page - -Simply drop paged-pages in guest_remove_page(), and notify xenpaging to -drop reference to the gfn. - -(xen-unstable changeset: 22705:c5b42971234a) - -Signed-off-by: Olaf Hering ---- -v2: - resume dropped page to unpause vcpus - - tools/xenpaging/xenpaging.c | 17 +++++++--- - xen/arch/x86/mm/p2m.c | 65 +++++++++++++++++++++++++++++++---------- - xen/common/memory.c | 6 +++ - xen/include/asm-x86/p2m.h | 4 ++ - xen/include/public/mem_event.h | 1 - 5 files changed, 73 insertions(+), 20 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -601,12 +601,19 @@ int main(int argc, char *argv[]) - goto out; - } - -- /* Populate the page */ -- rc = xenpaging_populate_page(paging, &req.gfn, fd, i); -- if ( rc != 0 ) -+ if ( req.flags & MEM_EVENT_FLAG_DROP_PAGE ) - { -- ERROR("Error populating page"); -- goto out; -+ DPRINTF("Dropping page %"PRIx64" p2mt %x\n", req.gfn, req.p2mt); -+ } -+ else -+ { -+ /* Populate the page */ -+ rc = xenpaging_populate_page(paging, &req.gfn, fd, i); -+ if ( rc != 0 ) -+ { -+ ERROR("Error populating page"); -+ goto out; -+ } - } - - /* Prepare the response */ -Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -@@ -2011,12 +2011,15 @@ p2m_remove_page(struct domain *d, unsign - - P2M_DEBUG("removing gfn=%#lx mfn=%#lx\n", gfn, mfn); - -- for ( i = 0; i < (1UL << page_order); i++ ) -+ if ( mfn_valid(_mfn(mfn)) ) - { -- mfn_return = d->arch.p2m->get_entry(d, gfn + i, &t, p2m_query); -- if ( !p2m_is_grant(t) ) -- set_gpfn_from_mfn(mfn+i, INVALID_M2P_ENTRY); -- ASSERT( !p2m_is_valid(t) || mfn + i == mfn_x(mfn_return) ); -+ for ( i = 0; i < (1UL << page_order); i++ ) -+ { -+ mfn_return = d->arch.p2m->get_entry(d, gfn + i, &t, p2m_query); -+ if ( !p2m_is_grant(t) ) -+ set_gpfn_from_mfn(mfn+i, INVALID_M2P_ENTRY); -+ ASSERT( !p2m_is_valid(t) || mfn + i == mfn_x(mfn_return) ); -+ } - } - set_p2m_entry(d, gfn, _mfn(INVALID_MFN), page_order, p2m_invalid); - } -@@ -2540,6 +2543,35 @@ int p2m_mem_paging_evict(struct domain * - return 0; - } - -+void p2m_mem_paging_drop_page(struct domain *d, unsigned long gfn) -+{ -+ struct vcpu *v = current; -+ mem_event_request_t req; -+ p2m_type_t p2mt; -+ -+ memset(&req, 0, sizeof(req)); -+ -+ /* Check that there's space on the ring for this request */ -+ if ( mem_event_check_ring(d) ) -+ return; -+ -+ gfn_to_mfn(d, gfn, &p2mt); -+ /* Pause domain */ -+ if ( v->domain->domain_id == d->domain_id ) -+ { -+ vcpu_pause_nosync(v); -+ req.flags |= MEM_EVENT_FLAG_VCPU_PAUSED; -+ } -+ -+ /* Send request to pager */ -+ req.flags |= MEM_EVENT_FLAG_DROP_PAGE; -+ req.gfn = gfn; -+ req.p2mt = p2mt; -+ req.vcpu_id = v->vcpu_id; -+ -+ mem_event_put_request(d, &req); -+} -+ - void p2m_mem_paging_populate(struct domain *d, unsigned long gfn) - { - struct vcpu *v = current; -@@ -2604,17 +2636,20 @@ void p2m_mem_paging_resume(struct domain - /* Pull the response off the ring */ - mem_event_get_response(d, &rsp); - -- /* Fix p2m entry */ -- mfn = gfn_to_mfn(d, rsp.gfn, &p2mt); -- if ( mfn_valid(mfn) ) -+ if ( !( rsp.flags & MEM_EVENT_FLAG_DROP_PAGE ) ) - { -- p2m_lock(d->arch.p2m); -- set_p2m_entry(d, rsp.gfn, mfn, 0, p2m_ram_rw); -- set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn); -- p2m_unlock(d->arch.p2m); -- } else { -- gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n", -- mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags); -+ /* Fix p2m entry */ -+ mfn = gfn_to_mfn(d, rsp.gfn, &p2mt); -+ if ( mfn_valid(mfn) ) -+ { -+ p2m_lock(d->arch.p2m); -+ set_p2m_entry(d, rsp.gfn, mfn, 0, p2m_ram_rw); -+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn); -+ p2m_unlock(d->arch.p2m); -+ } else { -+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n", -+ mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags); -+ } - } - - /* Unpause domain */ -Index: xen-4.0.2-testing/xen/common/memory.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/common/memory.c -+++ xen-4.0.2-testing/xen/common/memory.c -@@ -162,6 +162,12 @@ int guest_remove_page(struct domain *d, - - #ifdef CONFIG_X86 - mfn = mfn_x(gfn_to_mfn(d, gmfn, &p2mt)); -+ if ( unlikely(p2m_is_paging(p2mt)) ) -+ { -+ guest_physmap_remove_page(d, gmfn, mfn, 0); -+ p2m_mem_paging_drop_page(d, gmfn); -+ return 1; -+ } - #else - mfn = gmfn_to_mfn(d, gmfn); - #endif -Index: xen-4.0.2-testing/xen/include/asm-x86/p2m.h -=================================================================== ---- xen-4.0.2-testing.orig/xen/include/asm-x86/p2m.h -+++ xen-4.0.2-testing/xen/include/asm-x86/p2m.h -@@ -441,6 +441,8 @@ int set_shared_p2m_entry(struct domain * - int p2m_mem_paging_nominate(struct domain *d, unsigned long gfn); - /* Evict a frame */ - int p2m_mem_paging_evict(struct domain *d, unsigned long gfn); -+/* Tell xenpaging to drop a paged out frame */ -+void p2m_mem_paging_drop_page(struct domain *d, unsigned long gfn); - /* Start populating a paged out frame */ - void p2m_mem_paging_populate(struct domain *d, unsigned long gfn); - /* Prepare the p2m for paging a frame in */ -@@ -448,6 +450,8 @@ int p2m_mem_paging_prep(struct domain *d - /* Resume normal operation (in case a domain was paused) */ - void p2m_mem_paging_resume(struct domain *d); - #else -+static inline void p2m_mem_paging_drop_page(struct domain *d, unsigned long gfn) -+{ } - static inline void p2m_mem_paging_populate(struct domain *d, unsigned long gfn) - { } - #endif -Index: xen-4.0.2-testing/xen/include/public/mem_event.h -=================================================================== ---- xen-4.0.2-testing.orig/xen/include/public/mem_event.h -+++ xen-4.0.2-testing/xen/include/public/mem_event.h -@@ -37,6 +37,7 @@ - #define MEM_EVENT_FLAG_VCPU_PAUSED (1 << 0) - #define MEM_EVENT_FLAG_DOM_PAUSED (1 << 1) - #define MEM_EVENT_FLAG_OUT_OF_MEM (1 << 2) -+#define MEM_EVENT_FLAG_DROP_PAGE (1 << 3) - - - typedef struct mem_event_shared_page { diff --git a/xenpaging.guest_remove_page.slow_path.patch b/xenpaging.guest_remove_page.slow_path.patch new file mode 100644 index 0000000..2becd14 --- /dev/null +++ b/xenpaging.guest_remove_page.slow_path.patch @@ -0,0 +1,52 @@ +xenpaging: correct dropping pages to avoid full ring buffer + +Doing a one-way channel from Xen to xenpaging is not possible with the +current ring buffer implementation. xenpaging uses the mem_event ring +buffer, which expects request/response pairs to make progress. The +previous patch, which tried to establish a one-way communication from +Xen to xenpaging, stalled the guest once the buffer was filled up with +requests. Correct page-dropping by taking the slow path and let +p2m_mem_paging_resume() consume the response from xenpaging. This makes +room for yet another request/response pair and avoids hanging guests. + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -653,19 +653,19 @@ int main(int argc, char *argv[]) + ERROR("Error populating page"); + goto out; + } ++ } + +- /* Prepare the response */ +- rsp.gfn = req.gfn; +- rsp.p2mt = req.p2mt; +- rsp.vcpu_id = req.vcpu_id; +- rsp.flags = req.flags; ++ /* Prepare the response */ ++ rsp.gfn = req.gfn; ++ rsp.p2mt = req.p2mt; ++ rsp.vcpu_id = req.vcpu_id; ++ rsp.flags = req.flags; + +- rc = xenpaging_resume_page(paging, &rsp, 1); +- if ( rc != 0 ) +- { +- ERROR("Error resuming page"); +- goto out; +- } ++ rc = xenpaging_resume_page(paging, &rsp, 1); ++ if ( rc != 0 ) ++ { ++ ERROR("Error resuming page"); ++ goto out; + } + + /* Evict a new page to replace the one we just paged in */ diff --git a/xenpaging.machine_to_phys_mapping.patch b/xenpaging.machine_to_phys_mapping.patch deleted file mode 100644 index 3bcb8e4..0000000 --- a/xenpaging.machine_to_phys_mapping.patch +++ /dev/null @@ -1,86 +0,0 @@ -Subject: xenpaging: update machine_to_phys_mapping during page-in and page deallocation - -The machine_to_phys_mapping array needs updating during page-in, and -during page deallocation. If a page is gone, a call to -get_gpfn_from_mfn will still return the old gfn for an already paged-out -page. This happens when the entire guest ram is paged-out before -xen_vga_populate_vram() runs. Then XENMEM_populate_physmap is called -with gfn 0xff000. A new page is allocated with alloc_domheap_pages. -This new page does not have a gfn yet. However, in -guest_physmap_add_entry() the passed mfn maps still to an old gfn -(perhaps from another old guest). This old gfn is in paged-out state in -this guests context and has no mfn anymore. As a result, the ASSERT() -triggers because p2m_is_ram() is true for p2m_ram_paging* types. - -If the machine_to_phys_mapping array is updated properly, both loops in -guest_physmap_add_entry() turn into no-ops for the new page and the -mfn/gfn mapping will be done at the end of the function. - -The same thing needs to happen dring a page-in, the current gfn must be -written for the page. - -If XENMEM_add_to_physmap is used with XENMAPSPACE_gmfn, -get_gpfn_from_mfn() will return an appearently valid gfn. As a result, -guest_physmap_remove_page() is called. The ASSERT in p2m_remove_page -triggers because the passed mfn does not match the old mfn for the -passed gfn. - -Signed-off-by: Olaf Hering - ---- -v3: - invalidate machine_to_phys_mapping[] during page deallocation -v2: - call set_gpfn_from_mfn only if mfn is valid - - xen/arch/x86/mm/p2m.c | 13 ++++++++++--- - xen/common/page_alloc.c | 9 +++++++++ - 2 files changed, 19 insertions(+), 3 deletions(-) - -Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -@@ -2606,9 +2606,16 @@ void p2m_mem_paging_resume(struct domain - - /* Fix p2m entry */ - mfn = gfn_to_mfn(d, rsp.gfn, &p2mt); -- p2m_lock(d->arch.p2m); -- set_p2m_entry(d, rsp.gfn, mfn, 0, p2m_ram_rw); -- p2m_unlock(d->arch.p2m); -+ if ( mfn_valid(mfn) ) -+ { -+ p2m_lock(d->arch.p2m); -+ set_p2m_entry(d, rsp.gfn, mfn, 0, p2m_ram_rw); -+ set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn); -+ p2m_unlock(d->arch.p2m); -+ } else { -+ gdprintk(XENLOG_ERR, "invalid mfn %lx for gfn %lx p2mt %x flags %lx\n", -+ mfn_x(mfn), rsp.gfn, p2mt, (unsigned long)rsp.flags); -+ } - - /* Unpause domain */ - if ( rsp.flags & MEM_EVENT_FLAG_VCPU_PAUSED ) -Index: xen-4.0.2-testing/xen/common/page_alloc.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/common/page_alloc.c -+++ xen-4.0.2-testing/xen/common/page_alloc.c -@@ -1178,9 +1178,18 @@ void free_domheap_pages(struct page_info - { - int i, drop_dom_ref; - struct domain *d = page_get_owner(pg); -+ unsigned long mfn; - - ASSERT(!in_irq()); - -+ /* this page is not a gfn anymore */ -+ mfn = page_to_mfn(pg); -+ if ( mfn_valid(mfn) ) -+ { -+ for ( i = 0; i < (1 << order); i++ ) -+ set_gpfn_from_mfn(mfn + i, INVALID_M2P_ENTRY); -+ } -+ - if ( unlikely(is_xen_heap_page(pg)) ) - { - /* NB. May recursively lock from relinquish_memory(). */ diff --git a/xenpaging.makefile.patch b/xenpaging.makefile.patch deleted file mode 100644 index c60774c..0000000 --- a/xenpaging.makefile.patch +++ /dev/null @@ -1,19 +0,0 @@ -(xen-unstable changeset: 21972:d3de6f484610) - ---- - tools/xenpaging/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: xen-4.0.2-testing/tools/xenpaging/Makefile -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/Makefile -+++ xen-4.0.2-testing/tools/xenpaging/Makefile -@@ -27,7 +27,7 @@ IBINS = xenpaging - all: $(IBINS) - - xenpaging: $(OBJS) -- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ -+ $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) - - install: all - $(INSTALL_DIR) $(DESTDIR)$(SBINDIR) diff --git a/xenpaging.mem_event-no-p2mt.patch b/xenpaging.mem_event-no-p2mt.patch new file mode 100644 index 0000000..0383a44 --- /dev/null +++ b/xenpaging.mem_event-no-p2mt.patch @@ -0,0 +1,57 @@ +xenpaging: do not bounce p2mt to xenpaging + +Do not bounce p2mt to xenpaging because p2m_mem_paging_populate and +p2m_mem_paging_resume dont make use of p2mt. Only pages of type +p2m_ram_rw will be paged-out, and during page-in this type has to be +restored. + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 4 ---- + xen/arch/x86/mm/p2m.c | 1 - + 2 files changed, 5 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -657,7 +657,6 @@ int main(int argc, char *argv[]) + + /* Prepare the response */ + rsp.gfn = req.gfn; +- rsp.p2mt = req.p2mt; + rsp.vcpu_id = req.vcpu_id; + rsp.flags = req.flags; + +@@ -674,10 +673,8 @@ int main(int argc, char *argv[]) + else + { + DPRINTF("page already populated (domain = %d; vcpu = %d;" +- " p2mt = %x;" + " gfn = %"PRIx64"; paused = %d)\n", + paging->mem_event.domain_id, req.vcpu_id, +- req.p2mt, + req.gfn, req.flags & MEM_EVENT_FLAG_VCPU_PAUSED); + + /* Tell Xen to resume the vcpu */ +@@ -686,7 +683,6 @@ int main(int argc, char *argv[]) + { + /* Prepare the response */ + rsp.gfn = req.gfn; +- rsp.p2mt = req.p2mt; + rsp.vcpu_id = req.vcpu_id; + rsp.flags = req.flags; + +Index: xen-4.1.1-testing/xen/arch/x86/mm/p2m.c +=================================================================== +--- xen-4.1.1-testing.orig/xen/arch/x86/mm/p2m.c ++++ xen-4.1.1-testing/xen/arch/x86/mm/p2m.c +@@ -2975,7 +2975,6 @@ void p2m_mem_paging_populate(struct p2m_ + + /* Send request to pager */ + req.gfn = gfn; +- req.p2mt = p2mt; + req.vcpu_id = v->vcpu_id; + + mem_event_put_request(d, &req); diff --git a/xenpaging.mem_event_check_ring-free_requests.patch b/xenpaging.mem_event_check_ring-free_requests.patch deleted file mode 100644 index 5e6f760..0000000 --- a/xenpaging.mem_event_check_ring-free_requests.patch +++ /dev/null @@ -1,29 +0,0 @@ -Subject: xenpaging: print info when free request slots drop below 2 - -Add debugging aid to free request slots in the ring buffer. -It should not happen that the ring gets full, print info anyway if it happens. - -(xen-unstable changeset: 22439:3bbb3969236c) - -Signed-off-by: Olaf Hering - ---- - xen/arch/x86/mm/mem_event.c | 5 +++++ - 1 file changed, 5 insertions(+) - -Index: xen-4.0.2-testing/xen/arch/x86/mm/mem_event.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/mem_event.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/mem_event.c -@@ -152,6 +152,11 @@ int mem_event_check_ring(struct domain * - mem_event_ring_lock(d); - - free_requests = RING_FREE_REQUESTS(&d->mem_event.front_ring); -+ if ( unlikely(free_requests < 2) ) -+ { -+ gdprintk(XENLOG_INFO, "free request slots: %d\n", free_requests); -+ WARN_ON(free_requests == 0); -+ } - ring_full = free_requests < MEM_EVENT_RING_THRESHOLD; - - if ( (curr->domain->domain_id == d->domain_id) && ring_full ) diff --git a/xenpaging.mem_paging_tool_qemu_flush_cache.patch b/xenpaging.mem_paging_tool_qemu_flush_cache.patch deleted file mode 100644 index d1185ff..0000000 --- a/xenpaging.mem_paging_tool_qemu_flush_cache.patch +++ /dev/null @@ -1,31 +0,0 @@ -Subject: xenpaging/qemu-dm: add command to flush buffer cache. - -Add support for a xenstore dm command to flush qemu's buffer cache. - -qemu will just keep mapping pages and not release them, which causes problems -for the memory pager (since the page is mapped, it won't get paged out). When -the pager has trouble finding a page to page out, it asks qemu to flush its -buffer, which releases all the page mappings. This makes it possible to find -pages to swap out agian. - -Already-Signed-off-by: Patrick Colp -Signed-off-by: Olaf Hering - ---- - tools/ioemu-qemu-xen/xenstore.c | 3 +++ - 1 file changed, 3 insertions(+) - -Index: xen-4.0.2-testing/tools/ioemu-qemu-xen/xenstore.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/ioemu-qemu-xen/xenstore.c -+++ xen-4.0.2-testing/tools/ioemu-qemu-xen/xenstore.c -@@ -1025,6 +1025,9 @@ static void xenstore_process_dm_command_ - do_pci_add(par); - free(par); - #endif -+ } else if (!strncmp(command, "flush-cache", len)) { -+ fprintf(logfile, "dm-command: flush caches\n"); -+ qemu_invalidate_map_cache(); - } else { - fprintf(logfile, "dm-command: unknown command\"%*s\"\n", len, command); - } diff --git a/xenpaging.no-srand.patch b/xenpaging.no-srand.patch new file mode 100644 index 0000000..5a9e5ab --- /dev/null +++ b/xenpaging.no-srand.patch @@ -0,0 +1,25 @@ +xenpaging: remove srand call + +The policy uses now a linear algorithm instead of a random one. +Remove the call to srand(). + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 3 --- + 1 file changed, 3 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -544,9 +544,6 @@ int main(int argc, char *argv[]) + domain_id = atoi(argv[1]); + num_pages = atoi(argv[2]); + +- /* Seed random-number generator */ +- srand(time(NULL)); +- + /* Initialise domain paging */ + paging = xenpaging_init(domain_id); + if ( paging == NULL ) diff --git a/xenpaging.no_domain_id.patch b/xenpaging.no_domain_id.patch deleted file mode 100644 index 9fa9034..0000000 --- a/xenpaging.no_domain_id.patch +++ /dev/null @@ -1,184 +0,0 @@ -Subject: xenpaging: remove domain_id and mfn from struct xenpaging_victim - -Remove unused mfn member from struct xenpaging_victim. -Remove domain_id from struct xenpaging_victim and use the one from -paging->mem_event where needed. Its not used in the policy. -This saves 4MB runtime data with a 1GB pagefile. - -(xen-unstable changeset: 22699:f84ae053b7da) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/policy.h | 7 +++---- - tools/xenpaging/policy_default.c | 10 +++------- - tools/xenpaging/xenpaging.c | 21 ++++++++++----------- - tools/xenpaging/xenpaging.h | 4 ---- - 4 files changed, 16 insertions(+), 26 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/policy.h -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy.h -+++ xen-4.0.2-testing/tools/xenpaging/policy.h -@@ -29,10 +29,9 @@ - - - int policy_init(xenpaging_t *paging); --int policy_choose_victim(xenpaging_t *paging, domid_t domain_id, -- xenpaging_victim_t *victim); --void policy_notify_paged_out(domid_t domain_id, unsigned long gfn); --void policy_notify_paged_in(domid_t domain_id, unsigned long gfn); -+int policy_choose_victim(xenpaging_t *paging, xenpaging_victim_t *victim); -+void policy_notify_paged_out(unsigned long gfn); -+void policy_notify_paged_in(unsigned long gfn); - - #endif // __XEN_PAGING_POLICY_H__ - -Index: xen-4.0.2-testing/tools/xenpaging/policy_default.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy_default.c -+++ xen-4.0.2-testing/tools/xenpaging/policy_default.c -@@ -68,15 +68,11 @@ int policy_init(xenpaging_t *paging) - return rc; - } - --int policy_choose_victim(xenpaging_t *paging, domid_t domain_id, -- xenpaging_victim_t *victim) -+int policy_choose_victim(xenpaging_t *paging, xenpaging_victim_t *victim) - { - unsigned long wrap = current_gfn; - ASSERT(victim != NULL); - -- /* Domain to pick on */ -- victim->domain_id = domain_id; -- - do - { - current_gfn++; -@@ -96,13 +92,13 @@ int policy_choose_victim(xenpaging_t *pa - return 0; - } - --void policy_notify_paged_out(domid_t domain_id, unsigned long gfn) -+void policy_notify_paged_out(unsigned long gfn) - { - set_bit(gfn, bitmap); - clear_bit(gfn, unconsumed); - } - --void policy_notify_paged_in(domid_t domain_id, unsigned long gfn) -+void policy_notify_paged_in(unsigned long gfn) - { - unsigned long old_gfn = mru[i_mru & (MRU_SIZE - 1)]; - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -344,7 +344,7 @@ int xenpaging_evict_page(xenpaging_t *pa - /* Map page */ - gfn = victim->gfn; - ret = -EFAULT; -- page = xc_map_foreign_pages(paging->xc_handle, victim->domain_id, -+ page = xc_map_foreign_pages(paging->xc_handle, paging->mem_event.domain_id, - PROT_READ | PROT_WRITE, &gfn, 1); - if ( page == NULL ) - { -@@ -376,7 +376,7 @@ int xenpaging_evict_page(xenpaging_t *pa - } - - /* Notify policy of page being paged out */ -- policy_notify_paged_out(paging->mem_event.domain_id, victim->gfn); -+ policy_notify_paged_out(victim->gfn); - - out: - return ret; -@@ -393,7 +393,7 @@ static int xenpaging_resume_page(xenpagi - - /* Notify policy of page being paged in */ - if ( notify_policy ) -- policy_notify_paged_in(paging->mem_event.domain_id, rsp->gfn); -+ policy_notify_paged_in(rsp->gfn); - - /* Tell Xen page is ready */ - ret = xc_mem_paging_resume(paging->xc_handle, paging->mem_event.domain_id, -@@ -459,7 +459,7 @@ static int xenpaging_populate_page( - return ret; - } - --static int evict_victim(xenpaging_t *paging, domid_t domain_id, -+static int evict_victim(xenpaging_t *paging, - xenpaging_victim_t *victim, int fd, int i) - { - int j = 0; -@@ -467,7 +467,7 @@ static int evict_victim(xenpaging_t *pag - - do - { -- ret = policy_choose_victim(paging, domain_id, victim); -+ ret = policy_choose_victim(paging, victim); - if ( ret != 0 ) - { - if ( ret != -ENOSPC ) -@@ -487,7 +487,7 @@ static int evict_victim(xenpaging_t *pag - else - { - if ( j++ % 1000 == 0 ) -- if ( xc_mem_paging_flush_ioemu_cache(domain_id) ) -+ if ( xc_mem_paging_flush_ioemu_cache(paging->mem_event.domain_id) ) - ERROR("Error flushing ioemu cache"); - } - } -@@ -570,7 +570,7 @@ int main(int argc, char *argv[]) - memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages); - for ( i = 0; i < num_pages; i++ ) - { -- rc = evict_victim(paging, domain_id, &victims[i], fd, i); -+ rc = evict_victim(paging, &victims[i], fd, i); - if ( rc == -ENOSPC ) - break; - if ( rc == -EINTR ) -@@ -611,8 +611,7 @@ int main(int argc, char *argv[]) - /* Find where in the paging file to read from */ - for ( i = 0; i < num_pages; i++ ) - { -- if ( (victims[i].domain_id == paging->mem_event.domain_id) && -- (victims[i].gfn == req.gfn) ) -+ if ( victims[i].gfn == req.gfn ) - break; - } - -@@ -625,6 +624,7 @@ int main(int argc, char *argv[]) - if ( req.flags & MEM_EVENT_FLAG_DROP_PAGE ) - { - DPRINTF("Dropping page %"PRIx64" p2mt %x\n", req.gfn, req.p2mt); -+ policy_notify_paged_out(req.gfn); - } - else - { -@@ -651,7 +651,7 @@ int main(int argc, char *argv[]) - } - - /* Evict a new page to replace the one we just paged in */ -- evict_victim(paging, domain_id, &victims[i], fd, i); -+ evict_victim(paging, &victims[i], fd, i); - } - else - { -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.h -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.h -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.h -@@ -49,12 +49,8 @@ typedef struct xenpaging { - - - typedef struct xenpaging_victim { -- /* the domain to evict a page from */ -- domid_t domain_id; - /* the gfn of the page to evict */ - unsigned long gfn; -- /* the mfn of evicted page */ -- unsigned long mfn; - } xenpaging_victim_t; - - diff --git a/xenpaging.notify_policy_only_once.patch b/xenpaging.notify_policy_only_once.patch deleted file mode 100644 index aecd726..0000000 --- a/xenpaging.notify_policy_only_once.patch +++ /dev/null @@ -1,59 +0,0 @@ -Subject: xenpaging: notify policy only on resume - -If a page is requested more than once, the policy is also notified more -than once about the page-in. However, a page-in happens only once. Any -further resume will only unpause the other vcpu. The multiple notify -will put the page into the mru list multiple times and it will unlock -other already resumed pages too early. In the worst case, a page that -was just resumed can be evicted right away, causing a deadlock in the -guest. - -(xen-unstable changeset: 22441:7d2c013727d7) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -381,7 +381,7 @@ int xenpaging_evict_page(xenpaging_t *pa - return ret; - } - --static int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp) -+static int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp, int notify_policy) - { - int ret; - -@@ -391,7 +391,8 @@ static int xenpaging_resume_page(xenpagi - goto out; - - /* Notify policy of page being paged in */ -- policy_notify_paged_in(paging->mem_event.domain_id, rsp->gfn); -+ if ( notify_policy ) -+ policy_notify_paged_in(paging->mem_event.domain_id, rsp->gfn); - - /* Tell Xen page is ready */ - ret = xc_mem_paging_resume(paging->xc_handle, paging->mem_event.domain_id, -@@ -622,7 +623,7 @@ int main(int argc, char *argv[]) - rsp.vcpu_id = req.vcpu_id; - rsp.flags = req.flags; - -- rc = xenpaging_resume_page(paging, &rsp); -+ rc = xenpaging_resume_page(paging, &rsp, 1); - if ( rc != 0 ) - { - ERROR("Error resuming page"); -@@ -651,7 +652,7 @@ int main(int argc, char *argv[]) - rsp.vcpu_id = req.vcpu_id; - rsp.flags = req.flags; - -- rc = xenpaging_resume_page(paging, &rsp); -+ rc = xenpaging_resume_page(paging, &rsp, 0); - if ( rc != 0 ) - { - ERROR("Error resuming"); diff --git a/xenpaging.num_pages_equal_max_pages.patch b/xenpaging.num_pages_equal_max_pages.patch deleted file mode 100644 index 3090f69..0000000 --- a/xenpaging.num_pages_equal_max_pages.patch +++ /dev/null @@ -1,41 +0,0 @@ -Subject: xenpaging: allow negative num_pages and limit num_pages - -Simplify paging size argument. If a negative number is specified, it -means the entire guest memory should be paged out. This is useful for -debugging. Also limit num_pages to the guests max_pages. - -(xen-unstable changeset: 22442:1793318b35e6) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -515,8 +515,6 @@ int main(int argc, char *argv[]) - domain_id = atoi(argv[1]); - num_pages = atoi(argv[2]); - -- victims = calloc(num_pages, sizeof(xenpaging_victim_t)); -- - /* Seed random-number generator */ - srand(time(NULL)); - -@@ -537,6 +535,13 @@ int main(int argc, char *argv[]) - return 2; - } - -+ if ( num_pages < 0 || num_pages > paging->domain_info->max_pages ) -+ { -+ num_pages = paging->domain_info->max_pages; -+ DPRINTF("setting num_pages to %d\n", num_pages); -+ } -+ victims = calloc(num_pages, sizeof(xenpaging_victim_t)); -+ - /* ensure that if we get a signal, we'll do cleanup, then exit */ - act.sa_handler = close_handler; - act.sa_flags = 0; diff --git a/xenpaging.optimize_p2m_mem_paging_populate.patch b/xenpaging.optimize_p2m_mem_paging_populate.patch deleted file mode 100644 index f43d6d9..0000000 --- a/xenpaging.optimize_p2m_mem_paging_populate.patch +++ /dev/null @@ -1,48 +0,0 @@ -Subject: xenpaging: optimize p2m_mem_paging_populate - -p2m_mem_paging_populate will always put another request in the ring. To -reduce pressure on the ring, place only required requests in the ring. -If the gfn was already processed by another thread, and the current vcpu -does not need to be paused, p2m_mem_paging_resume will do nothing with -the request. And also xenpaging will drop the request if the vcpu does -not need a wakeup. - -(xen-unstable changeset: 22444:7fe9cad00e15) - -Signed-off-by: Olaf Hering - ---- - xen/arch/x86/mm/p2m.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -@@ -2578,12 +2578,12 @@ void p2m_mem_paging_populate(struct doma - mem_event_request_t req; - p2m_type_t p2mt; - -- memset(&req, 0, sizeof(req)); -- - /* Check that there's space on the ring for this request */ - if ( mem_event_check_ring(d) ) - return; - -+ memset(&req, 0, sizeof(req)); -+ - /* Fix p2m mapping */ - /* XXX: It seems inefficient to have this here, as it's only needed - * in one case (ept guest accessing paging out page) */ -@@ -2601,6 +2601,11 @@ void p2m_mem_paging_populate(struct doma - vcpu_pause_nosync(v); - req.flags |= MEM_EVENT_FLAG_VCPU_PAUSED; - } -+ else if ( p2mt != p2m_ram_paging_out && p2mt != p2m_ram_paged ) -+ { -+ /* gfn is already on its way back and vcpu is not paused */ -+ return; -+ } - - /* Send request to pager */ - req.gfn = gfn; diff --git a/xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch b/xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch deleted file mode 100644 index ab94e69..0000000 --- a/xenpaging.p2m_mem_paging_populate_if_p2m_ram_paged.patch +++ /dev/null @@ -1,33 +0,0 @@ -Subject: xenpaging: when populating a page, check if populating is already in progress - -p2m_mem_paging_populate can be called serveral times from different -vcpus. If the page is already in state p2m_ram_paging_in and has a new -valid mfn, invalidating this new mfn will cause trouble later if -p2m_mem_paging_resume will set the new gfn/mfn pair back to state -p2m_ram_rw. -Detect this situation and change p2m state not if the page is in the -process of being still paged-out or already paged-in. -In fact, p2m state p2m_ram_paged is the only state where the mfn type -can be invalidated. - -(xen-unstable changeset: 22443:48b10f9a436e) - -Signed-off-by: Olaf Hering - ---- - xen/arch/x86/mm/p2m.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -@@ -2588,7 +2588,7 @@ void p2m_mem_paging_populate(struct doma - /* XXX: It seems inefficient to have this here, as it's only needed - * in one case (ept guest accessing paging out page) */ - gfn_to_mfn(d, gfn, &p2mt); -- if ( p2mt != p2m_ram_paging_out ) -+ if ( p2mt == p2m_ram_paged ) - { - p2m_lock(d->arch.p2m); - set_p2m_entry(d, gfn, _mfn(PAGING_MFN), 0, p2m_ram_paging_in_start); diff --git a/xenpaging.page_already_populated.patch b/xenpaging.page_already_populated.patch deleted file mode 100644 index 9e4c571..0000000 --- a/xenpaging.page_already_populated.patch +++ /dev/null @@ -1,27 +0,0 @@ -Subject: xenpaging: print p2mt for already paged-in pages - -Add more debug output, print p2mt for pages which were requested more than once. - -(xen-unstable changeset: 22440:1b87fbd10f43) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 2 ++ - 1 file changed, 2 insertions(+) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -635,8 +635,10 @@ int main(int argc, char *argv[]) - else - { - DPRINTF("page already populated (domain = %d; vcpu = %d;" -+ " p2mt = %x;" - " gfn = %"PRIx64"; paused = %"PRId64")\n", - paging->mem_event.domain_id, req.vcpu_id, -+ req.p2mt, - req.gfn, req.flags & MEM_EVENT_FLAG_VCPU_PAUSED); - - /* Tell Xen to resume the vcpu */ diff --git a/xenpaging.pagefile.patch b/xenpaging.pagefile.patch deleted file mode 100644 index cd2cd8d..0000000 --- a/xenpaging.pagefile.patch +++ /dev/null @@ -1,52 +0,0 @@ -Subject: xenpaging: Open paging file only if xenpaging_init() succeeds - -Open paging file only if xenpaging_init() succeeds. It can fail if the host -does not support the required virtualization features such as EPT or if -xenpaging was already started for this domain_id. - -(xen-unstable changeset: 22435:7818ea9045fd) - -Signed-off-by: Olaf Hering -Already-Acked-by: Patrick Colp -Already-Acked-by: Keir Fraser - ---- - tools/xenpaging/xenpaging.c | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -496,15 +496,6 @@ int main(int argc, char *argv[]) - - victims = calloc(num_pages, sizeof(xenpaging_victim_t)); - -- /* Open file */ -- sprintf(filename, "page_cache_%d", domain_id); -- fd = open(filename, open_flags, open_mode); -- if ( fd < 0 ) -- { -- perror("failed to open file"); -- return -1; -- } -- - /* Seed random-number generator */ - srand(time(NULL)); - -@@ -516,6 +507,15 @@ int main(int argc, char *argv[]) - goto out; - } - -+ /* Open file */ -+ sprintf(filename, "page_cache_%d", domain_id); -+ fd = open(filename, open_flags, open_mode); -+ if ( fd < 0 ) -+ { -+ perror("failed to open file"); -+ return -1; -+ } -+ - /* Evict pages */ - memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages); - for ( i = 0; i < num_pages; i++ ) diff --git a/xenpaging.pageout_policy.patch b/xenpaging.pageout_policy.patch deleted file mode 100644 index 027f0a6..0000000 --- a/xenpaging.pageout_policy.patch +++ /dev/null @@ -1,30 +0,0 @@ -Subject: xenpaging: call pageout policy function in xenpaging_evict_page - -Notify policy about a page that was just paged out to disk. -Up to now the code called the opposite function, which clears the -(xenpaging internal) reference bit, instead of setting it and marking -the page as gone. - -(xen-unstable changeset: 22064:1bd1ba6f1aa4) -Signed-off-by: Olaf Hering -Already-Acked-by: Patrick Colp - ---- - tools/xenpaging/xenpaging.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -359,8 +359,8 @@ int xenpaging_evict_page(xenpaging_t *pa - goto out; - } - -- /* Notify policy of page being paged in */ -- policy_notify_paged_in(paging->mem_event.domain_id, victim->gfn); -+ /* Notify policy of page being paged out */ -+ policy_notify_paged_out(paging->mem_event.domain_id, victim->gfn); - - out: - return ret; diff --git a/xenpaging.paging_prep_enomem.patch b/xenpaging.paging_prep_enomem.patch deleted file mode 100644 index 34a0c89..0000000 --- a/xenpaging.paging_prep_enomem.patch +++ /dev/null @@ -1,81 +0,0 @@ -Subject: xenpaging: handle temporary out-of-memory conditions during page-in - -p2m_mem_paging_prep() should return -ENOMEM if a new page could not be -allocated. This can be handled in xenpaging to retry the page-in. Right -now such condition would stall the guest because the requested page will -not come back, xenpaging simply exits. So xenpaging could very well -retry the allocation forever to rescue the guest. - -(xen-unstable changeset: 22446:08158f001f19) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 27 ++++++++++++++++++++------- - xen/arch/x86/mm/p2m.c | 2 +- - 2 files changed, 21 insertions(+), 8 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -410,19 +411,31 @@ static int xenpaging_populate_page( - unsigned long _gfn; - void *page; - int ret; -+ unsigned char oom = 0; - -- /* Tell Xen to allocate a page for the domain */ -- ret = xc_mem_paging_prep(paging->xc_handle, paging->mem_event.domain_id, -- *gfn); -- if ( ret != 0 ) -+ _gfn = *gfn; -+ do - { -- ERROR("Error preparing for page in"); -- goto out_map; -+ /* Tell Xen to allocate a page for the domain */ -+ ret = xc_mem_paging_prep(paging->xc_handle, paging->mem_event.domain_id, -+ _gfn); -+ if ( ret != 0 ) -+ { -+ if ( errno == ENOMEM ) -+ { -+ if ( oom++ == 0 ) -+ DPRINTF("ENOMEM while preparing gfn %lx\n", _gfn); -+ sleep(1); -+ continue; -+ } -+ ERROR("Error preparing for page in"); -+ goto out_map; -+ } - } -+ while ( ret && !interrupted ); - - /* Map page */ - ret = -EFAULT; -- _gfn = *gfn; - page = xc_map_foreign_pages(paging->xc_handle, paging->mem_event.domain_id, - PROT_READ | PROT_WRITE, &_gfn, 1); - *gfn = _gfn; -Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c -@@ -2622,7 +2622,7 @@ int p2m_mem_paging_prep(struct domain *d - /* Get a free page */ - page = alloc_domheap_page(d, 0); - if ( unlikely(page == NULL) ) -- return -EINVAL; -+ return -ENOMEM; - - /* Fix p2m mapping */ - p2m_lock(d->arch.p2m); diff --git a/xenpaging.policy_linear.patch b/xenpaging.policy_linear.patch deleted file mode 100644 index 3e7c932..0000000 --- a/xenpaging.policy_linear.patch +++ /dev/null @@ -1,128 +0,0 @@ -Subject: xenpaging: break endless loop during inital page-out with large pagefiles - -To allow the starting for xenpaging right after 'xm start XYZ', I -specified a pagefile size equal to the guest memory size in the hope to -catch more errors where the paged-out state of a p2mt is not checked. - -While doing that, xenpaging got into an endless loop because some pages -cant be paged out right away. Now the policy reports an error if the gfn -number wraps. - -(xen-unstable changeset: 22434:0d0a18cd416f) - -Signed-off-by: Olaf Hering -Already-Acked-by: Patrick Colp -Already-Acked-by: Keir Fraser - ---- - tools/xenpaging/policy_default.c | 35 ++++++++++++++++++++++++++++------- - tools/xenpaging/xenpaging.c | 7 +++++-- - 2 files changed, 33 insertions(+), 9 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/policy_default.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy_default.c -+++ xen-4.0.2-testing/tools/xenpaging/policy_default.c -@@ -30,8 +30,12 @@ - - - static unsigned long mru[MRU_SIZE]; --static unsigned int i_mru = 0; -+static unsigned int i_mru; - static unsigned long *bitmap; -+static unsigned long *unconsumed; -+static unsigned long current_gfn; -+static unsigned long bitmap_size; -+static unsigned long max_pages; - - - int policy_init(xenpaging_t *paging) -@@ -43,6 +47,14 @@ int policy_init(xenpaging_t *paging) - rc = alloc_bitmap(&bitmap, paging->bitmap_size); - if ( rc != 0 ) - goto out; -+ /* Allocate bitmap to track unusable pages */ -+ rc = alloc_bitmap(&unconsumed, paging->bitmap_size); -+ if ( rc != 0 ) -+ goto out; -+ -+ /* record bitmap_size */ -+ bitmap_size = paging->bitmap_size; -+ max_pages = paging->domain_info->max_pages; - - /* Initialise MRU list of paged in pages */ - for ( i = 0; i < MRU_SIZE; i++ ) -@@ -51,8 +63,6 @@ int policy_init(xenpaging_t *paging) - /* Don't page out page 0 */ - set_bit(0, bitmap); - -- rc = 0; -- - out: - return rc; - } -@@ -60,17 +70,27 @@ int policy_init(xenpaging_t *paging) - int policy_choose_victim(xenpaging_t *paging, domid_t domain_id, - xenpaging_victim_t *victim) - { -+ unsigned long wrap = current_gfn; - ASSERT(victim != NULL); - - /* Domain to pick on */ - victim->domain_id = domain_id; -- -+ - do - { -- /* Randomly choose a gfn to evict */ -- victim->gfn = rand() % paging->domain_info->max_pages; -+ current_gfn++; -+ if ( current_gfn >= max_pages ) -+ current_gfn = 0; -+ if ( wrap == current_gfn ) -+ { -+ victim->gfn = INVALID_MFN; -+ return -ENOSPC; -+ } - } -- while ( test_bit(victim->gfn, bitmap) ); -+ while ( test_bit(current_gfn, bitmap) || test_bit(current_gfn, unconsumed) ); -+ -+ set_bit(current_gfn, unconsumed); -+ victim->gfn = current_gfn; - - return 0; - } -@@ -78,6 +98,7 @@ int policy_choose_victim(xenpaging_t *pa - void policy_notify_paged_out(domid_t domain_id, unsigned long gfn) - { - set_bit(gfn, bitmap); -+ clear_bit(gfn, unconsumed); - } - - void policy_notify_paged_in(domid_t domain_id, unsigned long gfn) -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -441,7 +441,8 @@ static int evict_victim(xenpaging_t *pag - ret = policy_choose_victim(paging, domain_id, victim); - if ( ret != 0 ) - { -- ERROR("Error choosing victim"); -+ if ( ret != -ENOSPC ) -+ ERROR("Error choosing victim"); - goto out; - } - -@@ -519,7 +520,9 @@ int main(int argc, char *argv[]) - memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages); - for ( i = 0; i < num_pages; i++ ) - { -- evict_victim(paging, domain_id, &victims[i], fd, i); -+ rc = evict_victim(paging, domain_id, &victims[i], fd, i); -+ if ( rc == -ENOSPC ) -+ break; - if ( i % 100 == 0 ) - DPRINTF("%d pages evicted\n", i); - } diff --git a/xenpaging.populate_only_if_paged.patch b/xenpaging.populate_only_if_paged.patch deleted file mode 100644 index 5935b33..0000000 --- a/xenpaging.populate_only_if_paged.patch +++ /dev/null @@ -1,30 +0,0 @@ -Subject: xenpaging: populate paged-out pages unconditionally - -Populate a page unconditionally to avoid missing a page-in request. -If the page is already in the process of being paged-in, the this vcpu -will be stopped and later resumed once the page content is usable again. - -This matches other p2m_mem_paging_populate usage in the source tree. - -(xen-unstable changeset: 22437:9a9bcf399856) - -Signed-off-by: Olaf Hering - ---- - xen/common/grant_table.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -Index: xen-4.0.2-testing/xen/common/grant_table.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/common/grant_table.c -+++ xen-4.0.2-testing/xen/common/grant_table.c -@@ -156,8 +156,7 @@ static int __get_paged_frame(unsigned lo - *frame = mfn_x(mfn); - if ( p2m_is_paging(p2mt) ) - { -- if ( p2m_is_paged(p2mt) ) -- p2m_mem_paging_populate(rd, gfn); -+ p2m_mem_paging_populate(rd, gfn); - rc = GNTST_eagain; - } - } diff --git a/xenpaging.print-arguments.patch b/xenpaging.print-arguments.patch deleted file mode 100644 index 559d786..0000000 --- a/xenpaging.print-arguments.patch +++ /dev/null @@ -1,26 +0,0 @@ -Subject: xenpaging: print xenpaging cmdline options - -Print xenpaging arguments to simplify domain_id mapping from xenpaging -logfile to other logfiles and Xen console output. - -(xen-unstable changeset: 22445:c7b08fc1cb8d) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 2 ++ - 1 file changed, 2 insertions(+) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -539,6 +539,8 @@ int main(int argc, char *argv[]) - return 1; - } - -+ DPRINTF("starting %s %u %d\n", argv[0], domain_id, num_pages); -+ - /* Open file */ - sprintf(filename, "page_cache_%d", domain_id); - fd = open(filename, open_flags, open_mode); diff --git a/xenpaging.return-void.patch b/xenpaging.return-void.patch new file mode 100644 index 0000000..cb5a474 --- /dev/null +++ b/xenpaging.return-void.patch @@ -0,0 +1,71 @@ +xenpaging: remove return values from functions that can not fail + +get_request() and put_response() can not fail, remove return value +and update calling functions. + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 19 ++++--------------- + 1 file changed, 4 insertions(+), 15 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -297,7 +297,7 @@ static int xenpaging_teardown(xenpaging_ + return -1; + } + +-static int get_request(mem_event_t *mem_event, mem_event_request_t *req) ++static void get_request(mem_event_t *mem_event, mem_event_request_t *req) + { + mem_event_back_ring_t *back_ring; + RING_IDX req_cons; +@@ -316,11 +316,9 @@ static int get_request(mem_event_t *mem_ + back_ring->sring->req_event = req_cons + 1; + + mem_event_ring_unlock(mem_event); +- +- return 0; + } + +-static int put_response(mem_event_t *mem_event, mem_event_response_t *rsp) ++static void put_response(mem_event_t *mem_event, mem_event_response_t *rsp) + { + mem_event_back_ring_t *back_ring; + RING_IDX rsp_prod; +@@ -339,8 +337,6 @@ static int put_response(mem_event_t *mem + RING_PUSH_RESPONSES(back_ring); + + mem_event_ring_unlock(mem_event); +- +- return 0; + } + + static int xenpaging_evict_page(xenpaging_t *paging, +@@ -400,9 +396,7 @@ static int xenpaging_resume_page(xenpagi + int ret; + + /* Put the page info on the ring */ +- ret = put_response(&paging->mem_event, rsp); +- if ( ret != 0 ) +- goto out; ++ put_response(&paging->mem_event, rsp); + + /* Notify policy of page being paged in */ + if ( notify_policy ) +@@ -612,12 +606,7 @@ int main(int argc, char *argv[]) + + while ( RING_HAS_UNCONSUMED_REQUESTS(&paging->mem_event.back_ring) ) + { +- rc = get_request(&paging->mem_event, &req); +- if ( rc != 0 ) +- { +- ERROR("Error getting request"); +- goto out; +- } ++ get_request(&paging->mem_event, &req); + + /* Check if the page has already been paged in */ + if ( test_and_clear_bit(req.gfn, paging->bitmap) ) diff --git a/xenpaging.runtime_mru_size.patch b/xenpaging.runtime_mru_size.patch deleted file mode 100644 index 7f08ea3..0000000 --- a/xenpaging.runtime_mru_size.patch +++ /dev/null @@ -1,107 +0,0 @@ -Subject: xenpaging: specify policy mru_size at runtime - -The environment variable XENPAGING_POLICY_MRU_SIZE will change the mru_size in -the policy at runtime. -Specifying the mru_size at runtime allows the admin to keep more pages in -memory so guests can make more progress. Its also good for development to -reduce the value to put more pressure on the paging related code paths. - -(xen-unstable changeset: 22700:f87b1c194eb8) - -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/policy_default.c | 21 +++++++++++++++++---- - tools/xenpaging/xenpaging.c | 8 ++++++++ - tools/xenpaging/xenpaging.h | 1 + - 3 files changed, 26 insertions(+), 4 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/policy_default.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/policy_default.c -+++ xen-4.0.2-testing/tools/xenpaging/policy_default.c -@@ -29,7 +29,8 @@ - #define MRU_SIZE (1024 * 16) - - --static unsigned long mru[MRU_SIZE]; -+static unsigned long *mru; -+static unsigned int mru_size; - static unsigned int i_mru; - static unsigned long *bitmap; - static unsigned long *unconsumed; -@@ -56,8 +57,20 @@ int policy_init(xenpaging_t *paging) - bitmap_size = paging->bitmap_size; - max_pages = paging->domain_info->max_pages; - -+ if ( paging->policy_mru_size > 0 ) -+ mru_size = paging->policy_mru_size; -+ else -+ mru_size = MRU_SIZE; -+ -+ mru = malloc(sizeof(*mru) * mru_size); -+ if ( mru == NULL ) -+ { -+ rc = -ENOMEM; -+ goto out; -+ } -+ - /* Initialise MRU list of paged in pages */ -- for ( i = 0; i < MRU_SIZE; i++ ) -+ for ( i = 0; i < mru_size; i++ ) - mru[i] = INVALID_MFN; - - /* Don't page out first 16MB */ -@@ -100,12 +113,12 @@ void policy_notify_paged_out(unsigned lo - - void policy_notify_paged_in(unsigned long gfn) - { -- unsigned long old_gfn = mru[i_mru & (MRU_SIZE - 1)]; -+ unsigned long old_gfn = mru[i_mru & (mru_size - 1)]; - - if ( old_gfn != INVALID_MFN ) - clear_bit(old_gfn, bitmap); - -- mru[i_mru & (MRU_SIZE - 1)] = gfn; -+ mru[i_mru & (mru_size - 1)] = gfn; - i_mru++; - } - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -80,6 +80,7 @@ static void *init_page(void) - xenpaging_t *xenpaging_init(domid_t domain_id) - { - xenpaging_t *paging; -+ char *p; - int rc; - - DPRINTF("xenpaging init\n"); -@@ -96,6 +97,13 @@ xenpaging_t *xenpaging_init(domid_t doma - goto err; - } - -+ p = getenv("XENPAGING_POLICY_MRU_SIZE"); -+ if ( p && *p ) -+ { -+ paging->policy_mru_size = atoi(p); -+ DPRINTF("Setting policy mru_size to %d\n", paging->policy_mru_size); -+ } -+ - /* Set domain id */ - paging->mem_event.domain_id = domain_id; - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.h -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.h -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.h -@@ -37,6 +37,7 @@ - - typedef struct xenpaging { - int xc_handle; -+ int policy_mru_size; - - xc_platform_info_t *platform_info; - xc_domaininfo_t *domain_info; diff --git a/xenpaging.signal_handling.patch b/xenpaging.signal_handling.patch deleted file mode 100644 index f5e95bc..0000000 --- a/xenpaging.signal_handling.patch +++ /dev/null @@ -1,179 +0,0 @@ -Subject: xenpaging: add signal handling - -Leave paging loop if xenpaging gets a signal. -Remove paging file on exit. - -(xen-unstable changeset: 22438:d622cf8c372e) - -Signed-off-by: Olaf Hering - ---- -v2: - unlink pagefile in signal handler to avoid stale pagefiles if xenpaging is - stuck in some loop - - tools/xenpaging/xenpaging.c | 42 +++++++++++++++++++++++++++++++++--------- - 1 file changed, 33 insertions(+), 9 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -23,6 +23,7 @@ - - #include - #include -+#include - #include - - #include -@@ -41,6 +42,14 @@ - #define DPRINTF(...) ((void)0) - #endif - -+static char filename[80]; -+static int interrupted; -+static void close_handler(int sig) -+{ -+ interrupted = sig; -+ if ( filename[0] ) -+ unlink(filename); -+} - - static void *init_page(void) - { -@@ -245,7 +254,6 @@ int xenpaging_teardown(xenpaging_t *pagi - if ( rc != 0 ) - { - ERROR("Error tearing down domain paging in xen"); -- goto err; - } - - /* Unbind VIRQ */ -@@ -253,7 +261,6 @@ int xenpaging_teardown(xenpaging_t *pagi - if ( rc != 0 ) - { - ERROR("Error unbinding event port"); -- goto err; - } - paging->mem_event.port = -1; - -@@ -262,7 +269,6 @@ int xenpaging_teardown(xenpaging_t *pagi - if ( rc != 0 ) - { - ERROR("Error closing event channel"); -- goto err; - } - paging->mem_event.xce_handle = -1; - -@@ -271,7 +277,6 @@ int xenpaging_teardown(xenpaging_t *pagi - if ( rc != 0 ) - { - ERROR("Error closing connection to xen"); -- goto err; - } - paging->xc_handle = -1; - -@@ -376,7 +381,7 @@ int xenpaging_evict_page(xenpaging_t *pa - return ret; - } - --int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp) -+static int xenpaging_resume_page(xenpaging_t *paging, mem_event_response_t *rsp) - { - int ret; - -@@ -456,6 +461,11 @@ static int evict_victim(xenpaging_t *pag - goto out; - } - -+ if ( interrupted ) -+ { -+ ret = -EINTR; -+ goto out; -+ } - ret = xc_mem_paging_nominate(paging->xc_handle, - paging->mem_event.domain_id, victim->gfn); - if ( ret == 0 ) -@@ -480,6 +490,7 @@ static int evict_victim(xenpaging_t *pag - - int main(int argc, char *argv[]) - { -+ struct sigaction act; - domid_t domain_id; - int num_pages; - xenpaging_t *paging; -@@ -492,7 +503,6 @@ int main(int argc, char *argv[]) - - int open_flags = O_CREAT | O_TRUNC | O_RDWR; - mode_t open_mode = S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH; -- char filename[80]; - int fd; - - if ( argc != 3 ) -@@ -514,7 +524,7 @@ int main(int argc, char *argv[]) - if ( paging == NULL ) - { - ERROR("Error initialising paging"); -- goto out; -+ return 1; - } - - /* Open file */ -@@ -523,9 +533,18 @@ int main(int argc, char *argv[]) - if ( fd < 0 ) - { - perror("failed to open file"); -- return -1; -+ return 2; - } - -+ /* ensure that if we get a signal, we'll do cleanup, then exit */ -+ act.sa_handler = close_handler; -+ act.sa_flags = 0; -+ sigemptyset(&act.sa_mask); -+ sigaction(SIGHUP, &act, NULL); -+ sigaction(SIGTERM, &act, NULL); -+ sigaction(SIGINT, &act, NULL); -+ sigaction(SIGALRM, &act, NULL); -+ - /* Evict pages */ - memset(victims, 0, sizeof(xenpaging_victim_t) * num_pages); - for ( i = 0; i < num_pages; i++ ) -@@ -533,6 +552,8 @@ int main(int argc, char *argv[]) - rc = evict_victim(paging, domain_id, &victims[i], fd, i); - if ( rc == -ENOSPC ) - break; -+ if ( rc == -EINTR ) -+ break; - if ( i % 100 == 0 ) - DPRINTF("%d pages evicted\n", i); - } -@@ -540,7 +561,7 @@ int main(int argc, char *argv[]) - DPRINTF("pages evicted\n"); - - /* Swap pages in and out */ -- while ( 1 ) -+ while ( !interrupted ) - { - /* Wait for Xen to signal that a page needs paged in */ - rc = xc_wait_for_event_or_timeout(paging->mem_event.xce_handle, 100); -@@ -631,8 +652,10 @@ int main(int argc, char *argv[]) - } - } - } -+ DPRINTF("xenpaging got signal %d\n", interrupted); - - out: -+ close(fd); - free(victims); - - /* Tear down domain paging */ -@@ -643,6 +666,7 @@ int main(int argc, char *argv[]) - if ( rc == 0 ) - rc = rc1; - -+ DPRINTF("xenpaging exit code %d\n", rc); - return rc; - } - diff --git a/xenpaging.tools_xenpaging_cleanup.patch b/xenpaging.tools_xenpaging_cleanup.patch deleted file mode 100644 index 173ce89..0000000 --- a/xenpaging.tools_xenpaging_cleanup.patch +++ /dev/null @@ -1,58 +0,0 @@ -Subject: xenpaging: Fix-up xenpaging tool code. - -This isn't directly related to EPT checking, but does some general fix-ups -to the xenpaging code (adds some extra frees, etc.) - -(xen-unstable changeset: 21890:3263d0ff9476) - -Already-Signed-off-by: Patrick Colp -Signed-off-by: Olaf Hering - ---- - tools/xenpaging/xenpaging.c | 22 ++++++++++++++++++---- - 1 file changed, 18 insertions(+), 4 deletions(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -101,7 +101,7 @@ xenpaging_t *xenpaging_init(domid_t doma - paging->mem_event.ring_page = init_page(); - if ( paging->mem_event.ring_page == NULL ) - { -- ERROR("Error initialising shared page"); -+ ERROR("Error initialising ring page"); - goto err; - } - -@@ -199,13 +199,27 @@ xenpaging_t *xenpaging_init(domid_t doma - return paging; - - err: -- if ( paging->bitmap ) -+ if ( paging ) -+ { -+ if ( paging->mem_event.shared_page ) -+ { -+ munlock(paging->mem_event.shared_page, PAGE_SIZE); -+ free(paging->mem_event.shared_page); -+ } -+ -+ if ( paging->mem_event.ring_page ) -+ { -+ munlock(paging->mem_event.ring_page, PAGE_SIZE); -+ free(paging->mem_event.ring_page); -+ } -+ - free(paging->bitmap); -- if ( paging->platform_info ) - free(paging->platform_info); -- if ( paging ) -+ free(paging->domain_info); - free(paging); -+ } - -+ err_iface: - return NULL; - } - diff --git a/xenpaging.xenpaging_init.patch b/xenpaging.xenpaging_init.patch deleted file mode 100644 index 855d76a..0000000 --- a/xenpaging.xenpaging_init.patch +++ /dev/null @@ -1,60 +0,0 @@ -Subject: xenpaging: allow only one xenpaging binary per guest - -Make sure only one xenpaging binary is active per domain. -Print info when the host lacks the required features for xenpaging. - -(xen-unstable changeset: 22436:b153d3b71504) -(xen-unstable changeset: 22511:fdf95845c2f8) - -Signed-off-by: Olaf Hering -Already-Acked-by: Patrick Colp -Already-Acked-by: Keir Fraser - ---- -v2: use perror for default case - - tools/xenpaging/xenpaging.c | 12 +++++++++++- - xen/arch/x86/mm/mem_event.c | 7 +++++++ - 2 files changed, 18 insertions(+), 1 deletion(-) - -Index: xen-4.0.2-testing/tools/xenpaging/xenpaging.c -=================================================================== ---- xen-4.0.2-testing.orig/tools/xenpaging/xenpaging.c -+++ xen-4.0.2-testing/tools/xenpaging/xenpaging.c -@@ -120,7 +120,17 @@ xenpaging_t *xenpaging_init(domid_t doma - paging->mem_event.ring_page); - if ( rc != 0 ) - { -- ERROR("Error initialising shared page"); -+ switch ( errno ) { -+ case EBUSY: -+ ERROR("xenpaging is (or was) active on this domain"); -+ break; -+ case ENODEV: -+ ERROR("EPT not supported for this guest"); -+ break; -+ default: -+ ERROR("Error initialising shared page: %s", strerror(errno)); -+ break; -+ } - goto err; - } - -Index: xen-4.0.2-testing/xen/arch/x86/mm/mem_event.c -=================================================================== ---- xen-4.0.2-testing.orig/xen/arch/x86/mm/mem_event.c -+++ xen-4.0.2-testing/xen/arch/x86/mm/mem_event.c -@@ -214,6 +214,13 @@ int mem_event_domctl(struct domain *d, x - mfn_t ring_mfn; - mfn_t shared_mfn; - -+ /* Only one xenpaging at a time. If xenpaging crashed, -+ * the cache is in an undefined state and so is the guest -+ */ -+ rc = -EBUSY; -+ if ( d->mem_event.ring_page ) -+ break; -+ - /* Currently only EPT is supported */ - rc = -ENODEV; - if ( !(is_hvm_domain(d) && d->arch.hvm_domain.hap_enabled && diff --git a/xenpaging.xenpaging_populate_page-gfn.patch b/xenpaging.xenpaging_populate_page-gfn.patch new file mode 100644 index 0000000..0491f6a --- /dev/null +++ b/xenpaging.xenpaging_populate_page-gfn.patch @@ -0,0 +1,68 @@ +xenpaging: pass integer to xenpaging_populate_page + +Pass gfn as integer to xenpaging_populate_page(). xc_map_foreign_pages() +takes a pointer to a list of gfns, but its a const pointer. So writing +the value back to the caller is not needed. + +Signed-off-by: Olaf Hering + +--- + tools/xenpaging/xenpaging.c | 17 ++++++----------- + 1 file changed, 6 insertions(+), 11 deletions(-) + +Index: xen-4.1.1-testing/tools/xenpaging/xenpaging.c +=================================================================== +--- xen-4.1.1-testing.orig/tools/xenpaging/xenpaging.c ++++ xen-4.1.1-testing/tools/xenpaging/xenpaging.c +@@ -413,28 +413,24 @@ static int xenpaging_resume_page(xenpagi + return ret; + } + +-static int xenpaging_populate_page(xenpaging_t *paging, +- uint64_t *gfn, int fd, int i) ++static int xenpaging_populate_page(xenpaging_t *paging, xen_pfn_t gfn, int fd, int i) + { + xc_interface *xch = paging->xc_handle; +- unsigned long _gfn; + void *page; + int ret; + unsigned char oom = 0; + +- _gfn = *gfn; +- DPRINTF("populate_page < gfn %lx pageslot %d\n", _gfn, i); ++ DPRINTF("populate_page < gfn %"PRI_xen_pfn" pageslot %d\n", gfn, i); + do + { + /* Tell Xen to allocate a page for the domain */ +- ret = xc_mem_paging_prep(xch, paging->mem_event.domain_id, +- _gfn); ++ ret = xc_mem_paging_prep(xch, paging->mem_event.domain_id, gfn); + if ( ret != 0 ) + { + if ( errno == ENOMEM ) + { + if ( oom++ == 0 ) +- DPRINTF("ENOMEM while preparing gfn %lx\n", _gfn); ++ DPRINTF("ENOMEM while preparing gfn %"PRI_xen_pfn"\n", gfn); + sleep(1); + continue; + } +@@ -447,8 +443,7 @@ static int xenpaging_populate_page(xenpa + /* Map page */ + ret = -EFAULT; + page = xc_map_foreign_pages(xch, paging->mem_event.domain_id, +- PROT_READ | PROT_WRITE, &_gfn, 1); +- *gfn = _gfn; ++ PROT_READ | PROT_WRITE, &gfn, 1); + if ( page == NULL ) + { + ERROR("Error mapping page: page is null"); +@@ -634,7 +629,7 @@ int main(int argc, char *argv[]) + else + { + /* Populate the page */ +- rc = xenpaging_populate_page(paging, &req.gfn, fd, i); ++ rc = xenpaging_populate_page(paging, req.gfn, fd, i); + if ( rc != 0 ) + { + ERROR("Error populating page"); diff --git a/xm-create-xflag.patch b/xm-create-xflag.patch index 009e954..4dca560 100644 --- a/xm-create-xflag.patch +++ b/xm-create-xflag.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xm/create.py +Index: xen-4.1.1-testing/tools/python/xen/xm/create.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/create.py -+++ xen-4.1.0-testing/tools/python/xen/xm/create.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/create.py ++++ xen-4.1.1-testing/tools/python/xen/xm/create.py @@ -36,7 +36,7 @@ from xen.xend.server.DevConstants import from xen.util import blkif from xen.util import vscsi_util @@ -33,10 +33,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xm/create.py if opts.vals.dryrun or opts.vals.xmldryrun: return -Index: xen-4.1.0-testing/tools/python/xen/xend/XendAPIConstants.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendAPIConstants.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendAPIConstants.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendAPIConstants.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendAPIConstants.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendAPIConstants.py @@ -45,8 +45,10 @@ XEN_API_ON_NORMAL_EXIT = [ XEN_API_ON_CRASH_BEHAVIOUR = [ 'destroy', diff --git a/xm-save-check-file.patch b/xm-save-check-file.patch index 6572881..5c0e6c6 100644 --- a/xm-save-check-file.patch +++ b/xm-save-check-file.patch @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/python/xen/xend/XendAPI.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendAPI.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendAPI.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendAPI.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendAPI.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendAPI.py @@ -1959,10 +1959,10 @@ class XendAPI(object): bool(live), port, node, ssl, bool(chs)) return xen_api_success_void() @@ -15,10 +15,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendAPI.py return xen_api_success_void() def VM_restore(self, _, src, paused): -Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py +Index: xen-4.1.1-testing/tools/python/xen/xend/XendDomain.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xend/XendDomain.py -+++ xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py +--- xen-4.1.1-testing.orig/tools/python/xen/xend/XendDomain.py ++++ xen-4.1.1-testing/tools/python/xen/xend/XendDomain.py @@ -1505,7 +1505,7 @@ class XendDomain: pass sock.close() @@ -38,10 +38,10 @@ Index: xen-4.1.0-testing/tools/python/xen/xend/XendDomain.py if dominfo.getDomid() == DOM0_ID: raise XendError("Cannot save privileged domain %s" % str(domid)) if dominfo._stateGet() != DOM_STATE_RUNNING: -Index: xen-4.1.0-testing/tools/python/xen/xm/main.py +Index: xen-4.1.1-testing/tools/python/xen/xm/main.py =================================================================== ---- xen-4.1.0-testing.orig/tools/python/xen/xm/main.py -+++ xen-4.1.0-testing/tools/python/xen/xm/main.py +--- xen-4.1.1-testing.orig/tools/python/xen/xm/main.py ++++ xen-4.1.1-testing/tools/python/xen/xm/main.py @@ -121,7 +121,7 @@ SUBCOMMAND_HELP = { 'reset' : ('', 'Reset a domain.'), 'restore' : (' [-p]', diff --git a/xm-test-cleanup.diff b/xm-test-cleanup.diff index a4ac109..69abb41 100644 --- a/xm-test-cleanup.diff +++ b/xm-test-cleanup.diff @@ -1,7 +1,7 @@ -Index: xen-4.1.0-testing/tools/xm-test/tests/save/01_save_basic_pos.py +Index: xen-4.1.1-testing/tools/xm-test/tests/save/01_save_basic_pos.py =================================================================== ---- xen-4.1.0-testing.orig/tools/xm-test/tests/save/01_save_basic_pos.py -+++ xen-4.1.0-testing/tools/xm-test/tests/save/01_save_basic_pos.py +--- xen-4.1.1-testing.orig/tools/xm-test/tests/save/01_save_basic_pos.py ++++ xen-4.1.1-testing/tools/xm-test/tests/save/01_save_basic_pos.py @@ -35,3 +35,9 @@ if s != 0: # Make sure it's gone if isDomainRunning(domain.getName()):