X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_fbarray.c;h=1312f936b83371aaca9cada5f40b9df6cacb1c89;hb=70c7747689082abba6452803b6e23e6aed649ace;hp=31cce80a88177af4dc73ac64abfb64e43a741423;hpb=5a98bc5e83b1562d5b688a3d5a6dd3ee977694d2;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c index 31cce80a88..1312f936b8 100644 --- a/lib/librte_eal/common/eal_common_fbarray.c +++ b/lib/librte_eal/common/eal_common_fbarray.c @@ -709,7 +709,7 @@ fully_validate(const char *name, unsigned int elt_sz, unsigned int len) return 0; } -int __rte_experimental +int rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len, unsigned int elt_sz) { @@ -736,15 +736,19 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len, } page_sz = sysconf(_SC_PAGESIZE); - if (page_sz == (size_t)-1) - goto fail; + if (page_sz == (size_t)-1) { + free(ma); + return -1; + } /* calculate our memory limits */ mmap_len = calc_data_size(page_sz, elt_sz, len); data = eal_get_virtual_area(NULL, &mmap_len, page_sz, 0, 0); - if (data == NULL) - goto fail; + if (data == NULL) { + free(ma); + return -1; + } rte_spinlock_lock(&mem_area_lock); @@ -829,7 +833,7 @@ fail: return -1; } -int __rte_experimental +int rte_fbarray_attach(struct rte_fbarray *arr) { struct mem_area *ma = NULL, *tmp = NULL; @@ -920,7 +924,7 @@ fail: return -1; } -int __rte_experimental +int rte_fbarray_detach(struct rte_fbarray *arr) { struct mem_area *tmp = NULL; @@ -974,7 +978,7 @@ out: return ret; } -int __rte_experimental +int rte_fbarray_destroy(struct rte_fbarray *arr) { struct mem_area *tmp = NULL; @@ -1051,12 +1055,15 @@ rte_fbarray_destroy(struct rte_fbarray *arr) TAILQ_REMOVE(&mem_area_tailq, tmp, next); free(tmp); ret = 0; + + /* reset the fbarray structure */ + memset(arr, 0, sizeof(*arr)); out: rte_spinlock_unlock(&mem_area_lock); return ret; } -void * __rte_experimental +void * rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx) { void *ret = NULL; @@ -1075,19 +1082,19 @@ rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx) return ret; } -int __rte_experimental +int rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx) { return set_used(arr, idx, true); } -int __rte_experimental +int rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx) { return set_used(arr, idx, false); } -int __rte_experimental +int rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx) { struct used_mask *msk; @@ -1156,25 +1163,25 @@ out: return ret; } -int __rte_experimental +int rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find(arr, start, true, false); } -int __rte_experimental +int rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find(arr, start, true, true); } -int __rte_experimental +int rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find(arr, start, false, false); } -int __rte_experimental +int rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find(arr, start, false, true); @@ -1232,28 +1239,28 @@ out: return ret; } -int __rte_experimental +int rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start, unsigned int n) { return fbarray_find_n(arr, start, n, true, false); } -int __rte_experimental +int rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start, unsigned int n) { return fbarray_find_n(arr, start, n, true, true); } -int __rte_experimental +int rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start, unsigned int n) { return fbarray_find_n(arr, start, n, false, false); } -int __rte_experimental +int rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start, unsigned int n) { @@ -1396,56 +1403,56 @@ fbarray_find_biggest(struct rte_fbarray *arr, unsigned int start, bool used, return biggest_idx; } -int __rte_experimental +int rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_biggest(arr, start, false, false); } -int __rte_experimental +int rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_biggest(arr, start, true, false); } -int __rte_experimental +int rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_biggest(arr, start, false, true); } -int __rte_experimental +int rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_biggest(arr, start, true, true); } -int __rte_experimental +int rte_fbarray_find_contig_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_contig(arr, start, true, false); } -int __rte_experimental +int rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_contig(arr, start, true, true); } -int __rte_experimental +int rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_contig(arr, start, false, false); } -int __rte_experimental +int rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start) { return fbarray_find_contig(arr, start, false, true); } -int __rte_experimental +int rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt) { void *end; @@ -1471,7 +1478,7 @@ rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt) return ret; } -void __rte_experimental +void rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f) { struct used_mask *msk;