On 01/07/2011 06:11 PM, Konrad Rzeszutek Wilk wrote: > We only use the "if (pool == NULL)" path for right now. > > Signed-off-by: Konrad Rzeszutek Wilk<konrad.wilk at oracle.com> >
Patch name is incorrect, also see potential indentation issue below, otherwise Reviewed-by: Thomas Hellstrom <thomas at shipmail.org> > --- > drivers/gpu/drm/ttm/ttm_page_alloc.c | 26 +++++++++++++++++++++++--- > 1 files changed, 23 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c > b/drivers/gpu/drm/ttm/ttm_page_alloc.c > index 6859288..5d09677 100644 > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > @@ -683,14 +683,22 @@ int ttm_get_pages(struct list_head *pages, int flags, > gfp_flags |= GFP_HIGHUSER; > > for (r = 0; r< count; ++r) { > - p = alloc_page(gfp_flags); > + if ((flags& TTM_PAGE_FLAG_DMA32)&& dma_address) { > + void *addr; > + addr = dma_alloc_coherent(NULL, PAGE_SIZE, > + &dma_address[r], > + gfp_flags); > Indentation again > + if (addr == NULL) > + return -ENOMEM; > + p = virt_to_page(addr); > + } else > + p = alloc_page(gfp_flags); > if (!p) { > > printk(KERN_ERR TTM_PFX > "Unable to allocate page."); > return -ENOMEM; > } > - > list_add(&p->lru, pages); > } > return 0; > @@ -739,12 +747,24 @@ void ttm_put_pages(struct list_head *pages, unsigned > page_count, int flags, > unsigned long irq_flags; > struct ttm_page_pool *pool = ttm_get_pool(flags, cstate); > struct page *p, *tmp; > + unsigned r; > > > if (pool == NULL) { > /* No pool for this memory type so free the pages */ > > + r = page_count-1; > list_for_each_entry_safe(p, tmp, pages, lru) { > - __free_page(p); > + if ((flags& TTM_PAGE_FLAG_DMA32)&& dma_address) { > + void *addr = page_address(p); > + WARN_ON(!addr || !dma_address[r]); > + if (addr) > + dma_free_coherent(NULL, PAGE_SIZE, > + addr, > + dma_address[r]); > + dma_address[r] = 0; > + } else > + __free_page(p); > + r--; > } > /* Make the pages list empty */ > INIT_LIST_HEAD(pages); >