On 3/31/26 9:49 PM, Alison Schofield wrote:
> The mmap test helper (mmap.c) emits detailed progress and timing
> information for each test case. While useful for debugging, this
> output is unnecessarily verbose for all test runs.
> 
> Move the detailed tracing behind a -v option and emit only a minimal
> per-run summary by default, while preserving full error reporting on
> failure. This reduces log volume without changing test behavior.
> 
> Update mmap.sh to forward test arguments to the mmap helper.
> 
> Usage: meson test -C build mmap.sh --test-args='-v'
> 
> Signed-off-by: Alison Schofield <[email protected]>

Reviewed-by: Dave Jiang <[email protected]>

> ---
>  test/mmap.c  | 68 +++++++++++++++++++++++++++++++++++-----------------
>  test/mmap.sh | 40 ++++++++++++++++---------------
>  2 files changed, 67 insertions(+), 41 deletions(-)
> 
> diff --git a/test/mmap.c b/test/mmap.c
> index 98b85fe8453e..56cc17a6d578 100644
> --- a/test/mmap.c
> +++ b/test/mmap.c
> @@ -9,10 +9,12 @@
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <unistd.h>
> +#include <stdarg.h>
>  
>  #define MiB(a)           ((a) * 1024UL * 1024UL)
>  
>  static struct timeval start_tv, stop_tv;
> +static int verbose;
>  
>  // Calculate the difference between two time values.
>  static void tvsub(struct timeval *tdiff, struct timeval *t1, struct timeval 
> *t0)
> @@ -39,6 +41,18 @@ static unsigned long long stop(void)
>       return (tdiff.tv_sec * 1000000 + tdiff.tv_usec);
>  }
>  
> +static void trace(const char *fmt, ...)
> +{
> +     va_list ap;
> +
> +     if (!verbose)
> +             return;
> +
> +     va_start(ap, fmt);
> +     vprintf(fmt, ap);
> +     va_end(ap);
> +}
> +
>  static void test_write(unsigned long *p, size_t size)
>  {
>       size_t i;
> @@ -49,7 +63,7 @@ static void test_write(unsigned long *p, size_t size)
>       for (i=0, wp=p; i<(size/sizeof(*wp)); i++)
>               *wp++ = 1;
>       timeval = stop();
> -     printf("Write: %10llu usec\n", timeval);
> +     trace("Write: %10llu usec\n", timeval);
>  }
>  
>  static void test_read(unsigned long *p, size_t size)
> @@ -63,7 +77,7 @@ static void test_read(unsigned long *p, size_t size)
>               tmp = *wp++;
>       tmp = tmp;
>       timeval = stop();
> -     printf("Read : %10llu usec\n", timeval);
> +     trace("Read : %10llu usec\n", timeval);
>  }
>  
>  int main(int argc, char **argv)
> @@ -78,40 +92,43 @@ int main(int argc, char **argv)
>       size_t size, cpy_size;
>       const char *file_name = NULL;
>  
> -     while ((opt = getopt(argc, argv, "RMSApsrw")) != -1) {
> +     while ((opt = getopt(argc, argv, "RMSApsrwv")) != -1) {
>               switch (opt) {
>                       case 'R':
> -                             printf("> mmap: read-only\n");
> +                             trace("> mmap: read-only\n");
>                               is_read_only = 1;
>                               break;
>                       case 'M':
> -                             printf("> mlock\n");
> +                             trace("> mlock\n");
>                               is_mlock = 1;
>                               break;
>                       case 'S':
> -                             printf("> mlock - skip first iteration\n");
> +                             trace("> mlock - skip first iteration\n");
>                               mlock_skip = 1;
>                               break;
>                       case 'A':
> -                             printf("> mlockall\n");
> +                             trace("> mlockall\n");
>                               is_mlockall = 1;
>                               break;
>                       case 'p':
> -                             printf("> MAP_POPULATE\n");
> +                             trace("> MAP_POPULATE\n");
>                               mflags |= MAP_POPULATE;
>                               break;
>                       case 's':
> -                             printf("> MAP_SHARED\n");
> +                             trace("> MAP_SHARED\n");
>                               mflags |= MAP_SHARED;
>                               break;
>                       case 'r':
> -                             printf("> read-test\n");
> +                             trace("> read-test\n");
>                               read_test = 1;
>                               break;
>                       case 'w':
> -                             printf("> write-test\n");
> +                             trace("> write-test\n");
>                               write_test = 1;
>                               break;
> +                     case 'v':
> +                             verbose = 1;
> +                             break;
>               }
>       }
>  
> @@ -122,7 +139,7 @@ int main(int argc, char **argv)
>       file_name = argv[optind];
>  
>       if (!(mflags & MAP_SHARED)) {
> -             printf("> MAP_PRIVATE\n");
> +             trace("> MAP_PRIVATE\n");
>               mflags |= MAP_PRIVATE;
>       }
>  
> @@ -147,36 +164,36 @@ int main(int argc, char **argv)
>       }
>       size = stat.st_size;
>  
> -     printf("> open %s size %#zx flags %#x\n", file_name, size, oflags);
> +     trace("> open %s size %#zx flags %#x\n", file_name, size, oflags);
>  
>       ret = posix_memalign(&mptr, MiB(2), size);
>       if (ret ==0)
>               free(mptr);
>  
> -     printf("> mmap mprot 0x%x flags 0x%x\n", mprot, mflags);
> +     trace("> mmap mprot 0x%x flags 0x%x\n", mprot, mflags);
>       p = mmap(mptr, size, mprot, mflags, fd, 0x0);
>       if (p == MAP_FAILED) {
>               perror("mmap failed");
>               return EXIT_FAILURE;
>       }
>       if ((long unsigned)p & (MiB(2)-1))
> -             printf("> mmap: NOT 2MiB aligned: 0x%p\n", p);
> +             trace("> mmap: NOT 2MiB aligned: 0x%p\n", p);
>       else
> -             printf("> mmap: 2MiB aligned: 0x%p\n", p);
> +             trace("> mmap: 2MiB aligned: 0x%p\n", p);
>  
>       cpy_size = size;
>  
>       for (i=0; i<3; i++) {
>  
>               if (is_mlock && !mlock_skip) {
> -                     printf("> mlock 0x%p\n", p);
> +                     trace("> mlock 0x%p\n", p);
>                       ret = mlock(p, size);
>                       if (ret < 0) {
>                               perror("mlock failed");
>                               return EXIT_FAILURE;
>                       }
>               } else if (is_mlockall) {
> -                     printf("> mlockall\n");
> +                     trace("> mlockall\n");
>                       ret = mlockall(MCL_CURRENT|MCL_FUTURE);
>                       if (ret < 0) {
>                               perror("mlockall failed");
> @@ -184,21 +201,21 @@ int main(int argc, char **argv)
>                       }
>               }
>  
> -             printf("===== %d =====\n", i+1);
> +             trace("===== %d =====\n", i+1);
>               if (write_test)
>                       test_write(p, cpy_size);
>               if (read_test)
>                       test_read(p, cpy_size);
>  
>               if (is_mlock && !mlock_skip) {
> -                     printf("> munlock 0x%p\n", p);
> +                     trace("> munlock 0x%p\n", p);
>                       ret = munlock(p, size);
>                       if (ret < 0) {
>                               perror("munlock failed");
>                               return EXIT_FAILURE;
>                       }
>               } else if (is_mlockall) {
> -                     printf("> munlockall\n");
> +                     trace("> munlockall\n");
>                       ret = munlockall();
>                       if (ret < 0) {
>                               perror("munlockall failed");
> @@ -210,8 +227,15 @@ int main(int argc, char **argv)
>               mlock_skip = 0;
>       }
>  
> -     printf("> munmap 0x%p\n", p);
> +     trace("> munmap 0x%p\n", p);
>       munmap(p, size);
> +     printf("mmap: ok prot=%#x flags=%#x%s%s%s%s%s\n",
> +             mprot, mflags,
> +             is_read_only ? " RO" : "",
> +             is_mlock ? " MLOCK" : "",
> +             is_mlockall ? " MLOCKALL" : "",
> +             read_test ? " READ" : "",
> +             write_test ? " WRITE" : "");
>       return EXIT_SUCCESS;
>  }
>  
> diff --git a/test/mmap.sh b/test/mmap.sh
> index 760257dc7f93..7d0053da0e1a 100755
> --- a/test/mmap.sh
> +++ b/test/mmap.sh
> @@ -2,12 +2,14 @@
>  # SPDX-License-Identifier: GPL-2.0
>  # Copyright (C) 2015-2020 Intel Corporation. All rights reserved.
>  
> +MMAP_ARGS=("$@")
> +
>  . $(dirname $0)/common
>  
>  MNT=test_mmap_mnt
>  FILE=image
>  DEV=""
> -TEST=$TEST_PATH/mmap
> +TEST=("$TEST_PATH/mmap" "${MMAP_ARGS[@]}")
>  rc=77
>  
>  cleanup() {
> @@ -23,26 +25,26 @@ cleanup() {
>  
>  test_mmap() {
>       # SHARED
> -     $TEST -Mrwps $MNT/$FILE     # mlock, populate, shared (mlock fail)
> -     $TEST -Arwps $MNT/$FILE     # mlockall, populate, shared
> -     $TEST -RMrps $MNT/$FILE     # read-only, mlock, populate, shared (mlock 
> fail)
> -     $TEST -rwps  $MNT/$FILE     # populate, shared (populate no effect)
> -     $TEST -Rrps  $MNT/$FILE     # read-only populate, shared (populate no 
> effect)
> -     $TEST -Mrws  $MNT/$FILE     # mlock, shared (mlock fail)
> -     $TEST -RMrs  $MNT/$FILE     # read-only, mlock, shared (mlock fail)
> -     $TEST -rws   $MNT/$FILE     # shared (ok)
> -     $TEST -Rrs   $MNT/$FILE     # read-only, shared (ok)
> +     "${TEST[@]}" -Mrwps "$MNT/$FILE"     # mlock, populate, shared (mlock 
> fail)
> +     "${TEST[@]}" -Arwps "$MNT/$FILE"     # mlockall, populate, shared
> +     "${TEST[@]}" -RMrps "$MNT/$FILE"     # read-only, mlock, populate, 
> shared (mlock fail)
> +     "${TEST[@]}" -rwps  "$MNT/$FILE"     # populate, shared (populate no 
> effect)
> +     "${TEST[@]}" -Rrps  "$MNT/$FILE"     # read-only populate, shared 
> (populate no effect)
> +     "${TEST[@]}" -Mrws  "$MNT/$FILE"     # mlock, shared (mlock fail)
> +     "${TEST[@]}" -RMrs  "$MNT/$FILE"     # read-only, mlock, shared (mlock 
> fail)
> +     "${TEST[@]}" -rws   "$MNT/$FILE"     # shared (ok)
> +     "${TEST[@]}" -Rrs   "$MNT/$FILE"     # read-only, shared (ok)
>  
>       # PRIVATE
> -     $TEST -Mrwp  $MNT/$FILE      # mlock, populate, private (ok)
> -     $TEST -RMrp  $MNT/$FILE      # read-only, mlock, populate, private 
> (mlock fail)
> -     $TEST -rwp   $MNT/$FILE      # populate, private (ok)
> -     $TEST -Rrp   $MNT/$FILE      # read-only, populate, private (populate 
> no effect)
> -     $TEST -Mrw   $MNT/$FILE      # mlock, private (ok)
> -     $TEST -RMr   $MNT/$FILE      # read-only, mlock, private (mlock fail)
> -     $TEST -MSr   $MNT/$FILE      # private, read before mlock (ok)
> -     $TEST -rw    $MNT/$FILE      # private (ok)
> -     $TEST -Rr    $MNT/$FILE      # read-only, private (ok)
> +     "${TEST[@]}" -Mrwp  "$MNT/$FILE"     # mlock, populate, private (ok)
> +     "${TEST[@]}" -RMrp  "$MNT/$FILE"     # read-only, mlock, populate, 
> private (mlock fail)
> +     "${TEST[@]}" -rwp   "$MNT/$FILE"     # populate, private (ok)
> +     "${TEST[@]}" -Rrp   "$MNT/$FILE"     # read-only, populate, private 
> (populate no effect)
> +     "${TEST[@]}" -Mrw   "$MNT/$FILE"     # mlock, private (ok)
> +     "${TEST[@]}" -RMr   "$MNT/$FILE"     # read-only, mlock, private (mlock 
> fail)
> +     "${TEST[@]}" -MSr   "$MNT/$FILE"     # private, read before mlock (ok)
> +     "${TEST[@]}" -rw    "$MNT/$FILE"     # private (ok)
> +     "${TEST[@]}" -Rr    "$MNT/$FILE"     # read-only, private (ok)
>  }
>  
>  set -e


Reply via email to