git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
log: fix crash after dump
[dpdk.git]
/
lib
/
librte_mempool
/
rte_mempool.c
diff --git
a/lib/librte_mempool/rte_mempool.c
b/lib/librte_mempool/rte_mempool.c
index
01972ba
..
f592dc7
100644
(file)
--- a/
lib/librte_mempool/rte_mempool.c
+++ b/
lib/librte_mempool/rte_mempool.c
@@
-130,17
+130,19
@@
static void
mempool_add_elem(struct rte_mempool *mp, void *obj, uint32_t obj_idx,
rte_mempool_obj_ctor_t *obj_init, void *obj_init_arg)
{
mempool_add_elem(struct rte_mempool *mp, void *obj, uint32_t obj_idx,
rte_mempool_obj_ctor_t *obj_init, void *obj_init_arg)
{
- struct rte_mempool **mpp;
+ struct rte_mempool_objhdr *hdr;
+ struct rte_mempool_objtlr *tlr __rte_unused;
obj = (char *)obj + mp->header_size;
/* set mempool ptr in header */
obj = (char *)obj + mp->header_size;
/* set mempool ptr in header */
-
mpp = __mempool_from_obj(obj
);
-
*mp
p = mp;
+
hdr = (struct rte_mempool_objhdr *)((char *)obj - sizeof(*hdr)
);
+
hdr->m
p = mp;
#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
#ifdef RTE_LIBRTE_MEMPOOL_DEBUG
- __mempool_write_header_cookie(obj, 1);
- __mempool_write_trailer_cookie(obj);
+ hdr->cookie = RTE_MEMPOOL_HEADER_COOKIE2;
+ tlr = __mempool_get_trailer(obj);
+ tlr->cookie = RTE_MEMPOOL_TRAILER_COOKIE;
#endif
/* call the initializer */
if (obj_init)
#endif
/* call the initializer */
if (obj_init)
@@
-156,7
+158,7
@@
rte_mempool_obj_iter(void *vaddr, uint32_t elt_num, size_t elt_sz, size_t align,
rte_mempool_obj_iter_t obj_iter, void *obj_iter_arg)
{
uint32_t i, j, k;
rte_mempool_obj_iter_t obj_iter, void *obj_iter_arg)
{
uint32_t i, j, k;
- uint32_t pgn;
+ uint32_t pgn
, pgf
;
uintptr_t end, start, va;
uintptr_t pg_sz;
uintptr_t end, start, va;
uintptr_t pg_sz;
@@
-171,10
+173,14
@@
rte_mempool_obj_iter(void *vaddr, uint32_t elt_num, size_t elt_sz, size_t align,
start = RTE_ALIGN_CEIL(va, align);
end = start + elt_sz;
start = RTE_ALIGN_CEIL(va, align);
end = start + elt_sz;
- pgn = (end >> pg_shift) - (start >> pg_shift);
+ /* index of the first page for the next element. */
+ pgf = (end >> pg_shift) - (start >> pg_shift);
+
+ /* index of the last page for the current element. */
+ pgn = ((end - 1) >> pg_shift) - (start >> pg_shift);
pgn += j;
pgn += j;
- /* do we have enough space left for the
next
element. */
+ /* do we have enough space left for the element. */
if (pgn >= pg_num)
break;
if (pgn >= pg_num)
break;
@@
-194,7
+200,7
@@
rte_mempool_obj_iter(void *vaddr, uint32_t elt_num, size_t elt_sz, size_t align,
obj_iter(obj_iter_arg, (void *)start,
(void *)end, i);
va = end;
obj_iter(obj_iter_arg, (void *)start,
(void *)end, i);
va = end;
- j
= pgn
;
+ j
+= pgf
;
i++;
} else {
va = RTE_ALIGN_CEIL((va + 1), pg_sz);
i++;
} else {
va = RTE_ALIGN_CEIL((va + 1), pg_sz);
@@
-341,9
+347,9
@@
rte_mempool_xmem_size(uint32_t elt_num, size_t elt_sz, uint32_t pg_shift)
*/
static void
mempool_lelem_iter(void *arg, __rte_unused void *start, void *end,
*/
static void
mempool_lelem_iter(void *arg, __rte_unused void *start, void *end,
-
__rte_unused uint32_t idx)
+ __rte_unused uint32_t idx)
{
{
-
*(uintptr_t *)arg = (uintptr_t)end;
+ *(uintptr_t *)arg = (uintptr_t)end;
}
ssize_t
}
ssize_t
@@
-361,7
+367,7
@@
rte_mempool_xmem_usage(void *vaddr, uint32_t elt_num, size_t elt_sz,
if ((n = rte_mempool_obj_iter(vaddr, elt_num, elt_sz, 1,
paddr, pg_num, pg_shift, mempool_lelem_iter,
&uv)) != elt_num) {
if ((n = rte_mempool_obj_iter(vaddr, elt_num, elt_sz, 1,
paddr, pg_num, pg_shift, mempool_lelem_iter,
&uv)) != elt_num) {
- return (-n);
+ return (-
(ssize_t)
n);
}
uv = RTE_ALIGN_CEIL(uv, pg_sz);
}
uv = RTE_ALIGN_CEIL(uv, pg_sz);
@@
-515,8
+521,8
@@
rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
/*
* If user provided an external memory buffer, then use it to
/*
* If user provided an external memory buffer, then use it to
- * store mempool objects. Otherwise reserve
memzone big enough to
- * hold mempool header and metadata plus mempool objects.
+ * store mempool objects. Otherwise reserve
a memzone that is large
+ *
enough to
hold mempool header and metadata plus mempool objects.
*/
mempool_size = MEMPOOL_HEADER_SIZE(mp, pg_num) + private_data_size;
if (vaddr == NULL)
*/
mempool_size = MEMPOOL_HEADER_SIZE(mp, pg_num) + private_data_size;
if (vaddr == NULL)
@@
-537,7
+543,7
@@
rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
/*
* no more memory: in this case we loose previously reserved
/*
* no more memory: in this case we loose previously reserved
- * space for the as we cannot free it
+ * space for the
ring
as we cannot free it
*/
if (mz == NULL) {
rte_free(te);
*/
if (mz == NULL) {
rte_free(te);