Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de> Dieter Am 05.12.2017 13:54, schrieb Christian König: > 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 > v4: don't touch the loop variable > > Signed-off-by: Christian König <christian.koenig at amd.com> > --- > drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c > b/drivers/gpu/drm/ttm/ttm_page_alloc.c > index b6f7ce286fb1..44343a2bf55c 100644 > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > @@ -958,8 +958,15 @@ static int ttm_get_pages(struct page **pages, > unsigned npages, int flags, > r = ttm_page_pool_get_pages(pool, &plist, flags, cstate, > npages - count, 0); > > - list_for_each_entry(p, &plist, lru) > - pages[count++] = p; > + first = count; > + list_for_each_entry(p, &plist, lru) { > + struct page *tmp = p; > + > + /* Swap the pages if we detect consecutive order */ > + if (count > first && pages[count - 1] == tmp - 1) > + swap(tmp, pages[count - 1]); > + pages[count++] = tmp; > + } > > if (r) { > /* If there is any pages in the list put them back to