[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 13/38] arm/p2m: Change func prototype and impl of p2m_(alloc|free)_vmid
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 <proskurin@xxxxxxxxxxxxx> --- Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Julien Grall <julien.grall@xxxxxxx> --- 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 | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index a295fdc..23ceb96 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -1204,11 +1204,9 @@ 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); @@ -1218,28 +1216,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); } @@ -1282,7 +1275,7 @@ void p2m_teardown_one(struct p2m_domain *p2m) p2m->root = NULL; - p2m_free_vmid(p2m->domain); + p2m_free_vmid(p2m->vmid); p2m->vttbr = INVALID_VTTBR; @@ -1291,16 +1284,12 @@ void p2m_teardown_one(struct p2m_domain *p2m) int p2m_init_one(struct domain *d, struct p2m_domain *p2m) { - int rc = 0; - 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->max_mapped_gfn = _gfn(0); p2m->lowest_mapped_gfn = INVALID_GFN; -- 2.9.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |