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:
Sascha Peilicke 2011-06-01 07:30:42 +00:00 committed by Git OBS Bridge
commit b9e58daf6b
178 changed files with 4093 additions and 3840 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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) )
+ {

View File

@ -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);

View File

@ -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)

View File

@ -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;
}

View File

@ -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,

View File

@ -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(

View File

@ -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
View 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 = &regs->eax; break;
+ case 1: p = &regs->ecx; break;
+ case 2: p = &regs->edx; break;
+ case 3: p = &regs->ebx; break;
+ case 4: p = &regs->esp; break;
+ case 5: p = &regs->ebp; break;
+ case 6: p = &regs->esi; break;
+ case 7: p = &regs->edi; break;
+#if defined(__x86_64__)
+ case 8: p = &regs->r8; break;
+ case 9: p = &regs->r9; break;
+ case 10: p = &regs->r10; break;
+ case 11: p = &regs->r11; break;
+ case 12: p = &regs->r12; break;
+ case 13: p = &regs->r13; break;
+ case 14: p = &regs->r14; break;
+ case 15: p = &regs->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 */

View 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 */

View 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() )

View 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 */

View 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
View 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;
};

View 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;

View 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
View 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:

View 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;

View 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;
}
}

View File

@ -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()

View File

@ -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];

View File

@ -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++;

View File

@ -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

View File

@ -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;

View File

@ -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',

View File

@ -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;

View File

@ -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",

View File

@ -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"

View File

@ -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

View File

@ -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}

View File

@ -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
}

View File

@ -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);

View File

@ -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;

View File

@ -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"

View File

@ -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()

View File

@ -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)

View File

@ -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()

View File

@ -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 )

View File

@ -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")

View File

@ -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;

View File

@ -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);

View File

@ -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:]:

View File

@ -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:

View File

@ -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

View File

@ -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).""")

View File

@ -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;

View File

@ -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");

View File

@ -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
}

View File

@ -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) */

View File

@ -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);

View File

@ -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))

View File

@ -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

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -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)

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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__

View File

@ -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);

View File

@ -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");

View File

@ -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)

View File

@ -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:

View File

@ -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

View File

@ -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 */

View File

@ -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
}

View File

@ -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"

View File

@ -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;

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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)

View File

@ -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
+

View File

@ -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"

View File

@ -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])

View File

@ -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

View File

@ -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)

View File

@ -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
+#============================================================================

View File

@ -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;
};

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a6043ae8ab78ecf1e75ff2014cd6a7bde3319341fe1bd7a8df335a0764355b70
size 10778444

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fe402be2467f4d333366ed3cccb584f55bea31d72f2c8ed9bc90d1ae32d77dfc
size 10774044

View File

@ -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

View File

@ -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.

View File

@ -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 $@

View File

@ -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

View File

@ -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,

View File

@ -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