From: Ian Campbell Date: Thu, 10 Oct 2013 14:43:45 +0000 (+0100) Subject: xen: arm: Ensure HCR_EL2.RW is set correctly when building dom0 X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~6128 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b3cbe129d07ac9a41175491fdd3c882641588350;p=xen.git xen: arm: Ensure HCR_EL2.RW is set correctly when building dom0 copy_to_user and friends rely on this, since the address transalation functions (guest VA -> MFN) will truncate VA to the appropriate size. Signed-off-by: Ian Campbell Acked-by: Julien Grall --- diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 4e1badf3fa..c644be2620 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -955,6 +955,13 @@ int construct_dom0(struct domain *d) /* The following loads use the domain's p2m */ p2m_load_VTTBR(d); +#ifdef CONFIG_ARM_64 + d->arch.type = kinfo.type; + if ( is_pv32_domain(d) ) + WRITE_SYSREG(READ_SYSREG(HCR_EL2) & ~HCR_RW, HCR_EL2); + else + WRITE_SYSREG(READ_SYSREG(HCR_EL2) | HCR_RW, HCR_EL2); +#endif kernel_load(&kinfo); /* initrd_load will fix up the fdt, so call it before dtb_load */ @@ -970,9 +977,6 @@ int construct_dom0(struct domain *d) regs->pc = (register_t)kinfo.entry; -#ifdef CONFIG_ARM_64 - d->arch.type = kinfo.type; -#endif if ( is_pv32_domain(d) ) {