Accepting request 72364 from Virtualization
Xen version 4.1.1-rc1 OBS-URL: https://build.opensuse.org/request/show/72364 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xen?expand=0&rev=137
This commit is contained in:
commit
b9e58daf6b
@ -19,8 +19,10 @@ could be introduced.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
--- 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 <jbeulich@novell.com>
|
||||
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;
|
||||
|
||||
|
@ -12,8 +12,10 @@ x86: make mod_l1_entry() return a proper error code
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
--- 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;
|
||||
|
@ -11,8 +11,10 @@ track both an okay status and an error code).
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
--- 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);
|
||||
|
@ -16,8 +16,10 @@ found set by the surrounding loop).
|
||||
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
||||
Acked-by: Gang Wei <gang.wei@intel.com>
|
||||
|
||||
--- 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 <gang.wei@intel.com>
|
||||
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);
|
||||
|
||||
|
@ -27,8 +27,10 @@ specify the operand suffix as 'l' for good measure.
|
||||
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- 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 <keir@xen.org>
|
||||
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 <keir@xen.org>
|
||||
|
||||
#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 <keir@xen.org>
|
||||
+#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);
|
||||
|
@ -8,11 +8,13 @@ guest-bound irq before accessing desc->action.
|
||||
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- 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) )
|
||||
+ {
|
||||
|
@ -27,8 +27,10 @@ Signed-off-by: Allen Kay <allen.m.kay@intel.com>
|
||||
|
||||
Signed-off-by: Allen Kay <allen.m.kay@intel.com>
|
||||
|
||||
--- 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 <allen.m.kay@intel.com>
|
||||
__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 <allen.m.kay@intel.com>
|
||||
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 <allen.m.kay@intel.com>
|
||||
{
|
||||
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 <allen.m.kay@intel.com>
|
||||
+ 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 <allen.m.kay@intel.com>
|
||||
+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 <allen.m.kay@intel.com>
|
||||
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 <allen.m.kay@intel.com>
|
||||
{
|
||||
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 <allen.m.kay@intel.com>
|
||||
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 <allen.m.kay@intel.com>
|
||||
{
|
||||
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 <allen.m.kay@intel.com>
|
||||
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 <xen/types.h>
|
||||
@ -179,8 +191,10 @@ Signed-off-by: Allen Kay <allen.m.kay@intel.com>
|
||||
/*
|
||||
* 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);
|
||||
|
@ -1,57 +0,0 @@
|
||||
# HG changeset patch
|
||||
# User Wei Huang <wei.huang2@amd.com>
|
||||
# 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 <wei.huang2@amd.com>
|
||||
|
||||
--- 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)
|
@ -1,51 +0,0 @@
|
||||
# HG changeset patch
|
||||
# User Wei Huang <wei.huang2@amd.com>
|
||||
# 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 <wei.huang2@amd.com>
|
||||
|
||||
--- 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;
|
||||
}
|
@ -9,8 +9,10 @@ This helps us to debug interrupt issues.
|
||||
|
||||
Signed-off-by: Wei Wang <wei.wang2@amd.com>
|
||||
|
||||
--- 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,
|
||||
|
@ -1,179 +0,0 @@
|
||||
References: bnc#680824
|
||||
|
||||
# HG changeset patch
|
||||
# User Wei Wang <wei.wang2@amd.com>
|
||||
# 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 <wei.wang2@amd.com>
|
||||
Acked-by: Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
--- 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(
|
@ -1,220 +0,0 @@
|
||||
References: bnc#623680
|
||||
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# 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 <jbeulich@novell.com>
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
--- 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 <asm/flushtlb.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/mtrr.h>
|
||||
+#include <asm/time.h>
|
||||
#include <mach_apic.h>
|
||||
#include <mach_wakecpu.h>
|
||||
#include <smpboot_hooks.h>
|
||||
@@ -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 <xen/smp.h>
|
||||
#include <xen/irq.h>
|
||||
#include <xen/softirq.h>
|
||||
+#include <xen/cpuidle.h>
|
||||
#include <xen/keyhandler.h>
|
||||
#include <xen/guest_access.h>
|
||||
#include <asm/io.h>
|
||||
@@ -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 <xen/multiboot.h>
|
||||
|
||||
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);
|
435
23233-hvm-cr-access.patch
Normal file
435
23233-hvm-cr-access.patch
Normal file
@ -0,0 +1,435 @@
|
||||
References: FATE#309900
|
||||
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# 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 <andre.przywara@amd.com>
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
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 */
|
75
23234-svm-decode-assist-base.patch
Normal file
75
23234-svm-decode-assist-base.patch
Normal file
@ -0,0 +1,75 @@
|
||||
References: FATE#309900
|
||||
|
||||
# HG changeset patch
|
||||
# User Andre Przywara <andre.przywara@amd.com>
|
||||
# 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 <andre.przywara@amd.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# 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 <keir@xen.org>
|
||||
|
||||
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 */
|
66
23235-svm-decode-assist-crs.patch
Normal file
66
23235-svm-decode-assist-crs.patch
Normal file
@ -0,0 +1,66 @@
|
||||
References: FATE#309900
|
||||
|
||||
# HG changeset patch
|
||||
# User Andre Przywara <andre.przywara@amd.com>
|
||||
# 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 <andre.przywara@amd.com>
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
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() )
|
133
23236-svm-decode-assist-invlpg.patch
Normal file
133
23236-svm-decode-assist-invlpg.patch
Normal file
@ -0,0 +1,133 @@
|
||||
References: FATE#309900
|
||||
|
||||
# HG changeset patch
|
||||
# User Christoph Egger <Christoph.Egger@amd.com>
|
||||
# Date 1302700499 -3600
|
||||
# Node ID 3b2182100ba2fa5c4a3a450e473717e2300aa8f1
|
||||
# Parent 2284c79b606ac14ef5c5bc2c1cce62188b5bd9ee
|
||||
x86/svm/asid: Introduce svm_invlpga()
|
||||
|
||||
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User Andre Przywara <andre.przywara@amd.com>
|
||||
# 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 <andre.przywara@amd.com>
|
||||
|
||||
# HG changeset patch
|
||||
# User Christoph Egger <Christoph.Egger@amd.com>
|
||||
# Date 1305187246 -3600
|
||||
# Node ID 19d6541c4abec3486c83de76102ec46d7fe22a16
|
||||
# Parent b6e8e916ed2827fb1329de0de2e23ee5b6b78662
|
||||
nestedsvm: update rip on invlpga intercept
|
||||
|
||||
Fixes endless loop.
|
||||
|
||||
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
|
||||
|
||||
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 */
|
135
23238-svm-decode-assist-insn-fetch.patch
Normal file
135
23238-svm-decode-assist-insn-fetch.patch
Normal file
@ -0,0 +1,135 @@
|
||||
References: FATE#309900
|
||||
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# 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 <andre.przywara@amd.com>
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
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
|
209
23303-cpufreq-misc.patch
Normal file
209
23303-cpufreq-misc.patch
Normal file
@ -0,0 +1,209 @@
|
||||
# HG changeset patch
|
||||
# User Jan Beulich <jbeulich@novell.com>
|
||||
# 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 <jbeulich@novell.com>
|
||||
|
||||
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 <acpi/acpi.h>
|
||||
#include <acpi/cpufreq/cpufreq.h>
|
||||
|
||||
-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 <xen/cpu.h>
|
||||
#include <xen/init.h>
|
||||
+#include <xen/percpu.h>
|
||||
#include <xen/sched.h>
|
||||
#include <acpi/cpufreq/cpufreq.h>
|
||||
|
||||
/*
|
||||
* 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;
|
||||
};
|
||||
|
42
23304-amd-oprofile-strings.patch
Normal file
42
23304-amd-oprofile-strings.patch
Normal file
@ -0,0 +1,42 @@
|
||||
References: FATE#309893, FATE#309902, FATE#309903, FATE#309906
|
||||
|
||||
# HG changeset patch
|
||||
# User Jacob Shin <jacob.shin@amd.com>
|
||||
# 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 <jacob.shin@amd.com>
|
||||
|
||||
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;
|
223
23305-amd-fam15-xenoprof.patch
Normal file
223
23305-amd-fam15-xenoprof.patch
Normal file
@ -0,0 +1,223 @@
|
||||
References: FATE#309893, FATE#309906
|
||||
|
||||
# HG changeset patch
|
||||
# User Jacob Shin <jacob.shin@amd.com>
|
||||
# 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 <jacob.shin@amd.com>
|
||||
|
||||
Rename fam15h -> amd_fam15h in a few places, as suggested by Jan
|
||||
Beulich.
|
||||
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
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
|
||||
|
261
23306-amd-fam15-vpmu.patch
Normal file
261
23306-amd-fam15-vpmu.patch
Normal file
@ -0,0 +1,261 @@
|
||||
References: FATE#309893, FATE#309906
|
||||
|
||||
# HG changeset patch
|
||||
# User Jacob Shin <jacob.shin@amd.com>
|
||||
# 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 <jacob.shin@amd.com>
|
||||
|
||||
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 <public/hvm/save.h>
|
||||
#include <asm/hvm/vpmu.h>
|
||||
|
||||
-#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:
|
40
23334-amd-fam12+14-vpmu.patch
Normal file
40
23334-amd-fam12+14-vpmu.patch
Normal file
@ -0,0 +1,40 @@
|
||||
References: FATE#309902, FATE#309903
|
||||
|
||||
# HG changeset patch
|
||||
# User Jacob Shin <jacob.shin@amd.com>
|
||||
# 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 <jacob.shin@amd.com>
|
||||
|
||||
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;
|
38
23338-vtd-force-intremap.patch
Normal file
38
23338-vtd-force-intremap.patch
Normal file
@ -0,0 +1,38 @@
|
||||
# HG changeset patch
|
||||
# User Keir Fraser <keir@xen.org>
|
||||
# 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 <allen.m.kay@intel.com>
|
||||
Signed-off-by: Keir Fraser <keir@xen.org>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
@ -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()
|
||||
|
@ -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];
|
||||
|
@ -1,10 +1,10 @@
|
||||
Subject: modify default read/write flag in bdrv_init.
|
||||
Signed-off by Chunyan Liu <cyliu@novell.com>
|
||||
|
||||
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++;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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',
|
||||
|
12
blktap.patch
12
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;
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -15,10 +15,10 @@ Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
||||
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);
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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 )
|
@ -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")
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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:]:
|
||||
|
@ -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:
|
||||
|
@ -17,10 +17,10 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||
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
|
||||
|
||||
|
@ -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).""")
|
||||
|
@ -17,10 +17,10 @@ qcow2 image (the header is gone after three loop iterations):
|
||||
|
||||
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||
|
||||
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;
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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) */
|
||||
|
@ -15,10 +15,10 @@ Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
||||
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);
|
||||
|
@ -12,10 +12,10 @@ Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
||||
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))
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 <ksrinivasan@novell.com>
|
||||
|
||||
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) {
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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__
|
||||
|
@ -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 <xen/platform-compat.h>
|
||||
#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);
|
||||
|
@ -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");
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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 <xen/xen.h>
|
||||
#include <xen/io/blkif.h>
|
||||
@ -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;
|
||||
|
@ -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] <Domain> <CheckpointFile>',
|
||||
@ -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()
|
||||
|
@ -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
|
||||
|
@ -2,10 +2,10 @@ Make our PV drivers "Novell supported modules"
|
||||
|
||||
Signed-off-by: K. Y. Srinivasan <ksrinivasan@novell.com>
|
||||
|
||||
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
|
||||
|
@ -11,10 +11,10 @@ Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
||||
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;
|
||||
|
@ -16,10 +16,10 @@ Signed-off-by: Kevin Wolf <kwolf@suse.de>
|
||||
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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -13,10 +13,10 @@ Signed-off-by: Gerd Hoffmann <kraxel@suse.de>
|
||||
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 <kraxel@suse.de>
|
||||
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
|
||||
+
|
||||
|
@ -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"
|
||||
|
@ -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])
|
||||
|
@ -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
|
||||
|
@ -15,10 +15,10 @@ Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||
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)
|
||||
|
@ -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
|
||||
+#============================================================================
|
||||
|
@ -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 <xen/cpu.h>
|
||||
#include <asm/current.h>
|
||||
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a6043ae8ab78ecf1e75ff2014cd6a7bde3319341fe1bd7a8df335a0764355b70
|
||||
size 10778444
|
3
xen-4.1.1-testing-src.tar.bz2
Normal file
3
xen-4.1.1-testing-src.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fe402be2467f4d333366ed3cccb584f55bea31d72f2c8ed9bc90d1ae32d77dfc
|
||||
size 10774044
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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 $@
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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'])
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user