[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/8] viridian: extend init/deinit hooks into synic and time modules
This patch simply adds domain and vcpu init/deinit hooks into the synic and time modules and wires them into viridian_[domain|vcpu]_[init|deinit](). Only one of the hooks is currently needed (to unmap the 'VP Assist' page) but subsequent patches will make use of the others. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> Cc: "Roger Pau Monné" <roger.pau@xxxxxxxxxx> --- xen/arch/x86/hvm/viridian/private.h | 12 ++++++++++++ xen/arch/x86/hvm/viridian/synic.c | 19 +++++++++++++++++++ xen/arch/x86/hvm/viridian/time.c | 18 ++++++++++++++++++ xen/arch/x86/hvm/viridian/viridian.c | 14 +++++++++++++- 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/viridian/private.h b/xen/arch/x86/hvm/viridian/private.h index 398b22f12d..040c3c991d 100644 --- a/xen/arch/x86/hvm/viridian/private.h +++ b/xen/arch/x86/hvm/viridian/private.h @@ -74,6 +74,12 @@ int viridian_synic_wrmsr(struct vcpu *v, uint32_t idx, uint64_t val); int viridian_synic_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val); +int viridian_synic_vcpu_init(struct vcpu *v); +int viridian_synic_domain_init(struct domain *d); + +void viridian_synic_vcpu_deinit(struct vcpu *v); +void viridian_synic_domain_deinit(struct domain *d); + void viridian_synic_save_vcpu_ctxt(const struct vcpu *v, struct hvm_viridian_vcpu_context *ctxt); void viridian_synic_load_vcpu_ctxt( @@ -82,6 +88,12 @@ void viridian_synic_load_vcpu_ctxt( int viridian_time_wrmsr(struct vcpu *v, uint32_t idx, uint64_t val); int viridian_time_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val); +int viridian_time_vcpu_init(struct vcpu *v); +int viridian_time_domain_init(struct domain *d); + +void viridian_time_vcpu_deinit(struct vcpu *v); +void viridian_time_domain_deinit(struct domain *d); + void viridian_time_save_domain_ctxt( const struct domain *d, struct hvm_viridian_domain_context *ctxt); void viridian_time_load_domain_ctxt( diff --git a/xen/arch/x86/hvm/viridian/synic.c b/xen/arch/x86/hvm/viridian/synic.c index 20731c2379..9892bf279d 100644 --- a/xen/arch/x86/hvm/viridian/synic.c +++ b/xen/arch/x86/hvm/viridian/synic.c @@ -143,6 +143,25 @@ int viridian_synic_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val) return X86EMUL_OKAY; } +int viridian_synic_vcpu_init(struct vcpu *v) +{ + return 0; +} + +int viridian_synic_domain_init(struct domain *d) +{ + return 0; +} + +void viridian_synic_vcpu_deinit(struct vcpu *v) +{ + viridian_unmap_guest_page(&v->arch.hvm.viridian->vp_assist); +} + +void viridian_synic_domain_deinit(struct domain *d) +{ +} + void viridian_synic_save_vcpu_ctxt(const struct vcpu *v, struct hvm_viridian_vcpu_context *ctxt) { diff --git a/xen/arch/x86/hvm/viridian/time.c b/xen/arch/x86/hvm/viridian/time.c index 42367f6460..b1d67035e4 100644 --- a/xen/arch/x86/hvm/viridian/time.c +++ b/xen/arch/x86/hvm/viridian/time.c @@ -214,6 +214,24 @@ int viridian_time_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val) return X86EMUL_OKAY; } +int viridian_time_vcpu_init(struct vcpu *v) +{ + return 0; +} + +int viridian_time_domain_init(struct domain *d) +{ + return 0; +} + +void viridian_time_vcpu_deinit(struct vcpu *v) +{ +} + +void viridian_time_domain_deinit(struct domain *d) +{ +} + void viridian_time_save_domain_ctxt( const struct domain *d, struct hvm_viridian_domain_context *ctxt) { diff --git a/xen/arch/x86/hvm/viridian/viridian.c b/xen/arch/x86/hvm/viridian/viridian.c index e200e2ed1d..4c0f04df8c 100644 --- a/xen/arch/x86/hvm/viridian/viridian.c +++ b/xen/arch/x86/hvm/viridian/viridian.c @@ -424,6 +424,9 @@ int viridian_vcpu_init(struct vcpu *v) if ( !v->arch.hvm.viridian ) return -ENOMEM; + viridian_synic_vcpu_init(v); + viridian_time_vcpu_init(v); + return 0; } @@ -434,6 +437,9 @@ int viridian_domain_init(struct domain *d) if ( !d->arch.hvm.viridian ) return -ENOMEM; + viridian_synic_domain_init(d); + viridian_time_domain_init(d); + return 0; } @@ -443,7 +449,10 @@ void viridian_vcpu_deinit(struct vcpu *v) return; if ( is_viridian_vcpu(v) ) - viridian_synic_wrmsr(v, HV_X64_MSR_VP_ASSIST_PAGE, 0); + { + viridian_time_vcpu_deinit(v); + viridian_synic_vcpu_deinit(v); + } xfree(v->arch.hvm.viridian); v->arch.hvm.viridian = NULL; @@ -459,6 +468,9 @@ void viridian_domain_deinit(struct domain *d) if ( !d->arch.hvm.viridian ) return; + viridian_time_domain_deinit(d); + viridian_synic_domain_deinit(d); + xfree(d->arch.hvm.viridian); d->arch.hvm.viridian = NULL; } -- 2.20.1.2.gb21ebb671 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |