From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: Re: [PATCH 2/5] tm: Utilize the dma_addr_t array for pages that are to in DMA32 pool. Date: Thu, 27 Jan 2011 10:17:50 +0100 Message-ID: <4D41383E.3020605@shipmail.org> References: <1294420304-24811-1-git-send-email-konrad.wilk@oracle.com> <1294420304-24811-3-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from smtp-outbound-1.vmware.com (smtp-outbound-1.vmware.com [65.115.85.69]) by gabe.freedesktop.org (Postfix) with ESMTP id 9A26D9E776 for ; Thu, 27 Jan 2011 01:17:57 -0800 (PST) In-Reply-To: <1294420304-24811-3-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Konrad Rzeszutek Wilk <"konrad.wilk@oracle.com"@freedesktop.org> Cc: "dri-devel@lists.freedesktop.org" List-Id: dri-devel@lists.freedesktop.org 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 > Patch name is incorrect, also see potential indentation issue below, otherwise Reviewed-by: Thomas Hellstrom > --- > 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); >