From: Jason Xing kernelxing@tencent.com
When I compiled the tools/testing/selftests/bpf, the following error pops out: uprobe_multi.c: In function ‘trigger_uprobe’: uprobe_multi.c:109:26: error: ‘MADV_PAGEOUT’ undeclared (first use in this function); did you mean ‘MADV_RANDOM’? madvise(addr, page_sz, MADV_PAGEOUT); ^~~~~~~~~~~~ MADV_RANDOM
We can see MADV_PAGEOUT existing in mman-common.h on x86 arch, so including this header file solves this compilation error.
Signed-off-by: Jason Xing kernelxing@tencent.com --- tools/testing/selftests/bpf/uprobe_multi.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c index c7828b13e5ff..b0e11ffe0e1c 100644 --- a/tools/testing/selftests/bpf/uprobe_multi.c +++ b/tools/testing/selftests/bpf/uprobe_multi.c @@ -5,6 +5,7 @@ #include <stdbool.h> #include <stdint.h> #include <sys/mman.h> +#include <mman-common.h> #include <unistd.h> #include <sdt.h>
On Sun, Oct 20, 2024 at 11:14 AM Jason Xing kerneljasonxing@gmail.com wrote:
From: Jason Xing kernelxing@tencent.com
When I compiled the tools/testing/selftests/bpf, the following error pops out: uprobe_multi.c: In function ‘trigger_uprobe’: uprobe_multi.c:109:26: error: ‘MADV_PAGEOUT’ undeclared (first use in this function); did you mean ‘MADV_RANDOM’? madvise(addr, page_sz, MADV_PAGEOUT); ^~~~~~~~~~~~ MADV_RANDOM
We can see MADV_PAGEOUT existing in mman-common.h on x86 arch, so including this header file solves this compilation error.
Signed-off-by: Jason Xing kernelxing@tencent.com
tools/testing/selftests/bpf/uprobe_multi.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c index c7828b13e5ff..b0e11ffe0e1c 100644 --- a/tools/testing/selftests/bpf/uprobe_multi.c +++ b/tools/testing/selftests/bpf/uprobe_multi.c @@ -5,6 +5,7 @@ #include <stdbool.h> #include <stdint.h> #include <sys/mman.h> +#include <mman-common.h>
uprobe_multi.c:8:10: fatal error: mman-common.h: No such file or directory 61 8 | #include <mman-common.h> 62 | ^~~~~~~~~~~~~~~
After seeing the error that CI reported to me, I realized that I did cp /usr/include/asm-generic/mman-common.h to /usr/include/mman-common.h.
If I try "#include <asm-generic/mman-common.h>", then I will see redefinition error: tools/include/uapi/asm-generic/mman-common.h:26: error: "MAP_POPULATE" redefined [-Werror] #define MAP_POPULATE 0x008000 /* populate (prefault) pagetables */
In file included from /usr/include/sys/mman.h:41, from uprobe_multi.c:7: /usr/include/bits/mman.h:38: note: this is the location of the previous definition # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
It looks odd to me. Let me dig into it more.
Thanks, Jason
On Sun, Oct 20, 2024 at 12:10 PM Jason Xing kerneljasonxing@gmail.com wrote:
On Sun, Oct 20, 2024 at 11:14 AM Jason Xing kerneljasonxing@gmail.com wrote:
From: Jason Xing kernelxing@tencent.com
When I compiled the tools/testing/selftests/bpf, the following error pops out: uprobe_multi.c: In function ‘trigger_uprobe’: uprobe_multi.c:109:26: error: ‘MADV_PAGEOUT’ undeclared (first use in this function); did you mean ‘MADV_RANDOM’? madvise(addr, page_sz, MADV_PAGEOUT); ^~~~~~~~~~~~ MADV_RANDOM
We can see MADV_PAGEOUT existing in mman-common.h on x86 arch, so including this header file solves this compilation error.
Signed-off-by: Jason Xing kernelxing@tencent.com
tools/testing/selftests/bpf/uprobe_multi.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c index c7828b13e5ff..b0e11ffe0e1c 100644 --- a/tools/testing/selftests/bpf/uprobe_multi.c +++ b/tools/testing/selftests/bpf/uprobe_multi.c @@ -5,6 +5,7 @@ #include <stdbool.h> #include <stdint.h> #include <sys/mman.h> +#include <mman-common.h>
uprobe_multi.c:8:10: fatal error: mman-common.h: No such file or directory 61 8 | #include <mman-common.h> 62 | ^~~~~~~~~~~~~~~
After seeing the error that CI reported to me, I realized that I did cp /usr/include/asm-generic/mman-common.h to /usr/include/mman-common.h.
If I try "#include <asm-generic/mman-common.h>", then I will see redefinition error: tools/include/uapi/asm-generic/mman-common.h:26: error: "MAP_POPULATE" redefined [-Werror] #define MAP_POPULATE 0x008000 /* populate (prefault) pagetables */
In file included from /usr/include/sys/mman.h:41, from uprobe_multi.c:7: /usr/include/bits/mman.h:38: note: this is the location of the previous definition # define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
It looks odd to me. Let me dig into it more.
Ah, I know how to fix it: diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c index c7828b13e5ff..40231f02b95d 100644 --- a/tools/testing/selftests/bpf/uprobe_multi.c +++ b/tools/testing/selftests/bpf/uprobe_multi.c @@ -4,6 +4,7 @@ #include <string.h> #include <stdbool.h> #include <stdint.h> +#include <linux/mman.h> #include <sys/mman.h> #include <unistd.h> #include <sdt.h>
It works. I'll post it in 24 hours.
linux-kselftest-mirror@lists.linaro.org