[PATCH] drm/ttm: stop warning on TT shrinker failure
Christian König
ckoenig.leichtzumerken at gmail.com
Fri Mar 19 18:53:48 UTC 2021
Am 19.03.21 um 18:52 schrieb Daniel Vetter:
> On Fri, Mar 19, 2021 at 03:08:57PM +0100, Christian König wrote:
>> Don't print a warning when we fail to allocate a page for swapping things out.
>>
>> Also rely on memalloc_nofs_save/memalloc_nofs_restore instead of GFP_NOFS.
> Uh this part doesn't make sense. Especially since you only do it for the
> debugfs file, not in general. Which means you've just completely broken
> the shrinker.
Are you sure? My impression is that GFP_NOFS should now work much more
out of the box with the memalloc_nofs_save()/memalloc_nofs_restore().
> If this is just to paper over the seq_printf doing the wrong allocations,
> then just move that out from under the fs_reclaim_acquire/release part.
No, that wasn't the problem.
We have just seen to many failures to allocate pages for swapout and I
think that would improve this because in a lot of cases we can then
immediately swap things out instead of having to rely on upper layers.
Regards,
Christian.
>
> __GFP_NOWARN should be there indeed I think.
> -Daniel
>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> ---
>> drivers/gpu/drm/ttm/ttm_tt.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
>> index 2f0833c98d2c..86fa3e82dacc 100644
>> --- a/drivers/gpu/drm/ttm/ttm_tt.c
>> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
>> @@ -369,7 +369,7 @@ static unsigned long ttm_tt_shrinker_scan(struct shrinker *shrink,
>> };
>> int ret;
>>
>> - ret = ttm_bo_swapout(&ctx, GFP_NOFS);
>> + ret = ttm_bo_swapout(&ctx, GFP_KERNEL | __GFP_NOWARN);
>> return ret < 0 ? SHRINK_EMPTY : ret;
>> }
>>
>> @@ -389,10 +389,13 @@ static unsigned long ttm_tt_shrinker_count(struct shrinker *shrink,
>> static int ttm_tt_debugfs_shrink_show(struct seq_file *m, void *data)
>> {
>> struct shrink_control sc = { .gfp_mask = GFP_KERNEL };
>> + unsigned int flags;
>>
>> fs_reclaim_acquire(GFP_KERNEL);
>> + flags = memalloc_nofs_save();
>> seq_printf(m, "%lu/%lu\n", ttm_tt_shrinker_count(&mm_shrinker, &sc),
>> ttm_tt_shrinker_scan(&mm_shrinker, &sc));
>> + memalloc_nofs_restore(flags);
>> fs_reclaim_release(GFP_KERNEL);
>>
>> return 0;
>> --
>> 2.25.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the amd-gfx
mailing list