Koenig, Christian <Christian.Koenig@xxxxxxx> 於 2019年7月16日週二 下午9:38寫道: > > Am 11.07.19 um 05:10 schrieb Fuqian Huang: > > In function __ttm_dma_alloc_page(), d_page->addr is allocated > > by dma_alloc_attrs() but freed with use dma_free_coherent() in > > __ttm_dma_free_page(). > > Use the correct dma_free_attrs() to free d_page->vaddr. > > > > Signed-off-by: Fuqian Huang <huangfq.daxian@xxxxxxxxx> > > Reviewed-by: Christian König <christian.koenig@xxxxxxx> > > How do you want to upstream that? Should I pull it into our tree? I just came across this misuse case accidentally. I am not very clear about 'How to upstream that'. Are there more than one way to upstream the code and fix the problem? >From my side, it is ok that you pull it into your tree and fix it or fix it in other way. :) It will be fine if the problem is fixed. Thanks. > > Thanks, > Christian. > > > --- > > drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c > > index d594f7520b7b..7d78e6deac89 100644 > > --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c > > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c > > @@ -285,9 +285,13 @@ static int ttm_set_pages_caching(struct dma_pool *pool, > > > > static void __ttm_dma_free_page(struct dma_pool *pool, struct dma_page *d_page) > > { > > + unsigned long attrs = 0; > > dma_addr_t dma = d_page->dma; > > d_page->vaddr &= ~VADDR_FLAG_HUGE_POOL; > > - dma_free_coherent(pool->dev, pool->size, (void *)d_page->vaddr, dma); > > + if (pool->type & IS_HUGE) > > + attrs = DMA_ATTR_NO_WARN; > > + > > + dma_free_attrs(pool->dev, pool->size, (void *)d_page->vaddr, dma, attrs); > > > > kfree(d_page); > > d_page = NULL; > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel