This commit changes the prototype and implementation of the functions "p2m_alloc_vmid" and "p2m_free_vmid". The function "p2m_alloc_vmid" does not expect the struct domain as argument anymore and returns an allocated vmid. The function "p2m_free_vmid" takes only the vmid that is to be freed as argument.
Signed-off-by: Sergej Proskurin <prosku...@sec.in.tum.de> --- Cc: Stefano Stabellini <sstabell...@kernel.org> Cc: Julien Grall <julien.gr...@arm.com> --- v3: Changed function prototypes and implementation of the functions "p2m_alloc_vmid" and "p2m_free_vmid". Changes in "p2m_alloc_vmid": This function does not expect any arguments. Also, in this commit, the function "p2m_alloc_vmid" returns either the successfully allocated vmid or the value INVALID_VMID. Thus, it is now the responsibility of the caller to set the returned vmid in the associated fields. Changes in "p2m_free_vmid": This function expects now only the vmid of type uint8_t. --- xen/arch/arm/p2m.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index 808d99e1e9..ec855341b9 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -1162,11 +1162,9 @@ static void p2m_vmid_allocator_init(void) set_bit(INVALID_VMID, vmid_mask); } -static int p2m_alloc_vmid(struct domain *d) +static uint8_t p2m_alloc_vmid(void) { - struct p2m_domain *p2m = p2m_get_hostp2m(d); - - int rc, vmid; + uint8_t vmid; spin_lock(&vmid_alloc_lock); @@ -1176,28 +1174,23 @@ static int p2m_alloc_vmid(struct domain *d) if ( vmid == MAX_VMID ) { - rc = -EBUSY; - printk(XENLOG_ERR "p2m.c: dom%d: VMID pool exhausted\n", d->domain_id); + vmid = INVALID_VMID; + printk(XENLOG_ERR "p2m.c: VMID pool exhausted\n"); goto out; } set_bit(vmid, vmid_mask); - p2m->vmid = vmid; - - rc = 0; - out: spin_unlock(&vmid_alloc_lock); - return rc; + return vmid; } -static void p2m_free_vmid(struct domain *d) +static void p2m_free_vmid(uint8_t vmid) { - struct p2m_domain *p2m = p2m_get_hostp2m(d); spin_lock(&vmid_alloc_lock); - if ( p2m->vmid != INVALID_VMID ) - clear_bit(p2m->vmid, vmid_mask); + if ( vmid != INVALID_VMID ) + clear_bit(vmid, vmid_mask); spin_unlock(&vmid_alloc_lock); } @@ -1254,7 +1247,7 @@ void p2m_teardown_one(struct p2m_domain *p2m) p2m->root = NULL; - p2m_free_vmid(p2m->domain); + p2m_free_vmid(p2m->vmid); radix_tree_destroy(&p2m->mem_access_settings, NULL); } @@ -1267,11 +1260,9 @@ int p2m_init_one(struct domain *d, struct p2m_domain *p2m) rwlock_init(&p2m->lock); INIT_PAGE_LIST_HEAD(&p2m->pages); - p2m->vmid = INVALID_VMID; - - rc = p2m_alloc_vmid(d); - if ( rc != 0 ) - return rc; + p2m->vmid = p2m_alloc_vmid(); + if ( p2m->vmid == INVALID_VMID ) + return -EBUSY; p2m->domain = d; p2m->max_mapped_gfn = _gfn(0); -- 2.13.3 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel