[PATCH] drm/ttm: stop warning on TT shrinker failure
Daniel Vetter
daniel at ffwll.ch
Fri Mar 19 19:06:21 UTC 2021
On Fri, Mar 19, 2021 at 07:53:48PM +0100, Christian König wrote:
> 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().
Yeah, if you'd put it in the right place :-)
But also -mm folks are very clear that memalloc_no*() family is for dire
situation where there's really no other way out. For anything where you
know what you're doing, you really should use explicit gfp flags.
> > 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.
Yeah, you broke it. Now the real shrinker is running with GFP_KERNEL,
because your memalloc_no is only around the debugfs function. And ofc it's
much easier to allocate with GFP_KERNEL, right until you deadlock :-)
Shrinking is hard, there's no easy way out here.
Cheers, Daniel
>
> 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
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list