Lines Matching refs:page
51 struct mlx5_db_page *page;
60 page = malloc(sizeof *page + nlong * sizeof(long));
61 if (!page)
64 if (mlx5_alloc_buf(&page->buf, ps, ps)) {
65 free(page);
69 page->num_db = pp;
70 page->use_cnt = 0;
72 page->free[i] = ~0;
74 page->prev = NULL;
75 page->next = context->db_list;
76 context->db_list = page;
77 if (page->next)
78 page->next->prev = page;
80 return page;
85 struct mlx5_db_page *page;
91 for (page = context->db_list; page; page = page->next)
92 if (page->use_cnt < page->num_db)
95 page = __add_page(context);
96 if (!page)
100 ++page->use_cnt;
102 for (i = 0; !page->free[i]; ++i)
105 j = ffsl(page->free[i]);
107 page->free[i] &= ~(1UL << j);
108 db = page->buf.buf + (i * 8 * sizeof(long) + j) * context->cache_line_size;
118 struct mlx5_db_page *page;
124 for (page = context->db_list; page; page = page->next)
125 if (((uintptr_t) db & ~(ps - 1)) == (uintptr_t) page->buf.buf)
128 if (!page)
131 i = ((void *) db - page->buf.buf) / context->cache_line_size;
132 page->free[i / (8 * sizeof(long))] |= 1UL << (i % (8 * sizeof(long)));
134 if (!--page->use_cnt) {
135 if (page->prev)
136 page->prev->next = page->next;
138 context->db_list = page->next;
139 if (page->next)
140 page->next->prev = page->prev;
142 mlx5_free_buf(&page->buf);
143 free(page);