Do not fail the test for just a single instance of migration failure,
since migration is a best-effort service.

Signed-off-by: Dev Jain <dev.j...@arm.com>
Suggested-by: David Hildenbrand <da...@redhat.com>
Reviewed-by: Ryan Roberts <ryan.robe...@arm.com>
Tested-by: Ryan Roberts <ryan.robe...@arm.com>
---
 tools/testing/selftests/mm/migration.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/mm/migration.c 
b/tools/testing/selftests/mm/migration.c
index 6908569ef406..64bcbb7151cf 100644
--- a/tools/testing/selftests/mm/migration.c
+++ b/tools/testing/selftests/mm/migration.c
@@ -15,10 +15,10 @@
 #include <signal.h>
 #include <time.h>
 
-#define TWOMEG (2<<20)
-#define RUNTIME (20)
-
-#define ALIGN(x, a) (((x) + (a - 1)) & (~((a) - 1)))
+#define TWOMEG         (2<<20)
+#define RUNTIME                (20)
+#define MAX_RETRIES    100
+#define ALIGN(x, a)    (((x) + (a - 1)) & (~((a) - 1)))
 
 FIXTURE(migration)
 {
@@ -65,6 +65,7 @@ int migrate(uint64_t *ptr, int n1, int n2)
        int ret, tmp;
        int status = 0;
        struct timespec ts1, ts2;
+       int failures = 0;
 
        if (clock_gettime(CLOCK_MONOTONIC, &ts1))
                return -1;
@@ -79,13 +80,17 @@ int migrate(uint64_t *ptr, int n1, int n2)
                ret = move_pages(0, 1, (void **) &ptr, &n2, &status,
                                MPOL_MF_MOVE_ALL);
                if (ret) {
-                       if (ret > 0)
+                       if (ret > 0) {
+                               /* Migration is best effort; try again */
+                               if (++failures < MAX_RETRIES)
+                                       continue;
                                printf("Didn't migrate %d pages\n", ret);
+                       }
                        else
                                perror("Couldn't migrate pages");
                        return -2;
                }
-
+               failures = 0;
                tmp = n2;
                n2 = n1;
                n1 = tmp;
-- 
2.30.2


Reply via email to