514b8cf8ec
- bnc# 578910 - xm block-detach does not cleanup xenstore hotplug-cleanup-fix.patch - bnc#579361 - Windows Server 2003 cannot wake up from stand by in sp1 hibernate.patch - fate#308852: XEN CPU Pools cpupools-core.patch cpupools-core-fixup.patch keyhandler-alternative.patch cpu-pools-libxc.patch cpu-pools-python.patch cpu-pools-libxen.patch cpu-pools-xmtest.patch cpu-pools-docs.patch - bnc#558760: Disable scsi devices when PV drivers are loaded. - Update to changeset 20951 Xen 4.0.0 RC4 for sle11-sp1 beta5. - bnc#572146 - SLES11 SP1 beta 2 Xen - BUG: soft lockup - CPU#31 stuck for 61s! [kstop/31:4512] cpuidle-hint-v3.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=31
204 lines
6.2 KiB
Diff
204 lines
6.2 KiB
Diff
Index: xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/include/asm-x86/hvm/domain.h
|
|
+++ xen-4.0.0-testing/xen/include/asm-x86/hvm/domain.h
|
|
@@ -98,6 +98,7 @@ struct hvm_domain {
|
|
struct vmx_domain vmx;
|
|
struct svm_domain svm;
|
|
};
|
|
+ void *hyperv_handle; /* will be NULL on creation*/
|
|
};
|
|
|
|
#endif /* __ASM_X86_HVM_DOMAIN_H__ */
|
|
Index: xen-4.0.0-testing/xen/arch/x86/hvm/Makefile
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/Makefile
|
|
+++ xen-4.0.0-testing/xen/arch/x86/hvm/Makefile
|
|
@@ -1,5 +1,6 @@
|
|
subdir-y += svm
|
|
subdir-y += vmx
|
|
+subdir-$(x86_64) += hyperv
|
|
|
|
obj-y += asid.o
|
|
obj-y += emulate.o
|
|
Index: xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/hvm.c
|
|
+++ xen-4.0.0-testing/xen/arch/x86/hvm/hvm.c
|
|
@@ -48,6 +48,7 @@
|
|
#include <asm/mc146818rtc.h>
|
|
#include <asm/spinlock.h>
|
|
#include <asm/hvm/hvm.h>
|
|
+#include <asm/hvm/hvm_extensions.h>
|
|
#include <asm/hvm/vpt.h>
|
|
#include <asm/hvm/support.h>
|
|
#include <asm/hvm/cacheattr.h>
|
|
@@ -461,6 +462,7 @@ void hvm_domain_relinquish_resources(str
|
|
|
|
void hvm_domain_destroy(struct domain *d)
|
|
{
|
|
+ hyperx_intercept_domain_destroy(d);
|
|
hvm_funcs.domain_destroy(d);
|
|
rtc_deinit(d);
|
|
stdvga_deinit(d);
|
|
@@ -782,8 +784,14 @@ int hvm_vcpu_initialise(struct vcpu *v)
|
|
v->arch.hvm_vcpu.xfeature_mask = XSTATE_FP_SSE;
|
|
}
|
|
|
|
+ if ((rc = hyperx_intercept_vcpu_initialize(v)) != 0)
|
|
+ goto fail1;
|
|
+
|
|
if ( (rc = vlapic_init(v)) != 0 )
|
|
+ {
|
|
+ hyperx_intercept_vcpu_destroy(v);
|
|
goto fail1;
|
|
+ }
|
|
|
|
if ( (rc = hvm_funcs.vcpu_initialise(v)) != 0 )
|
|
goto fail2;
|
|
@@ -834,12 +842,14 @@ int hvm_vcpu_initialise(struct vcpu *v)
|
|
hvm_funcs.vcpu_destroy(v);
|
|
fail2:
|
|
vlapic_destroy(v);
|
|
+ hyperx_intercept_vcpu_destroy(v);
|
|
fail1:
|
|
return rc;
|
|
}
|
|
|
|
void hvm_vcpu_destroy(struct vcpu *v)
|
|
{
|
|
+ hyperx_intercept_vcpu_destroy(v);
|
|
tasklet_kill(&v->arch.hvm_vcpu.assert_evtchn_irq_tasklet);
|
|
hvm_vcpu_cacheattr_destroy(v);
|
|
vlapic_destroy(v);
|
|
@@ -1897,7 +1907,7 @@ void hvm_cpuid(unsigned int input, unsig
|
|
return;
|
|
|
|
if ( cpuid_hypervisor_leaves(input, count, eax, ebx, ecx, edx) )
|
|
- return;
|
|
+ goto hvm_cpuid_done;
|
|
|
|
domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx);
|
|
|
|
@@ -1964,6 +1974,8 @@ void hvm_cpuid(unsigned int input, unsig
|
|
*edx &= ~bitmaskof(X86_FEATURE_RDTSCP);
|
|
break;
|
|
}
|
|
+hvm_cpuid_done:
|
|
+ hyperx_intercept_do_cpuid(input, eax, ebx, ecx, edx);
|
|
}
|
|
|
|
void hvm_rdtsc_intercept(struct cpu_user_regs *regs)
|
|
@@ -2064,6 +2076,8 @@ int hvm_msr_read_intercept(struct cpu_us
|
|
break;
|
|
/* ret == 0, This is not an MCE MSR, see other MSRs */
|
|
else if (!ret)
|
|
+ if (hyperx_intercept_do_msr_read(ecx, regs))
|
|
+ return X86EMUL_OKAY;
|
|
return hvm_funcs.msr_read_intercept(regs);
|
|
}
|
|
|
|
@@ -2162,6 +2176,8 @@ int hvm_msr_write_intercept(struct cpu_u
|
|
else if ( ret )
|
|
break;
|
|
else if (!ret)
|
|
+ if (hyperx_intercept_do_msr_write(ecx, regs))
|
|
+ return X86EMUL_OKAY;
|
|
return hvm_funcs.msr_write_intercept(regs);
|
|
}
|
|
|
|
@@ -2354,6 +2370,10 @@ int hvm_do_hypercall(struct cpu_user_reg
|
|
case 0:
|
|
break;
|
|
}
|
|
+ if (hyperx_intercept_do_hypercall(regs))
|
|
+ {
|
|
+ return HVM_HCALL_completed;
|
|
+ }
|
|
|
|
if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) )
|
|
return viridian_hypercall(regs);
|
|
@@ -2888,6 +2908,18 @@ long do_hvm_op(unsigned long op, XEN_GUE
|
|
rc = -EINVAL;
|
|
|
|
break;
|
|
+ case HVM_PARAM_EXTEND_HYPERVISOR:
|
|
+#ifdef __x86_64__
|
|
+ if (a.value != 1)
|
|
+ rc = -EINVAL;
|
|
+ else if (hyperv_initialize(d))
|
|
+ rc = -ENOMEM;
|
|
+ else
|
|
+ break;
|
|
+#else
|
|
+ rc = -EINVAL;
|
|
+#endif
|
|
+ goto param_fail;
|
|
}
|
|
|
|
if ( rc == 0 )
|
|
Index: xen-4.0.0-testing/xen/include/public/arch-x86/hvm/save.h
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/include/public/arch-x86/hvm/save.h
|
|
+++ xen-4.0.0-testing/xen/include/public/arch-x86/hvm/save.h
|
|
@@ -431,9 +431,24 @@ struct hvm_viridian_context {
|
|
|
|
DECLARE_HVM_SAVE_TYPE(VIRIDIAN, 15, struct hvm_viridian_context);
|
|
|
|
+struct hvm_hyperv_dom {
|
|
+ uint64_t guestid_msr;
|
|
+ uint64_t hypercall_msr;
|
|
+ uint32_t long_mode;
|
|
+ uint32_t ext_id;
|
|
+};
|
|
+DECLARE_HVM_SAVE_TYPE(HYPERV_DOM, 16, struct hvm_hyperv_dom);
|
|
+
|
|
+struct hvm_hyperv_cpu {
|
|
+ uint64_t control_msr;
|
|
+ uint64_t version_msr;
|
|
+ uint64_t pad[27]; //KYS: sles10 sp2 compatibility
|
|
+};
|
|
+DECLARE_HVM_SAVE_TYPE(HYPERV_CPU, 17, struct hvm_hyperv_cpu);
|
|
+
|
|
/*
|
|
* Largest type-code in use
|
|
*/
|
|
-#define HVM_SAVE_CODE_MAX 15
|
|
+#define HVM_SAVE_CODE_MAX 17
|
|
|
|
#endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */
|
|
Index: xen-4.0.0-testing/xen/arch/x86/hvm/vlapic.c
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/arch/x86/hvm/vlapic.c
|
|
+++ xen-4.0.0-testing/xen/arch/x86/hvm/vlapic.c
|
|
@@ -34,6 +34,7 @@
|
|
#include <asm/hvm/hvm.h>
|
|
#include <asm/hvm/io.h>
|
|
#include <asm/hvm/support.h>
|
|
+#include <asm/hvm/hvm_extensions.h>
|
|
#include <asm/hvm/vmx/vmx.h>
|
|
#include <public/hvm/ioreq.h>
|
|
#include <public/hvm/params.h>
|
|
@@ -291,6 +292,7 @@ static int vlapic_accept_sipi(struct vcp
|
|
hvm_vcpu_reset_state(v, trampoline_vector << 8, 0);
|
|
|
|
vcpu_unpause(v);
|
|
+ hyperx_intercept_vcpu_up(v);
|
|
|
|
return X86EMUL_OKAY;
|
|
}
|
|
Index: xen-4.0.0-testing/xen/include/public/hvm/params.h
|
|
===================================================================
|
|
--- xen-4.0.0-testing.orig/xen/include/public/hvm/params.h
|
|
+++ xen-4.0.0-testing/xen/include/public/hvm/params.h
|
|
@@ -106,6 +106,8 @@
|
|
/* Boolean: Enable aligning all periodic vpts to reduce interrupts */
|
|
#define HVM_PARAM_VPT_ALIGN 16
|
|
|
|
-#define HVM_NR_PARAMS 17
|
|
+#define HVM_PARAM_EXTEND_HYPERVISOR 17
|
|
+
|
|
+#define HVM_NR_PARAMS 18
|
|
|
|
#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
|