[igt-dev] [PATCH i-g-t] tests/drv_suspend: Suspend under memory pressure

Chris Wilson chris at chris-wilson.co.uk
Thu May 24 21:05:02 UTC 2018


Quoting Antonio Argenziano (2018-05-24 21:55:38)
> 
> 
> On 24/05/18 05:42, Chris Wilson wrote:
> > Recently we discovered that we have a race between swapping and
> > suspend in our resume path (we might be trying to page in an object
> > after disabling the block devices). Let's try to exercise that by
> > exhausting all of system memory before suspend.
> > 
> > References: https://bugs.freedesktop.org/show_bug.cgi?id=106640
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Tomi Sarvela <tomi.p.sarvela at intel.com>
> 
> LGTM:
> Reviewed-by: Antonio Argenziano <antonio.argenziano at intel.com>
> 
> > ---
> >   lib/igt_core.c      | 34 ++++++++++++++++++++--------------
> >   lib/igt_core.h      |  1 +
> >   tests/drv_suspend.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> >   3 files changed, 63 insertions(+), 14 deletions(-)
> > 
> > diff --git a/lib/igt_core.c b/lib/igt_core.c
> > index e292ca24c..804ce4578 100644
> 
> > +static void
> > +test_shrink(int fd, unsigned int mode)
> > +{
> > +     uint64_t *can_mlock;
> > +     void *locked;
> > +     uint64_t pin;
> > +
> > +     gem_quiescent_gpu(fd);
> > +     intel_purge_vm_caches(fd);
> > +
> > +     can_mlock = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
> > +     igt_assert(can_mlock != MAP_FAILED);
> > +
> > +     pin = intel_get_total_ram_mb() << 20;
> > +
> > +     igt_debug("Locking %'"PRIu64" MiB\n", pin >> 20);
> > +     locked = malloc(pin);
> > +     igt_assert(locked);
> 
> Shouldn't this^ be a require as well?

It would be a weird system if it failed; overcommit turned off and
populate on allocation. igt_require is reasonable as we haven't begun
testing anything for real yet.

> > +
> > +     /* Lock all the system memory, forcing the driver into swap and OOM */
> 
> > +
> >   static void
> >   test_forcewake(int fd, bool hibernate)
> >   {
> > @@ -199,6 +238,9 @@ igt_main
> >       igt_subtest("sysfs-reader")
> >               test_sysfs_reader(false);
> >   
> > +     igt_subtest("shrink")
> > +             test_shrink(fd, SUSPEND_STATE_MEM);
> 
> I am assuming you plan to have tests for other suspend modes.

Not as much as you might imagine ;)

Filling all of ram before hibernation is not as interesting. But using
the test modes might be.
-Chris


More information about the igt-dev mailing list