On Thu, 28 Jul 2016, Julien Grall wrote:
> The field vttbr holds the base address of the translation table for
> guest. Its value will depends on how the p2m has been initialized and
> will only be used by the P2M code.
>
> So move the field from arch_domain to p2m_domain. This will also ease
> the implementation of altp2m.
>
> Signed-off-by: Julien Grall
Reviewed-by: Stefano Stabellini
> ---
> Changes in v2:
> - Forgot to add my signed-off-by
> - Fix typo in the commit message
> ---
> xen/arch/arm/p2m.c | 11 +++
> xen/arch/arm/traps.c | 2 +-
> xen/include/asm-arm/domain.h | 1 -
> xen/include/asm-arm/p2m.h| 3 +++
> 4 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
> index 512fd7d..7e524fe 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -107,10 +107,14 @@ void dump_p2m_lookup(struct domain *d, paddr_t addr)
>
> static void p2m_load_VTTBR(struct domain *d)
> {
> +struct p2m_domain *p2m = &d->arch.p2m;
> +
> if ( is_idle_domain(d) )
> return;
> -BUG_ON(!d->arch.vttbr);
> -WRITE_SYSREG64(d->arch.vttbr, VTTBR_EL2);
> +
> +ASSERT(p2m->vttbr);
> +
> +WRITE_SYSREG64(p2m->vttbr, VTTBR_EL2);
> isb(); /* Ensure update is visible */
> }
>
> @@ -1297,8 +1301,7 @@ static int p2m_alloc_table(struct domain *d)
>
> p2m->root = page;
>
> -d->arch.vttbr = page_to_maddr(p2m->root)
> -| ((uint64_t)p2m->vmid&0xff)<<48;
> +p2m->vttbr = page_to_maddr(p2m->root) | ((uint64_t)p2m->vmid & 0xff) <<
> 48;
>
> /*
> * Make sure that all TLBs corresponding to the new VMID are flushed
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 2482a20..f509a00 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -880,7 +880,7 @@ void vcpu_show_registers(const struct vcpu *v)
> ctxt.ifsr32_el2 = v->arch.ifsr;
> #endif
>
> -ctxt.vttbr_el2 = v->domain->arch.vttbr;
> +ctxt.vttbr_el2 = v->domain->arch.p2m.vttbr;
>
> _show_registers(&v->arch.cpu_info->guest_cpu_user_regs, &ctxt, 1, v);
> }
> diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
> index 4e9d8bf..9452fcd 100644
> --- a/xen/include/asm-arm/domain.h
> +++ b/xen/include/asm-arm/domain.h
> @@ -48,7 +48,6 @@ struct arch_domain
>
> /* Virtual MMU */
> struct p2m_domain p2m;
> -uint64_t vttbr;
>
> struct hvm_domain hvm_domain;
> gfn_t *grant_table_gfn;
> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
> index ce28e8a..53c4d78 100644
> --- a/xen/include/asm-arm/p2m.h
> +++ b/xen/include/asm-arm/p2m.h
> @@ -32,6 +32,9 @@ struct p2m_domain {
> /* Current VMID in use */
> uint8_t vmid;
>
> +/* Current Translation Table Base Register for the p2m */
> +uint64_t vttbr;
> +
> /*
> * Highest guest frame that's ever been mapped in the p2m
> * Only takes into account ram and foreign mapping
> --
> 1.9.1
>
___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel