[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 31/39] arm/altp2m: Introduce altp2m_switch_vcpu_altp2m_by_id
This commit adds the function "altp2m_switch_vcpu_altp2m_by_id" that is executed after checking whether the vcpu should be switched to a different altp2m within the function "altp2m_check". Signed-off-by: Sergej Proskurin <proskurin@xxxxxxxxxxxxx> --- Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Julien Grall <julien.grall@xxxxxxx> --- v3: This commit has been moved out of the commit "arm/p2m: Add altp2m paging mechanism". Moved the function "p2m_altp2m_check" from p2m.c to altp2m.c and renamed it to "altp2m_check". This change required the adoption of the complementary function in the x86 architecture. v4: Moved code renaming and movement of ARM and x86 related code out of this commit. While parts of this commit have been Acked-by Razvan Cojocaru and George Dunlap in v3, we have removed the Acks as the previous patch has been distributed across multiple smaller patches and now needs to be reviewed again. --- xen/arch/arm/altp2m.c | 32 ++++++++++++++++++++++++++++++++ xen/include/asm-arm/altp2m.h | 6 +----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/altp2m.c b/xen/arch/arm/altp2m.c index 4883b1323b..9c9876c932 100644 --- a/xen/arch/arm/altp2m.c +++ b/xen/arch/arm/altp2m.c @@ -32,6 +32,38 @@ struct p2m_domain *altp2m_get_altp2m(struct vcpu *v) return v->domain->arch.altp2m_p2m[idx]; } +static bool altp2m_switch_vcpu_altp2m_by_id(struct vcpu *v, unsigned int idx) +{ + struct domain *d = v->domain; + bool rc = false; + + if ( unlikely(idx >= MAX_ALTP2M) ) + return rc; + + altp2m_lock(d); + + if ( d->arch.altp2m_p2m[idx] != NULL ) + { + if ( idx != v->arch.ap2m_idx ) + { + atomic_dec(&altp2m_get_altp2m(v)->active_vcpus); + v->arch.ap2m_idx = idx; + atomic_inc(&altp2m_get_altp2m(v)->active_vcpus); + } + rc = true; + } + + altp2m_unlock(d); + + return rc; +} + +void altp2m_check(struct vcpu *v, uint16_t idx) +{ + if ( altp2m_active(v->domain) ) + altp2m_switch_vcpu_altp2m_by_id(v, idx); +} + int altp2m_switch_domain_altp2m_by_id(struct domain *d, unsigned int idx) { struct vcpu *v; diff --git a/xen/include/asm-arm/altp2m.h b/xen/include/asm-arm/altp2m.h index 5a2444e8f8..f9e14ab1dc 100644 --- a/xen/include/asm-arm/altp2m.h +++ b/xen/include/asm-arm/altp2m.h @@ -50,11 +50,7 @@ void altp2m_vcpu_destroy(struct vcpu *v); struct p2m_domain *altp2m_get_altp2m(struct vcpu *v); /* Check to see if vcpu should be switched to a different p2m. */ -static inline -void altp2m_check(struct vcpu *v, uint16_t idx) -{ - /* Not supported on ARM. */ -} +void altp2m_check(struct vcpu *v, uint16_t idx); /* Switch alternate p2m for entire domain */ int altp2m_switch_domain_altp2m_by_id(struct domain *d, -- 2.13.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |