Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e60bb46b authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/ttm: swap consecutive allocated pooled pages v4



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: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarRoger He <Hongbo.He@amd.com>
Reviewed-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
Tested-by: default avatarDieter Nützel <Dieter@nuetzel-hh.de>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 5ff7ec02
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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