Changeset View
Changeset View
Standalone View
Standalone View
contrib/ofed/libmlx5/dbrec.c
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
static struct mlx5_db_page *__add_page(struct mlx5_context *context) | static struct mlx5_db_page *__add_page(struct mlx5_context *context) | ||||
{ | { | ||||
struct mlx5_db_page *page; | struct mlx5_db_page *page; | ||||
int ps = to_mdev(context->ibv_ctx.device)->page_size; | int ps = to_mdev(context->ibv_ctx.device)->page_size; | ||||
int pp; | int pp; | ||||
int i; | int i; | ||||
int nlong; | int nlong; | ||||
int ret; | |||||
pp = ps / context->cache_line_size; | pp = ps / context->cache_line_size; | ||||
nlong = (pp + 8 * sizeof(long) - 1) / (8 * sizeof(long)); | nlong = (pp + 8 * sizeof(long) - 1) / (8 * sizeof(long)); | ||||
page = malloc(sizeof *page + nlong * sizeof(long)); | page = malloc(sizeof *page + nlong * sizeof(long)); | ||||
if (!page) | if (!page) | ||||
return NULL; | return NULL; | ||||
if (mlx5_alloc_buf(&page->buf, ps, ps)) { | if (mlx5_is_extern_alloc(context)) | ||||
ret = mlx5_alloc_buf_extern(context, &page->buf, ps); | |||||
else | |||||
ret = mlx5_alloc_buf(&page->buf, ps, ps); | |||||
if (ret) { | |||||
free(page); | free(page); | ||||
return NULL; | return NULL; | ||||
} | } | ||||
page->num_db = pp; | page->num_db = pp; | ||||
page->use_cnt = 0; | page->use_cnt = 0; | ||||
for (i = 0; i < nlong; ++i) | for (i = 0; i < nlong; ++i) | ||||
page->free[i] = ~0; | page->free[i] = ~0; | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | void mlx5_free_db(struct mlx5_context *context, __be32 *db) | ||||
if (!--page->use_cnt) { | if (!--page->use_cnt) { | ||||
if (page->prev) | if (page->prev) | ||||
page->prev->next = page->next; | page->prev->next = page->next; | ||||
else | else | ||||
context->db_list = page->next; | context->db_list = page->next; | ||||
if (page->next) | if (page->next) | ||||
page->next->prev = page->prev; | page->next->prev = page->prev; | ||||
if (page->buf.type == MLX5_ALLOC_TYPE_EXTERNAL) | |||||
mlx5_free_buf_extern(context, &page->buf); | |||||
else | |||||
mlx5_free_buf(&page->buf); | mlx5_free_buf(&page->buf); | ||||
free(page); | free(page); | ||||
} | } | ||||
out: | out: | ||||
pthread_mutex_unlock(&context->db_list_mutex); | pthread_mutex_unlock(&context->db_list_mutex); | ||||
} | } |