- linux pvdrv: generalize location of autoconf.h

Fixes error because of missing autoconf.h when building os11.2
  Factory.

- bnc#609153 - xm migrate <domain_name> localhost -l fails on
  Windows VMs
  21615-dont-save-xen-heap-pages.patch
- Upstream fixes from Jan
  21446-iommu-graceful-generic-fail.patch
  21453-shadow-avoid-remove-all-after-teardown.patch
  21456-compat-hvm-addr-check.patch
  21492-x86-pirq-unbind.patch
  21526-x86-nehalem-cpuid-mask.patch
  21620-x86-signed-domain-irq.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=59
This commit is contained in:
Charles Arnold 2010-06-16 15:28:05 +00:00 committed by Git OBS Bridge
parent c0ae4235b7
commit 7143fd3903
11 changed files with 479 additions and 32 deletions

26
21273-linux-autconf.patch Normal file
View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1272973376 -3600
# Node ID d2373000996d850c46297740fbd11ea1d93d59d9
# Parent b07edd50661e7f768088c08215dabb9becb5c5b6
linux pvdrv: generalize location of autoconf.h
The location of the file in the build tree changed in recent Linux;
since there can be only one such file, using a wild card instead of
an explicit directory name seems the easiest solution.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/overrides.mk
===================================================================
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/overrides.mk
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/overrides.mk
@@ -11,7 +11,7 @@ ifeq ($(ARCH),ia64)
_XEN_CPPFLAGS += -DCONFIG_VMX_GUEST
endif
-_XEN_CPPFLAGS += -include $(objtree)/include/linux/autoconf.h
+_XEN_CPPFLAGS += -include $(wildcard $(objtree)/include/*/autoconf.h)
EXTRA_CFLAGS += $(_XEN_CPPFLAGS)
EXTRA_AFLAGS += $(_XEN_CPPFLAGS)

View File

@ -0,0 +1,29 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1274506601 -3600
# Node ID 93410e5e4ad8799932ad31820d0d82c74d1f63a2
# Parent c1ed00d495342334980be576bbb8a2b1037b89c9
iommu: Gracefully fail to initialise iommu on generic x86 platforms.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
--- a/xen/include/asm-x86/hvm/iommu.h
+++ b/xen/include/asm-x86/hvm/iommu.h
@@ -1,6 +1,8 @@
#ifndef __ASM_X86_HVM_IOMMU_H__
#define __ASM_X86_HVM_IOMMU_H__
+#include <xen/errno.h>
+
struct iommu_ops;
extern const struct iommu_ops intel_iommu_ops;
extern const struct iommu_ops amd_iommu_ops;
@@ -31,7 +33,7 @@ static inline int iommu_hardware_setup(v
case X86_VENDOR_AMD:
return amd_iov_detect();
default:
- BUG();
+ return -ENODEV;
}
return 0;

View File

@ -0,0 +1,31 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1274857281 -3600
# Node ID 5addb6cb16fd64c664b1e3dd335c76b3426e05e9
# Parent 459f35d8cac4f19e6eae0a7396f6c97e20ae955c
x86 shadow: Avoid remove-all-shadows after shadow teardown
If dom0 alters the p2m of a domain that's being destroyed, we can end
up doing a remove-all-shadows after the shadow hash table has been
freed. Since no hash table implies no shadows, just return
immediately.
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -2173,8 +2173,13 @@ static void hash_foreach(struct vcpu *v,
struct domain *d = v->domain;
struct page_info *x;
- /* Say we're here, to stop hash-lookups reordering the chains */
ASSERT(shadow_locked_by_me(d));
+
+ /* Can be called via p2m code &c after shadow teardown. */
+ if ( unlikely(!d->arch.paging.shadow.hash_table) )
+ return;
+
+ /* Say we're here, to stop hash-lookups reordering the chains */
ASSERT(d->arch.paging.shadow.hash_walking == 0);
d->arch.paging.shadow.hash_walking = 1;

View File

@ -0,0 +1,22 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1274857778 -3600
# Node ID a69d09da4917c7b57ceed65224e4bbc389601081
# Parent 32cdd423d4ebab2b2d03a4501be08438c5dc7050
compat-guest accessor macros do not need address check for hvm guests.
Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
--- a/xen/include/xen/compat.h
+++ b/xen/include/xen/compat.h
@@ -90,8 +90,9 @@
* Allows use of faster __copy_* functions.
*/
#define compat_handle_okay(hnd, nr) \
+ (paging_mode_external(current->domain) || \
compat_array_access_ok((void *)(full_ptr_t)(hnd).c, (nr), \
- sizeof(**(hnd)._))
+ sizeof(**(hnd)._)))
#define __copy_to_compat_offset(hnd, off, ptr, nr) ({ \
const typeof(*(ptr)) *_s = (ptr); \

