drm/i915: add 'reclaimable' to i915 self-reclaimable page allocations
The hibernate issues that got fixed in commit985b823b91
("drm/i915: fix hibernation since i915 self-reclaim fixes") turn out to have been incomplete. Vefa Bicakci tested lots of hibernate cycles, and without the __GFP_RECLAIMABLE flag the system eventually fails to resume. With the flag added, Vefa can apparently hibernate forever (or until he gets bored running his automated scripts, whichever comes first). The reclaimable flag was there originally, and was one of the flags that were dropped (unintentionally) by commit4bdadb9785
("drm/i915: Selectively enable self-reclaim") that introduced all these problems, but I didn't want to just blindly add back all the flags in commit985b823b91
, and it looked like __GFP_RECLAIM wasn't necessary. It clearly was. I still suspect that there is some subtle reason we're missing that causes the problems, but __GFP_RECLAIMABLE is certainly not wrong to use in this context, and is what the code historically used. And we have no idea what the causes the corruption without it. Reported-and-tested-by: M. Vefa Bicakci <bicave@superonline.com> Cc: Dave Airlie <airlied@gmail.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk> Cc: stable@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
f469461df6
Коммит
cd9f040df6
|
@ -2241,6 +2241,7 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,
|
||||||
page = read_cache_page_gfp(mapping, i,
|
page = read_cache_page_gfp(mapping, i,
|
||||||
GFP_HIGHUSER |
|
GFP_HIGHUSER |
|
||||||
__GFP_COLD |
|
__GFP_COLD |
|
||||||
|
__GFP_RECLAIMABLE |
|
||||||
gfpmask);
|
gfpmask);
|
||||||
if (IS_ERR(page))
|
if (IS_ERR(page))
|
||||||
goto err_pages;
|
goto err_pages;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче