Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
DISCONTINUED:openSUSE:11.1:Update
xen
hv_xen_base.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File hv_xen_base.patch of Package xen
--- a/xen/include/asm-x86/hvm/domain.h +++ b/xen/include/asm-x86/hvm/domain.h @@ -82,6 +82,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__ */ --- a/xen/arch/x86/hvm/Makefile +++ b/xen/arch/x86/hvm/Makefile @@ -1,5 +1,6 @@ subdir-y += svm subdir-y += vmx +subdir-$(x86_64) += hyperv obj-y += emulate.o obj-y += hvm.o --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -44,6 +44,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> @@ -364,6 +365,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); @@ -666,8 +668,14 @@ int hvm_vcpu_initialise(struct vcpu *v) { int rc; + 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; @@ -718,12 +726,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); @@ -1696,7 +1706,7 @@ void hvm_cpuid(unsigned int input, unsig struct vcpu *v = current; if ( cpuid_hypervisor_leaves(input, eax, ebx, ecx, edx) ) - return; + goto hvm_cpuid_done; domain_cpuid(v->domain, input, *ecx, eax, ebx, ecx, edx); @@ -1714,6 +1724,8 @@ void hvm_cpuid(unsigned int input, unsig *edx = v->vcpu_id * 2; break; } +hvm_cpuid_done: + hyperx_intercept_do_cpuid(input, eax, ebx, ecx, edx); } void hvm_rdtsc_intercept(struct cpu_user_regs *regs) @@ -1813,6 +1825,8 @@ int hvm_msr_read_intercept(struct cpu_us break; default: + if (hyperx_intercept_do_msr_read(ecx, regs)) + return X86EMUL_OKAY; return hvm_funcs.msr_read_intercept(regs); } @@ -1901,6 +1915,8 @@ int hvm_msr_write_intercept(struct cpu_u break; default: + if (hyperx_intercept_do_msr_write(ecx, regs)) + return X86EMUL_OKAY; return hvm_funcs.msr_write_intercept(regs); } @@ -2068,6 +2084,10 @@ int hvm_do_hypercall(struct cpu_user_reg case 0: break; } + if (hyperx_intercept_do_hypercall(regs)) + { + return HVM_HCALL_completed; + } if ( (eax >= NR_hypercalls) || !hvm_hypercall32_table[eax] ) { @@ -2572,6 +2592,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 ) --- a/xen/include/public/arch-x86/hvm/save.h +++ b/xen/include/public/arch-x86/hvm/save.h @@ -421,9 +421,23 @@ struct hvm_hw_mtrr { DECLARE_HVM_SAVE_TYPE(MTRR, 14, struct hvm_hw_mtrr); +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, 15, 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, 16, struct hvm_hyperv_cpu); /* * Largest type-code in use */ -#define HVM_SAVE_CODE_MAX 14 +#define HVM_SAVE_CODE_MAX 16 #endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */ --- a/xen/arch/x86/hvm/vlapic.c +++ b/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> @@ -307,6 +308,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; } --- a/xen/include/public/hvm/params.h +++ b/xen/include/public/hvm/params.h @@ -93,6 +93,8 @@ /* ACPI S state: currently support S0 and S3 on x86. */ #define HVM_PARAM_ACPI_S_STATE 14 -#define HVM_NR_PARAMS 15 +#define HVM_PARAM_EXTEND_HYPERVISOR 15 + +#define HVM_NR_PARAMS 16 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor