Hello Sergej,
On 04/07/16 12:45, Sergej Proskurin wrote:
+int p2m_table_init(struct domain *d)
+{
+ int i = 0;
+ int rc = -ENOMEM;
+ struct p2m_domain *p2m = p2m_get_hostp2m(d);
+
+ spin_lock(&p2m->lock);
+
+ rc = p2m_alloc_table(p2m);
+ if ( rc != 0 )
+ goto out;
+
+ d->arch.vttbr = d->arch.p2m.vttbr.vttbr;
+
+ /*
+ * Make sure that all TLBs corresponding to the new VMID are flushed
+ * before using it.
*/
flush_tlb_domain(d);
spin_unlock(&p2m->lock);
- return 0;
+ if ( hvm_altp2m_supported() )
+ {
+ /* Init alternate p2m data */
+ for ( i = 0; i < MAX_ALTP2M; i++ )
+ {
+ d->arch.altp2m_vttbr[i] = INVALID_MFN;
+ rc = p2m_alloc_table(d->arch.altp2m_p2m[i]);
Why do we need to allocate all the altp2m root page tables at the
creation of the domain? This is wasting up to 80KB (2-root page for 10
altp2m) per domain even if it may not be used at all by the domain.
+ if ( rc != 0 )
+ goto out;
+ }
+
+ d->arch.altp2m_active = 0;
+ }
+
+out:
+ return rc;
}
#define MAX_VMID 256
diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
index 783db5c..451b097 100644
--- a/xen/include/asm-arm/p2m.h
+++ b/xen/include/asm-arm/p2m.h
@@ -171,7 +171,7 @@ int relinquish_p2m_mapping(struct domain *d);
*
* Returns 0 for success or -errno.
*/
-int p2m_alloc_table(struct domain *d);
+int p2m_table_init(struct domain *d);
/* Context switch */
void p2m_save_state(struct vcpu *p);
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel