* [LTP] [PATCH 0/2] __builtin___clear_cache() => __clear_cache()
@ 2025-10-12 19:40 Petr Vorel
2025-10-12 19:40 ` [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache Petr Vorel
2025-10-12 19:40 ` [LTP] [PATCH 2/2] hugemmap15: Check for __clear_cache() Petr Vorel
0 siblings, 2 replies; 4+ messages in thread
From: Petr Vorel @ 2025-10-12 19:40 UTC (permalink / raw)
To: ltp; +Cc: Hui Min Mina Chou, Khem Raj
Hi,
based on Khem's report and attempt to fix
https://patchwork.ozlabs.org/project/ltp/patch/20240611055655.614782-1-raj.khem@gmail.com/
https://lore.kernel.org/ltp/20240611055655.614782-1-raj.khem@gmail.com/
Kind regards,
Petr
Petr Vorel (2):
m4: mprotect04: Replace __builtin___clear_cache with __clear_cache
hugemmap15: Check for __clear_cache()
configure.ac | 2 +-
m4/ltp-builtin_clear_cache.m4 | 19 ------------------
m4/ltp-clear_cache.m4 | 20 +++++++++++++++++++
.../kernel/mem/hugetlb/hugemmap/hugemmap15.c | 3 +++
.../kernel/syscalls/mprotect/mprotect04.c | 7 +++----
5 files changed, 27 insertions(+), 24 deletions(-)
delete mode 100644 m4/ltp-builtin_clear_cache.m4
create mode 100644 m4/ltp-clear_cache.m4
--
2.51.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 4+ messages in thread
* [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache
2025-10-12 19:40 [LTP] [PATCH 0/2] __builtin___clear_cache() => __clear_cache() Petr Vorel
@ 2025-10-12 19:40 ` Petr Vorel
2025-10-13 9:02 ` Andrea Cervesato via ltp
2025-10-12 19:40 ` [LTP] [PATCH 2/2] hugemmap15: Check for __clear_cache() Petr Vorel
1 sibling, 1 reply; 4+ messages in thread
From: Petr Vorel @ 2025-10-12 19:40 UTC (permalink / raw)
To: ltp; +Cc: Hui Min Mina Chou, Khem Raj
__clear_cache() should be quite common now and we already use it in
hugemmap15.c. Convert autotools m4 check to detect it.
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
configure.ac | 2 +-
m4/ltp-builtin_clear_cache.m4 | 19 ------------------
m4/ltp-clear_cache.m4 | 20 +++++++++++++++++++
.../kernel/syscalls/mprotect/mprotect04.c | 7 +++----
4 files changed, 24 insertions(+), 24 deletions(-)
delete mode 100644 m4/ltp-builtin_clear_cache.m4
create mode 100644 m4/ltp-clear_cache.m4
diff --git a/configure.ac b/configure.ac
index 0480f46ca2..461fa2b577 100644
--- a/configure.ac
+++ b/configure.ac
@@ -393,9 +393,9 @@ AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./g
# NOTE: don't create custom functions for simple checks, put them into this file
LTP_CHECK_ACL_SUPPORT
LTP_CHECK_ATOMIC_MEMORY_MODEL
-LTP_CHECK_BUILTIN_CLEAR_CACHE
LTP_CHECK_CAPABILITY_SUPPORT
LTP_CHECK_CC_WARN_OLDSTYLE
+LTP_CHECK_CLEAR_CACHE
LTP_CHECK_CRYPTO
LTP_CHECK_FORTIFY_SOURCE
LTP_CHECK_KERNEL_DEVEL
diff --git a/m4/ltp-builtin_clear_cache.m4 b/m4/ltp-builtin_clear_cache.m4
deleted file mode 100644
index 86e1cfc914..0000000000
--- a/m4/ltp-builtin_clear_cache.m4
+++ /dev/null
@@ -1,19 +0,0 @@
-dnl SPDX-License-Identifier: GPL-2.0-or-later
-dnl Copyright (c) Linux Test Project, 2016
-
-AC_DEFUN([LTP_CHECK_BUILTIN_CLEAR_CACHE],[
- AC_MSG_CHECKING([for __builtin___clear_cache])
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
-int main(void) {
- char arr[16];
- __builtin___clear_cache(arr, arr + sizeof(arr));
- return 0;
-}]])],[has_bcc="yes"])
-
-if test "x$has_bcc" = xyes; then
- AC_DEFINE(HAVE_BUILTIN_CLEAR_CACHE,1,[Define to 1 if you have __builtin___clear_cache])
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-])
diff --git a/m4/ltp-clear_cache.m4 b/m4/ltp-clear_cache.m4
new file mode 100644
index 0000000000..99c6a1b653
--- /dev/null
+++ b/m4/ltp-clear_cache.m4
@@ -0,0 +1,20 @@
+dnl SPDX-License-Identifier: GPL-2.0-or-later
+dnl Copyright (c) Linux Test Project, 2016
+dnl Copyright (c) Linux Test Project, 2025
+
+AC_DEFUN([LTP_CHECK_CLEAR_CACHE],[
+ AC_MSG_CHECKING([for __clear_cache])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+int main(void) {
+ char arr[16];
+ __clear_cache(arr, arr + sizeof(arr));
+ return 0;
+}]])],[has_clear_cache="yes"])
+
+if test "x$has_clear_cache" = xyes; then
+ AC_DEFINE(HAVE_CLEAR_CACHE, 1, [Define to 1 if you have __clear_cache])
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+])
diff --git a/testcases/kernel/syscalls/mprotect/mprotect04.c b/testcases/kernel/syscalls/mprotect/mprotect04.c
index 6c7f6bd017..fa4d3be4ba 100644
--- a/testcases/kernel/syscalls/mprotect/mprotect04.c
+++ b/testcases/kernel/syscalls/mprotect/mprotect04.c
@@ -152,11 +152,10 @@ static int page_present(void *p)
static void clear_cache(void *start, int len)
{
-#if HAVE_BUILTIN_CLEAR_CACHE == 1
- __builtin___clear_cache(start, start + len);
+#ifdef HAVE_CLEAR_CACHE
+ __clear_cache(start, start + len);
#else
- tst_brkm(TCONF, cleanup,
- "compiler doesn't have __builtin___clear_cache()");
+ tst_brkm(TCONF, cleanup, "compiler doesn't have __clear_cache()");
#endif
}
--
2.51.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [LTP] [PATCH 2/2] hugemmap15: Check for __clear_cache()
2025-10-12 19:40 [LTP] [PATCH 0/2] __builtin___clear_cache() => __clear_cache() Petr Vorel
2025-10-12 19:40 ` [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache Petr Vorel
@ 2025-10-12 19:40 ` Petr Vorel
1 sibling, 0 replies; 4+ messages in thread
From: Petr Vorel @ 2025-10-12 19:40 UTC (permalink / raw)
To: ltp; +Cc: Hui Min Mina Chou, Khem Raj
It fails to compile at least on riscv64 with older compiler.
It looks like it requires clang >= 20.1.0.
Reported-by: Khem Raj <raj.khem@gmail.com>
Cc: Hui Min Mina Chou <minachou@andestech.com>
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
testcases/kernel/mem/hugetlb/hugemmap/hugemmap15.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap15.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap15.c
index 1dde9e87ba..641c021809 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap15.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap15.c
@@ -46,7 +46,10 @@ static void cacheflush(void *p)
#if defined(__powerpc__)
asm volatile("dcbst 0,%0; sync; icbi 0,%0; isync" : : "r"(p));
#elif defined(__arm__) || defined(__aarch64__) || defined(__riscv) || defined(__loongarch__)
+# ifdef HAVE_CLEAR_CACHE
__clear_cache(p, p + COPY_SIZE);
+# else
+ tst_brk(TCONF, "compiler doesn't have __clear_cache()");
#else
(void)p;
#endif
--
2.51.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache
2025-10-12 19:40 ` [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache Petr Vorel
@ 2025-10-13 9:02 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 4+ messages in thread
From: Andrea Cervesato via ltp @ 2025-10-13 9:02 UTC (permalink / raw)
To: Petr Vorel, ltp; +Cc: Hui Min Mina Chou, ltp, Khem Raj
Hi!
On Sun Oct 12, 2025 at 9:40 PM CEST, Petr Vorel wrote:
> __clear_cache() should be quite common now and we already use it in
> hugemmap15.c. Convert autotools m4 check to detect it.
>
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
> ---
> configure.ac | 2 +-
> m4/ltp-builtin_clear_cache.m4 | 19 ------------------
> m4/ltp-clear_cache.m4 | 20 +++++++++++++++++++
> .../kernel/syscalls/mprotect/mprotect04.c | 7 +++----
> 4 files changed, 24 insertions(+), 24 deletions(-)
> delete mode 100644 m4/ltp-builtin_clear_cache.m4
> create mode 100644 m4/ltp-clear_cache.m4
>
> diff --git a/configure.ac b/configure.ac
> index 0480f46ca2..461fa2b577 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -393,9 +393,9 @@ AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./g
> # NOTE: don't create custom functions for simple checks, put them into this file
> LTP_CHECK_ACL_SUPPORT
> LTP_CHECK_ATOMIC_MEMORY_MODEL
> -LTP_CHECK_BUILTIN_CLEAR_CACHE
> LTP_CHECK_CAPABILITY_SUPPORT
> LTP_CHECK_CC_WARN_OLDSTYLE
> +LTP_CHECK_CLEAR_CACHE
> LTP_CHECK_CRYPTO
> LTP_CHECK_FORTIFY_SOURCE
> LTP_CHECK_KERNEL_DEVEL
> diff --git a/m4/ltp-builtin_clear_cache.m4 b/m4/ltp-builtin_clear_cache.m4
> deleted file mode 100644
> index 86e1cfc914..0000000000
> --- a/m4/ltp-builtin_clear_cache.m4
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -dnl SPDX-License-Identifier: GPL-2.0-or-later
> -dnl Copyright (c) Linux Test Project, 2016
> -
> -AC_DEFUN([LTP_CHECK_BUILTIN_CLEAR_CACHE],[
> - AC_MSG_CHECKING([for __builtin___clear_cache])
> - AC_LINK_IFELSE([AC_LANG_SOURCE([[
> -int main(void) {
> - char arr[16];
> - __builtin___clear_cache(arr, arr + sizeof(arr));
> - return 0;
> -}]])],[has_bcc="yes"])
> -
> -if test "x$has_bcc" = xyes; then
> - AC_DEFINE(HAVE_BUILTIN_CLEAR_CACHE,1,[Define to 1 if you have __builtin___clear_cache])
> - AC_MSG_RESULT(yes)
> -else
> - AC_MSG_RESULT(no)
> -fi
> -])
> diff --git a/m4/ltp-clear_cache.m4 b/m4/ltp-clear_cache.m4
> new file mode 100644
> index 0000000000..99c6a1b653
> --- /dev/null
> +++ b/m4/ltp-clear_cache.m4
> @@ -0,0 +1,20 @@
> +dnl SPDX-License-Identifier: GPL-2.0-or-later
> +dnl Copyright (c) Linux Test Project, 2016
> +dnl Copyright (c) Linux Test Project, 2025
> +
> +AC_DEFUN([LTP_CHECK_CLEAR_CACHE],[
> + AC_MSG_CHECKING([for __clear_cache])
> + AC_LINK_IFELSE([AC_LANG_SOURCE([[
> +int main(void) {
> + char arr[16];
> + __clear_cache(arr, arr + sizeof(arr));
> + return 0;
> +}]])],[has_clear_cache="yes"])
> +
> +if test "x$has_clear_cache" = xyes; then
> + AC_DEFINE(HAVE_CLEAR_CACHE, 1, [Define to 1 if you have __clear_cache])
> + AC_MSG_RESULT(yes)
> +else
> + AC_MSG_RESULT(no)
> +fi
> +])
> diff --git a/testcases/kernel/syscalls/mprotect/mprotect04.c b/testcases/kernel/syscalls/mprotect/mprotect04.c
> index 6c7f6bd017..fa4d3be4ba 100644
> --- a/testcases/kernel/syscalls/mprotect/mprotect04.c
> +++ b/testcases/kernel/syscalls/mprotect/mprotect04.c
> @@ -152,11 +152,10 @@ static int page_present(void *p)
>
> static void clear_cache(void *start, int len)
> {
> -#if HAVE_BUILTIN_CLEAR_CACHE == 1
> - __builtin___clear_cache(start, start + len);
> +#ifdef HAVE_CLEAR_CACHE
I'm not 100% sure if it's a good idea to rename HAVE_BUILTIN_CLEAR_CACHE
to HAVE_CLEAR_CACHE, since this syntax is often used inside tests to
check if we have missing syscalls/functions inside libc implementation.
I would keep HAVE_BUILTIN_CLEAR_CACHE anyway in this case, since it's a
strictly compiler related feature.
> + __clear_cache(start, start + len);
> #else
> - tst_brkm(TCONF, cleanup,
> - "compiler doesn't have __builtin___clear_cache()");
> + tst_brkm(TCONF, cleanup, "compiler doesn't have __clear_cache()");
> #endif
> }
>
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-10-13 9:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-12 19:40 [LTP] [PATCH 0/2] __builtin___clear_cache() => __clear_cache() Petr Vorel
2025-10-12 19:40 ` [LTP] [PATCH 1/2] m4: mprotect04: Replace __builtin___clear_cache with __clear_cache Petr Vorel
2025-10-13 9:02 ` Andrea Cervesato via ltp
2025-10-12 19:40 ` [LTP] [PATCH 2/2] hugemmap15: Check for __clear_cache() Petr Vorel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox