[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