On 2017-12-04 01:46 PM, Christian König wrote: > When we detect consecutive allocation of pages swap them to avoid > accidentally freeing them as huge page. > > v2: use swap > v3: check if it's really the first allocated page > > Signed-off-by: Christian König <christian.koenig at amd.com> > --- > drivers/gpu/drm/ttm/ttm_page_alloc.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c > index c82d94cbbabc..7c4d4edce0ba 100644 > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > @@ -875,7 +875,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, > #endif > struct list_head plist; > struct page *p = NULL; > - unsigned count; > + unsigned count, first; > int r; > > /* No pool for cached pages */ > @@ -914,6 +914,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, > } > #endif > > + first = i; > while (npages) { > p = alloc_page(gfp_flags); > if (!p) { > @@ -921,6 +922,10 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, > return -ENOMEM; > } > > + /* Swap the pages if we detect consecutive order */ > + if (i > first && pages[i - 1] == p - 1) > + swap(p, pages[i - 1]); > + > pages[i++] = p; > --npages; > } > Both patches are Reviewed-by: Michel Dänzer <michel.daenzer at amd.com> -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer