[igt-dev] [PATCH i-g-t] lib: Purge os caches twice for good luck
Chris Wilson
chris at chris-wilson.co.uk
Fri Jun 15 13:32:49 UTC 2018
If at first we don't succeed, try, try again.
References: https://bugs.freedesktop.org/show_bug.cgi?id=105967
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
lib/intel_os.c | 34 ++++++++++++++++++----------------
1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/lib/intel_os.c b/lib/intel_os.c
index 0cd959ea1..88a61f378 100644
--- a/lib/intel_os.c
+++ b/lib/intel_os.c
@@ -379,32 +379,34 @@ void intel_purge_vm_caches(int drm_fd)
{
int fd;
- igt_drop_caches_set(drm_fd, DROP_SHRINK_ALL | DROP_IDLE | DROP_FREED);
-
fd = open("/proc/sys/vm/drop_caches", O_WRONLY);
if (fd >= 0) {
- /* BIT(2): Be quiet. Cannot be combined with other operations,
+ /*
+ * BIT(2): Be quiet. Cannot be combined with other operations,
* the sysctl has a max value of 4.
*/
igt_ignore_warn(write(fd, "4\n", 2));
close(fd);
}
- /* Reset write position back to start. Do as a seperate write to keep
- * the stages segregated and avoid failure from the squelching stopping
- * the purge.
- */
- fd = open("/proc/sys/vm/drop_caches", O_WRONLY);
- if (fd < 0)
- return;
+ for (int loop = 0; loop < 2; loop++) {
+ igt_drop_caches_set(drm_fd,
+ DROP_SHRINK_ALL | DROP_IDLE | DROP_FREED);
- /* BIT(0): Drop page cache
- * BIT(1): Drop slab cache
- */
- igt_ignore_warn(write(fd, "3\n", 2));
- close(fd);
-}
+ fd = open("/proc/sys/vm/drop_caches", O_WRONLY);
+ if (fd < 0)
+ continue;
+ /*
+ * BIT(0): Drop page cache
+ * BIT(1): Drop slab cache
+ */
+ igt_ignore_warn(write(fd, "3\n", 2));
+ close(fd);
+ }
+
+ errno = 0;
+}
/*
* When testing a port to a new platform, create a standalone test binary
--
2.17.1
More information about the igt-dev
mailing list