[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 17/20] xen/gnttab: Fold grant_table_{create, set_limits}() into grant_table_init()
Now that the max_{grant,maptrack}_frames are specified from the very beginning of grant table construction, the various initialisation functions can be folded together and simplified as a result. Leave grant_table_init() as the public interface, which is more consistent with other subsystems. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> CC: Julien Grall <julien.grall@xxxxxxx> --- xen/common/domain.c | 4 +-- xen/common/grant_table.c | 71 +++++++++++++------------------------------ xen/include/xen/grant_table.h | 6 ++-- 3 files changed, 25 insertions(+), 56 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 4539c39..c86cf47 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -364,8 +364,8 @@ struct domain *domain_create(domid_t domid, goto fail; init_status |= INIT_evtchn; - if ( (err = grant_table_create(d, config->max_grant_frames, - config->max_maptrack_frames)) != 0 ) + if ( (err = grant_table_init(d, config->max_grant_frames, + config->max_maptrack_frames)) != 0 ) goto fail; init_status |= INIT_gnttab; diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index cf47c78..cb6e875 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1808,22 +1808,28 @@ gnttab_grow_table(struct domain *d, unsigned int req_nr_frames) return -ENOMEM; } -static int -grant_table_init(struct domain *d, struct grant_table *gt, - unsigned int grant_frames, unsigned int maptrack_frames) +int grant_table_init(struct domain *d, unsigned int max_grant_frames, + unsigned int max_maptrack_frames) { + struct grant_table *gt; int ret = -ENOMEM; - grant_write_lock(gt); + if ( max_grant_frames < INITIAL_NR_GRANT_FRAMES || + max_grant_frames > opt_max_grant_frames || + max_maptrack_frames > opt_max_maptrack_frames ) + return -EINVAL; - if ( gt->active ) - { - ret = -EBUSY; - goto out_no_cleanup; - } + if ( (gt = xzalloc(struct grant_table)) == NULL ) + return -ENOMEM; + + /* Simple stuff. */ + percpu_rwlock_resource_init(>->lock, grant_rwlock); + spin_lock_init(>->maptrack_lock); + + grant_write_lock(gt); - gt->max_grant_frames = grant_frames; - gt->max_maptrack_frames = maptrack_frames; + gt->max_grant_frames = max_grant_frames; + gt->max_maptrack_frames = max_maptrack_frames; /* Active grant table. */ gt->active = xzalloc_array(struct active_grant_entry *, @@ -1854,6 +1860,10 @@ grant_table_init(struct domain *d, struct grant_table *gt, if ( ret ) goto out; + /* Okay, install the structure. */ + gt->domain = d; + d->grant_table = gt; + /* gnttab_grow_table() allocates a min number of frames, so 0 is okay. */ ret = gnttab_grow_table(d, 0); @@ -1871,7 +1881,6 @@ grant_table_init(struct domain *d, struct grant_table *gt, gt->active = NULL; } - out_no_cleanup: grant_write_unlock(gt); return ret; @@ -3572,28 +3581,6 @@ do_grant_table_op( #include "compat/grant_table.c" #endif -int grant_table_create(struct domain *d, unsigned int max_grant_frames, - unsigned int max_maptrack_frames) -{ - struct grant_table *t; - int ret = 0; - - if ( (t = xzalloc(struct grant_table)) == NULL ) - return -ENOMEM; - - /* Simple stuff. */ - percpu_rwlock_resource_init(&t->lock, grant_rwlock); - spin_lock_init(&t->maptrack_lock); - - /* Okay, install the structure. */ - t->domain = d; - d->grant_table = t; - - ret = grant_table_set_limits(d, max_maptrack_frames, max_maptrack_frames); - - return ret; -} - void gnttab_release_mappings( struct domain *d) @@ -3784,22 +3771,6 @@ void grant_table_init_vcpu(struct vcpu *v) v->maptrack_tail = MAPTRACK_TAIL; } -int grant_table_set_limits(struct domain *d, unsigned int grant_frames, - unsigned int maptrack_frames) -{ - struct grant_table *gt = d->grant_table; - - if ( grant_frames < INITIAL_NR_GRANT_FRAMES || - grant_frames > opt_max_grant_frames || - maptrack_frames > opt_max_maptrack_frames ) - return -EINVAL; - if ( !gt ) - return -ENOENT; - - /* Set limits. */ - return grant_table_init(d, gt, grant_frames, maptrack_frames); -} - #ifdef CONFIG_HAS_MEM_SHARING int mem_sharing_gref_to_gfn(struct grant_table *gt, grant_ref_t ref, gfn_t *gfn, uint16_t *status) diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h index ebd5024..424afe0 100644 --- a/xen/include/xen/grant_table.h +++ b/xen/include/xen/grant_table.h @@ -35,13 +35,11 @@ extern unsigned int opt_max_grant_frames; extern unsigned int opt_max_maptrack_frames; /* Create/destroy per-domain grant table context. */ -int grant_table_create(struct domain *d, unsigned int max_grant_frames, - unsigned int max_maptrack_frames); +int grant_table_init(struct domain *d, unsigned int max_grant_frames, + unsigned int max_maptrack_frames); void grant_table_destroy( struct domain *d); void grant_table_init_vcpu(struct vcpu *v); -int grant_table_set_limits(struct domain *d, unsigned int grant_frames, - unsigned int maptrack_frames); /* * Check if domain has active grants and log first 10 of them. -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |