From: Jan Beulich Date: Thu, 21 Jan 2016 15:10:19 +0000 (+0100) Subject: x86/paging: invlpg() hook returns boolean X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=344e852bf0866dfa9886c8328b23a2563aca8a32;p=people%2Fliuw%2Flibxenctrl-split%2Fxen.git x86/paging: invlpg() hook returns boolean ... so make its return type reflect this. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Acked-by: Tim Deegan Acked-by: George Dunlap --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index f5b89dee61..fcf6577dbb 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4392,8 +4392,7 @@ static int __do_update_va_mapping( switch ( (bmap_ptr = flags & ~UVMF_FLUSHTYPE_MASK) ) { case UVMF_LOCAL: - if ( !paging_mode_enabled(d) || - (paging_invlpg(v, va) != 0) ) + if ( !paging_mode_enabled(d) || paging_invlpg(v, va) ) flush_tlb_one_local(va); break; case UVMF_ALL: diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 17a380fb38..ee87825a39 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -680,7 +680,7 @@ static int hap_page_fault(struct vcpu *v, unsigned long va, * HAP guests can handle invlpg without needing any action from Xen, so * should not be intercepting it. */ -static int hap_invlpg(struct vcpu *v, unsigned long va) +static bool_t hap_invlpg(struct vcpu *v, unsigned long va) { if (nestedhvm_enabled(v->domain)) { /* Emulate INVLPGA: diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 58f7e7216e..162c06fba4 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3510,11 +3510,12 @@ propagate: } -static int -sh_invlpg(struct vcpu *v, unsigned long va) -/* Called when the guest requests an invlpg. Returns 1 if the invlpg +/* + * Called when the guest requests an invlpg. Returns 1 if the invlpg * instruction should be issued on the hardware, or 0 if it's safe not - * to do so. */ + * to do so. + */ +static bool_t sh_invlpg(struct vcpu *v, unsigned long va) { mfn_t sl1mfn; shadow_l2e_t sl2e; diff --git a/xen/arch/x86/mm/shadow/none.c b/xen/arch/x86/mm/shadow/none.c index 9526443b9a..38bdf9232c 100644 --- a/xen/arch/x86/mm/shadow/none.c +++ b/xen/arch/x86/mm/shadow/none.c @@ -32,10 +32,10 @@ static int _page_fault(struct vcpu *v, unsigned long va, return 0; } -static int _invlpg(struct vcpu *v, unsigned long va) +static bool_t _invlpg(struct vcpu *v, unsigned long va) { ASSERT_UNREACHABLE(); - return -EOPNOTSUPP; + return 1; } static unsigned long _gva_to_gfn(struct vcpu *v, struct p2m_domain *p2m, diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h index c4129530a6..9a8653dddb 100644 --- a/xen/include/asm-x86/paging.h +++ b/xen/include/asm-x86/paging.h @@ -104,7 +104,7 @@ struct shadow_paging_mode { struct paging_mode { int (*page_fault )(struct vcpu *v, unsigned long va, struct cpu_user_regs *regs); - int (*invlpg )(struct vcpu *v, unsigned long va); + bool_t (*invlpg )(struct vcpu *v, unsigned long va); unsigned long (*gva_to_gfn )(struct vcpu *v, struct p2m_domain *p2m, unsigned long va, @@ -243,7 +243,7 @@ paging_fault(unsigned long va, struct cpu_user_regs *regs) /* Handle invlpg requests on vcpus. * Returns 1 if the invlpg instruction should be issued on the hardware, * or 0 if it's safe not to do so. */ -static inline int paging_invlpg(struct vcpu *v, unsigned long va) +static inline bool_t paging_invlpg(struct vcpu *v, unsigned long va) { return (paging_mode_external(v->domain) ? is_canonical_address(va) : __addr_ok(va)) &&