]> www.infradead.org Git - users/hch/misc.git/commitdiff
kcov: load acquire coverage count in user-space code
authorSoham Bagchi <soham.bagchi@utah.edu>
Mon, 28 Jul 2025 18:43:18 +0000 (12:43 -0600)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 14 Sep 2025 00:32:44 +0000 (17:32 -0700)
Update the KCOV documentation to use a load-acquire operation for the
first element of the shared memory buffer between kernel-space and
user-space.

The load-acquire pairs with the write memory barrier used in
kcov_move_area().

[soham.bagchi@utah.edu: v2]
Link: https://lkml.kernel.org/r/20250803180558.2967962-1-soham.bagchi@utah.edu
Link: https://lkml.kernel.org/r/20250728184318.1839137-2-soham.bagchi@utah.edu
Signed-off-by: Soham Bagchi <soham.bagchi@utah.edu>
Reviewed-by: Marco Elver <elver@google.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Andrey Konovalov <andreyknvl@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dmitriy Vyukov <dvyukov@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Thomas Gleinxer <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Documentation/dev-tools/kcov.rst

index 6611434e2dd247c6c40afcbf1e6c4e22e0562176..8127849d40f59ed10925192e7e55e12b2c43a4b6 100644 (file)
@@ -361,7 +361,12 @@ local tasks spawned by the process and the global task that handles USB bus #1:
         */
        sleep(2);
 
-       n = __atomic_load_n(&cover[0], __ATOMIC_RELAXED);
+        /*
+         * The load to the coverage count should be an acquire to pair with
+         * pair with the corresponding write memory barrier (smp_wmb()) on
+         * the kernel-side in kcov_move_area().
+         */
+       n = __atomic_load_n(&cover[0], __ATOMIC_ACQUIRE);
        for (i = 0; i < n; i++)
                printf("0x%lx\n", cover[i + 1]);
        if (ioctl(fd, KCOV_DISABLE, 0))