• Home
  • Raw
  • Download

Lines Matching refs:page

73 	struct dma_page *page;  in show_pools()  local
89 list_for_each_entry(page, &pool->page_list, page_list) { in show_pools()
91 blocks += page->in_use; in show_pools()
206 static void pool_initialise_page(struct dma_pool *pool, struct dma_page *page) in pool_initialise_page() argument
217 *(int *)(page->vaddr + offset) = next; in pool_initialise_page()
224 struct dma_page *page; in pool_alloc_page() local
226 page = kmalloc(sizeof(*page), mem_flags); in pool_alloc_page()
227 if (!page) in pool_alloc_page()
229 page->vaddr = dma_alloc_coherent(pool->dev, pool->allocation, in pool_alloc_page()
230 &page->dma, mem_flags); in pool_alloc_page()
231 if (page->vaddr) { in pool_alloc_page()
233 memset(page->vaddr, POOL_POISON_FREED, pool->allocation); in pool_alloc_page()
235 pool_initialise_page(pool, page); in pool_alloc_page()
236 page->in_use = 0; in pool_alloc_page()
237 page->offset = 0; in pool_alloc_page()
239 kfree(page); in pool_alloc_page()
240 page = NULL; in pool_alloc_page()
242 return page; in pool_alloc_page()
245 static inline int is_page_busy(struct dma_page *page) in is_page_busy() argument
247 return page->in_use != 0; in is_page_busy()
250 static void pool_free_page(struct dma_pool *pool, struct dma_page *page) in pool_free_page() argument
252 dma_addr_t dma = page->dma; in pool_free_page()
255 memset(page->vaddr, POOL_POISON_FREED, pool->allocation); in pool_free_page()
257 dma_free_coherent(pool->dev, pool->allocation, page->vaddr, dma); in pool_free_page()
258 list_del(&page->page_list); in pool_free_page()
259 kfree(page); in pool_free_page()
285 struct dma_page *page; in dma_pool_destroy() local
286 page = list_entry(pool->page_list.next, in dma_pool_destroy()
288 if (is_page_busy(page)) { in dma_pool_destroy()
292 pool->name, page->vaddr); in dma_pool_destroy()
296 pool->name, page->vaddr); in dma_pool_destroy()
298 list_del(&page->page_list); in dma_pool_destroy()
299 kfree(page); in dma_pool_destroy()
301 pool_free_page(pool, page); in dma_pool_destroy()
322 struct dma_page *page; in dma_pool_alloc() local
329 list_for_each_entry(page, &pool->page_list, page_list) { in dma_pool_alloc()
330 if (page->offset < pool->allocation) in dma_pool_alloc()
337 page = pool_alloc_page(pool, mem_flags); in dma_pool_alloc()
338 if (!page) in dma_pool_alloc()
343 list_add(&page->page_list, &pool->page_list); in dma_pool_alloc()
345 page->in_use++; in dma_pool_alloc()
346 offset = page->offset; in dma_pool_alloc()
347 page->offset = *(int *)(page->vaddr + offset); in dma_pool_alloc()
348 retval = offset + page->vaddr; in dma_pool_alloc()
349 *handle = offset + page->dma; in dma_pool_alloc()
355 for (i = sizeof(page->offset); i < pool->size; i++) { in dma_pool_alloc()
384 struct dma_page *page; in pool_find_page() local
386 list_for_each_entry(page, &pool->page_list, page_list) { in pool_find_page()
387 if (dma < page->dma) in pool_find_page()
389 if (dma < (page->dma + pool->allocation)) in pool_find_page()
390 return page; in pool_find_page()
406 struct dma_page *page; in dma_pool_free() local
411 page = pool_find_page(pool, dma); in dma_pool_free()
412 if (!page) { in dma_pool_free()
424 offset = vaddr - page->vaddr; in dma_pool_free()
426 if ((dma - page->dma) != offset) { in dma_pool_free()
439 unsigned int chain = page->offset; in dma_pool_free()
442 chain = *(int *)(page->vaddr + chain); in dma_pool_free()
460 page->in_use--; in dma_pool_free()
461 *(int *)vaddr = page->offset; in dma_pool_free()
462 page->offset = offset; in dma_pool_free()