View File

@ -0,0 +1,23 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1275040447 -3600
# Node ID 96917cf25bf3ad42c6b6cddb7ff4f03857ae9619
# Parent 95acf74586d782d8d4d39016b3426a1eae127e97
x86: Fix guest-pointer-array memmove in __pirq_guest_unbind().
Thanks to Alex Zefefrt for finding this.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -1242,7 +1242,8 @@ static irq_guest_action_t *__pirq_guest_
for ( i = 0; (i < action->nr_guests) && (action->guest[i] != d); i++ )
continue;
BUG_ON(i == action->nr_guests);
- memmove(&action->guest[i], &action->guest[i+1], IRQ_MAX_GUESTS-i-1);
+ memmove(&action->guest[i], &action->guest[i+1],
+ (action->nr_guests-i-1) * sizeof(action->guest[0]));
action->nr_guests--;
switch ( action->ack_type )

View File

@ -0,0 +1,99 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1275643111 -3600
# Node ID 48e2b07cf01c044bf483bd7fa5408a6f9801416b
# Parent f2b1924f20281bc42fa3532c7d82b3ee0700aff4
Intel: Add CPUID feature mask support for NHM processors.
Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
Signed-off-by: Liping Ke <liping.ke@intel.com>
--- a/xen/arch/x86/cpu/intel.c
+++ b/xen/arch/x86/cpu/intel.c
@@ -29,6 +29,9 @@ extern int trap_init_f00f_bug(void);
static unsigned int opt_cpuid_mask_ecx, opt_cpuid_mask_edx;
integer_param("cpuid_mask_ecx", opt_cpuid_mask_ecx);
integer_param("cpuid_mask_edx", opt_cpuid_mask_edx);
+static unsigned int opt_cpuid_mask_ext_ecx, opt_cpuid_mask_ext_edx;
+integer_param("cpuid_mask_ext_ecx", opt_cpuid_mask_ext_ecx);
+integer_param("cpuid_mask_ext_edx", opt_cpuid_mask_ext_edx);
static int use_xsave = 1;
boolean_param("xsave", use_xsave);
@@ -40,24 +43,46 @@ boolean_param("xsave", use_xsave);
struct movsl_mask movsl_mask __read_mostly;
#endif
-static void __devinit set_cpuidmask(void)
+static void __devinit set_cpuidmask(struct cpuinfo_x86 *c)
{
- unsigned int eax, ebx, ecx, edx, model;
+ unsigned int model = c->x86_model;
- if (!(opt_cpuid_mask_ecx | opt_cpuid_mask_edx))
+ if (!(opt_cpuid_mask_ecx | opt_cpuid_mask_edx |
+ opt_cpuid_mask_ext_ecx | opt_cpuid_mask_ext_edx))
return;
- cpuid(0x00000001, &eax, &ebx, &ecx, &edx);
- model = ((eax & 0xf0000) >> 12) | ((eax & 0xf0) >> 4);
- if (!((model == 0x1d) || ((model == 0x17) && ((eax & 0xf) >= 4)))) {
+ if (c->x86 != 0x6) /* Only family 6 supports this feature */
+ return;
+
+ if ((model == 0x1d) || ((model == 0x17) && (c->x86_mask >= 4))) {
+ wrmsr(MSR_IA32_CPUID_FEATURE_MASK1,
+ opt_cpuid_mask_ecx ? : ~0u,
+ opt_cpuid_mask_edx ? : ~0u);
+ }
+/*
+ * CPU supports this feature if the processor signature meets the following:
+ * (CPUID.(EAX=01h):EAX) > 000106A2h, or
+ * (CPUID.(EAX=01h):EAX) == 000106Exh, 0002065xh, 000206Cxh, 000206Exh, or 000206Fxh
+ *
+ */
+ else if (((model == 0x1a) && (c->x86_mask > 2))
+ || model == 0x1e
+ || model == 0x25
+ || model == 0x2c
+ || model == 0x2e
+ || model == 0x2f) {
+ wrmsr(MSR_IA32_CPUID1_FEATURE_MASK,
+ opt_cpuid_mask_ecx ? : ~0u,
+ opt_cpuid_mask_edx ? : ~0u);
+ wrmsr(MSR_IA32_CPUID80000001_FEATURE_MASK,
+ opt_cpuid_mask_ext_ecx ? : ~0u,
+ opt_cpuid_mask_ext_edx ? : ~0u);
+ }
+ else {
printk(XENLOG_ERR "Cannot set CPU feature mask on CPU#%d\n",
smp_processor_id());
return;
}
-
- wrmsr(MSR_IA32_CPUID_FEATURE_MASK1,
- opt_cpuid_mask_ecx ? : ~0u,
- opt_cpuid_mask_edx ? : ~0u);
}
void __devinit early_intel_workaround(struct cpuinfo_x86 *c)
@@ -179,7 +204,7 @@ static void __devinit init_intel(struct
detect_ht(c);
- set_cpuidmask();
+ set_cpuidmask(c);
/* Work around errata */
Intel_errata_workarounds(c);
--- a/xen/include/asm-x86/msr-index.h
+++ b/xen/include/asm-x86/msr-index.h
@@ -158,6 +158,8 @@
/* MSR for cpuid feature mask */
#define MSR_IA32_CPUID_FEATURE_MASK1 0x00000478
+#define MSR_IA32_CPUID1_FEATURE_MASK 0x00000130
+#define MSR_IA32_CPUID80000001_FEATURE_MASK 0x00000131
/* MSRs & bits used for VMX enabling */
#define MSR_IA32_VMX_BASIC 0x480

View File

@ -0,0 +1,159 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1276604289 -3600
# Node ID a2cc1db1af9c8f9b148c80f8b2c3f64bde7542f9
# Parent 094b826a2b8e2c17fe7004923352d459e0c23f13
Don't save Xen heap pages during domain save
References: bnc#609153
As discussed in the thread starting at
http://lists.xensource.com/archives/html/xen-devel/2010-05/msg01383.html,
don't save Xen heap pages in order to avoid overallocation when the
domain gets restored, as those pages would get (temporarily) backed
with normal RAM pages by the restore code.
This requires making DOMCTL_getpageframeinfo{2,3} usable for HVM
guests, meaning that the input to these must be treated as GMFNs.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/tools/libxc/xc_domain_save.c
+++ b/tools/libxc/xc_domain_save.c
@@ -1282,58 +1282,64 @@ int xc_domain_save(int xc_handle, int io
goto out;
}
- if ( hvm )
+ /* Get page types */
+ if ( xc_get_pfn_type_batch(xc_handle, dom, batch, pfn_type) )
{
- /* Look for and skip completely empty batches. */
- for ( j = 0; j < batch; j++ )
- {
- if ( !pfn_err[j] )
- break;
- pfn_type[j] |= XEN_DOMCTL_PFINFO_XTAB;
- }
- if ( j == batch )
- {
- munmap(region_base, batch*PAGE_SIZE);
- continue; /* bail on this batch: no valid pages */
- }
- for ( ; j < batch; j++ )
- if ( pfn_err[j] )
- pfn_type[j] |= XEN_DOMCTL_PFINFO_XTAB;
+ ERROR("get_pfn_type_batch failed");
+ goto out;
}
- else
+
+ for ( run = j = 0; j < batch; j++ )
{
- /* Get page types */
- if ( xc_get_pfn_type_batch(xc_handle, dom, batch, pfn_type) )
- {
- ERROR("get_pfn_type_batch failed");
- goto out;
- }
+ unsigned long gmfn = pfn_batch[j];
- for ( j = 0; j < batch; j++ )
+ if ( !hvm )
+ gmfn = pfn_to_mfn(gmfn);
+
+ if ( pfn_err[j] )
{
- unsigned long mfn = pfn_to_mfn(pfn_batch[j]);
-
if ( pfn_type[j] == XEN_DOMCTL_PFINFO_XTAB )
- {
- DPRINTF("type fail: page %i mfn %08lx\n",
- j, mfn);
continue;
- }
-
- if ( debug )
+ DPRINTF("map fail: page %i mfn %08lx err %d\n",
+ j, gmfn, pfn_err[j]);
+ pfn_type[j] = XEN_DOMCTL_PFINFO_XTAB;
+ continue;
+ }
+
+ if ( pfn_type[j] == XEN_DOMCTL_PFINFO_XTAB )
+ {
+ DPRINTF("type fail: page %i mfn %08lx\n", j, gmfn);
+ continue;
+ }
+
+ /* canonicalise mfn->pfn */
+ pfn_type[j] |= pfn_batch[j];
+ ++run;
+
+ if ( debug )
+ {
+ if ( hvm )
+ DPRINTF("%d pfn=%08lx sum=%08lx\n",
+ iter,
+ pfn_type[j],
+ csum_page(region_base + (PAGE_SIZE*j)));
+ else
DPRINTF("%d pfn= %08lx mfn= %08lx [mfn]= %08lx"
" sum= %08lx\n",
iter,
- pfn_type[j] | pfn_batch[j],
- mfn,
- mfn_to_pfn(mfn),
+ pfn_type[j],
+ gmfn,
+ mfn_to_pfn(gmfn),
csum_page(region_base + (PAGE_SIZE*j)));
-
- /* canonicalise mfn->pfn */
- pfn_type[j] |= pfn_batch[j];
}
}
+ if ( !run )
+ {
+ munmap(region_base, batch*PAGE_SIZE);
+ continue; /* bail on this batch: no valid pages */
+ }
+
if ( write_exact(io_fd, &batch, sizeof(unsigned int)) )
{
PERROR("Error when writing to state file (2)");
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -207,11 +207,12 @@ long arch_do_domctl(
for ( j = 0; j < k; j++ )
{
- unsigned long type = 0, mfn = arr[j];
+ unsigned long type = 0, mfn = gmfn_to_mfn(d, arr[j]);
page = mfn_to_page(mfn);
- if ( unlikely(!mfn_valid(mfn)) )
+ if ( unlikely(!mfn_valid(mfn)) ||
+ unlikely(is_xen_heap_mfn(mfn)) )
type = XEN_DOMCTL_PFINFO_XTAB;
else if ( xsm_getpageframeinfo(page) != 0 )
;
@@ -306,14 +307,15 @@ long arch_do_domctl(
for ( j = 0; j < k; j++ )
{
struct page_info *page;
- unsigned long mfn = arr32[j];
+ unsigned long mfn = gmfn_to_mfn(d, arr32[j]);
page = mfn_to_page(mfn);
if ( domctl->cmd == XEN_DOMCTL_getpageframeinfo3)
arr32[j] = 0;
- if ( unlikely(!mfn_valid(mfn)) )
+ if ( unlikely(!mfn_valid(mfn)) ||
+ unlikely(is_xen_heap_mfn(mfn)) )
arr32[j] |= XEN_DOMCTL_PFINFO_XTAB;
else if ( xsm_getpageframeinfo(page) != 0 )
continue;

View File

@ -0,0 +1,34 @@
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1276604463 -3600
# Node ID b0f7f710f512aba0fca814467e4f5fe7b906ada3
# Parent 972b7e305138759d4ef42b75d5fe5c6fd2d2e30c
x86: return value of domain_pirq_to_irq() is signed
That value can, for forcibly unbound PIRQs, validly be negative, and
for the respective check to catch those cases (and prevent using these
negative values as array index), the respective variables must be of
signed type.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -879,7 +879,7 @@ static void __do_IRQ_guest(int irq)
struct irq_desc *domain_spin_lock_irq_desc(
struct domain *d, int pirq, unsigned long *pflags)
{
- unsigned int irq;
+ int irq;
unsigned long flags;
struct irq_desc *desc;
@@ -1046,7 +1046,7 @@ extern int ioapic_ack_new;
static int pirq_acktype(struct domain *d, int pirq)
{
struct irq_desc *desc;
- unsigned int irq;
+ int irq;
irq = domain_pirq_to_irq(d, pirq);
if ( irq <= 0 )

View File

@ -12,16 +12,3 @@ Index: xen-4.0.0-testing/tools/ioemu-remote/block-vvfat.c
}
/* Now build FAT, and write back information into directory */
Index: xen-4.0.0-testing/unmodified_drivers/linux-2.6/overrides.mk
===================================================================
--- xen-4.0.0-testing.orig/unmodified_drivers/linux-2.6/overrides.mk
+++ xen-4.0.0-testing/unmodified_drivers/linux-2.6/overrides.mk
@@ -11,7 +11,7 @@ ifeq ($(ARCH),ia64)
_XEN_CPPFLAGS += -DCONFIG_VMX_GUEST
endif
-_XEN_CPPFLAGS += -include $(objtree)/include/linux/autoconf.h
+_XEN_CPPFLAGS += -include $(objtree)/include/generated/autoconf.h
EXTRA_CFLAGS += $(_XEN_CPPFLAGS)
EXTRA_AFLAGS += $(_XEN_CPPFLAGS)

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------
Wed Jun 16 08:36:44 MDT 2010 - carnold@novell.com
- linux pvdrv: generalize location of autoconf.h
Fixes error because of missing autoconf.h when building os11.2
Factory.
-------------------------------------------------------------------
Mon Jun 14 10:00:07 MDT 2010 - carnold@novell.com
- bnc#609153 - xm migrate <domain_name> localhost -l fails on
Windows VMs
21615-dont-save-xen-heap-pages.patch
- Upstream fixes from Jan
21446-iommu-graceful-generic-fail.patch
21453-shadow-avoid-remove-all-after-teardown.patch
21456-compat-hvm-addr-check.patch
21492-x86-pirq-unbind.patch
21526-x86-nehalem-cpuid-mask.patch
21620-x86-signed-domain-irq.patch
-------------------------------------------------------------------
Mon Jun 7 10:55:20 MDT 2010 - carnold@novell.com

View File

@ -90,25 +90,33 @@ Patch12: 21235-crashkernel-advanced.patch
Patch13: 21266-vmx-disabled-check.patch
Patch14: 21271-x86-cache-flush-global.patch
Patch15: 21272-x86-dom0-alloc-performance.patch
Patch16: 21301-svm-lmsl.patch
Patch17: 21304-keyhandler-alternative.patch
Patch18: 21317-xend-blkif-util-tap2.patch
Patch19: passthrough-hotplug-segfault.patch
Patch20: 21331-svm-vintr-during-nmi.patch
Patch21: 21333-xentrace-t_info-size.patch
Patch22: 21340-vtd-dom0-mapping-latency.patch
Patch23: 21346-x86-platform-timer-wrap.patch
Patch24: 21349-x86-memcpy.patch
Patch25: 21360-x86-mce-polling-diabled-init.patch
Patch26: 21372-x86-cross-cpu-wait.patch
Patch27: 21373-dummy-domain-io-caps.patch
Patch28: 21406-x86-microcode-quiet.patch
Patch29: 21408-amd-erratum-383.patch
Patch30: 21421-vts-ats-enabling.patch
Patch31: 21435-vmx-retain-global-controls.patch
Patch32: 21459-block-script.patch
Patch33: 21460-xend-timeoffset.patch
Patch34: 21542-amd-erratum-411.patch
Patch16: 21273-linux-autconf.patch
Patch17: 21301-svm-lmsl.patch
Patch18: 21304-keyhandler-alternative.patch
Patch19: 21317-xend-blkif-util-tap2.patch
Patch20: passthrough-hotplug-segfault.patch
Patch21: 21331-svm-vintr-during-nmi.patch
Patch22: 21333-xentrace-t_info-size.patch
Patch23: 21340-vtd-dom0-mapping-latency.patch
Patch24: 21346-x86-platform-timer-wrap.patch
Patch25: 21349-x86-memcpy.patch
Patch26: 21360-x86-mce-polling-diabled-init.patch
Patch27: 21372-x86-cross-cpu-wait.patch
Patch28: 21373-dummy-domain-io-caps.patch
Patch29: 21406-x86-microcode-quiet.patch
Patch30: 21408-amd-erratum-383.patch
Patch31: 21421-vts-ats-enabling.patch
Patch32: 21435-vmx-retain-global-controls.patch
Patch33: 21446-iommu-graceful-generic-fail.patch
Patch34: 21453-shadow-avoid-remove-all-after-teardown.patch
Patch35: 21456-compat-hvm-addr-check.patch
Patch36: 21459-block-script.patch
Patch37: 21460-xend-timeoffset.patch
Patch38: 21492-x86-pirq-unbind.patch
Patch39: 21526-x86-nehalem-cpuid-mask.patch
Patch40: 21542-amd-erratum-411.patch
Patch41: 21615-dont-save-xen-heap-pages.patch
Patch42: 21620-x86-signed-domain-irq.patch
# Our patches
Patch300: xen-config.diff
Patch301: xend-config.diff
@ -587,6 +595,14 @@ Authors:
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%patch300 -p1
%patch301 -p1
%patch302 -p1