From 9150933dc524b6cedc42b063b7a2092e202f3672 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 31 Jul 2021 12:11:37 -0700 Subject: stress-ng: Detemine minimal stack size via sysconf This helps it compile with glibc 2.34+ Signed-off-by: Khem Raj Signed-off-by: Richard Purdie --- ...nimal-stack-size-via-sysconf-then-PTHREAD.patch | 103 +++++++++++++++++++++ .../stress-ng/stress-ng_0.12.12.bb | 1 + 2 files changed, 104 insertions(+) create mode 100644 meta/recipes-extended/stress-ng/stress-ng/0001-Detemine-minimal-stack-size-via-sysconf-then-PTHREAD.patch (limited to 'meta') diff --git a/meta/recipes-extended/stress-ng/stress-ng/0001-Detemine-minimal-stack-size-via-sysconf-then-PTHREAD.patch b/meta/recipes-extended/stress-ng/stress-ng/0001-Detemine-minimal-stack-size-via-sysconf-then-PTHREAD.patch new file mode 100644 index 0000000000..d275e3d7f9 --- /dev/null +++ b/meta/recipes-extended/stress-ng/stress-ng/0001-Detemine-minimal-stack-size-via-sysconf-then-PTHREAD.patch @@ -0,0 +1,103 @@ +From f839de283c44ffe46a2d14bfdf854c145abd8ed6 Mon Sep 17 00:00:00 2001 +From: Colin Ian King +Date: Mon, 19 Jul 2021 20:49:34 +0100 +Subject: [PATCH] Detemine minimal stack size via sysconf, then PTHREAD_STACK_MIN then guess + +Don't rely on PTHREAD_STACK_MIN being defined, use sysconf, then +PTHREAD_STACK_MIN if it is defined, then 8K default. + +Upstream-Status: Backport [https://kernel.ubuntu.com/git/cking/stress-ng.git/commit/?id=f839de283c44ffe46a2d14bfdf854c145abd8ed6] +Signed-off-by: Colin Ian King +--- + core-helper.c | 31 +++++++++++++++++++++++++++++++ + stress-ng.h | 1 + + stress-pthread.c | 13 ++----------- + 3 files changed, 34 insertions(+), 11 deletions(-) + +diff --git a/core-helper.c b/core-helper.c +index 508627f2..97a3b869 100644 +--- a/core-helper.c ++++ b/core-helper.c +@@ -2494,6 +2494,37 @@ size_t stress_min_sig_stack_size(void) + return (size_t)sz; + } + ++size_t stress_min_pthread_stack_size(void) ++{ ++ static long sz = -1, min; ++ ++ /* return cached copy */ ++ if (sz > 0) ++ return sz; ++ ++ min = stress_min_aux_sig_stack_size(); ++#if defined(__SC_THREAD_STACK_MIN_VALUE) ++ sz = sysconf(__SC_THREAD_STACK_MIN_VALUE); ++ if (sz > min) ++ min = sz; ++#endif ++#if defined(_SC_THREAD_STACK_MIN_VALUE) ++ sz = sysconf(_SC_THREAD_STACK_MIN_VALUE); ++ if (sz > min) ++ min = sz; ++#endif ++#if defined(PTHREAD_STACK_MIN) ++ if (PTHREAD_STACK_MIN > min) ++ min = PTHREAD_STACK_MIN; ++#endif ++ if (8192 > min) ++ min = 8192; ++ ++ sz = min; ++ ++ return (size_t)sz; ++} ++ + /* + * stress_sig_handler_exit() + * signal handler that exits a process via _exit(0) for +diff --git a/stress-ng.h b/stress-ng.h +index 8a8b17ae..cd744756 100644 +--- a/stress-ng.h ++++ b/stress-ng.h +@@ -4056,6 +4056,7 @@ extern WARN_UNUSED int32_t stress_get_opt_ionice_class(const char *const str); + /* Misc helper funcs */ + extern WARN_UNUSED size_t stress_sig_stack_size(void); + extern WARN_UNUSED size_t stress_min_sig_stack_size(void); ++extern WARN_UNUSED size_t stress_min_pthread_stack_size(void); + + #define STRESS_SIGSTKSZ (stress_sig_stack_size()) + #define STRESS_MINSIGSTKSZ (stress_min_sig_stack_size()) +diff --git a/stress-pthread.c b/stress-pthread.c +index 0da3aeec..27777af8 100644 +--- a/stress-pthread.c ++++ b/stress-pthread.c +@@ -69,12 +69,7 @@ static const stress_opt_set_func_t opt_set_funcs[] = { + + #if defined(HAVE_LIB_PTHREAD) + +-/* Some systems such as GNU/HURD don't define PTHREAD_STACK_MIN */ +-#if !defined(PTHREAD_STACK_MIN) +-#define PTHREAD_STACK_MIN (16 * KB) +-#endif +- +-#define DEFAULT_STACK_MIN (16 * KB) ++#define DEFAULT_STACK_MIN (8 * KB) + + #if defined(HAVE_GET_ROBUST_LIST) && \ + defined(HAVE_LINUX_FUTEX_H) +@@ -404,11 +399,7 @@ static int stress_pthread(const stress_args_t *args) + stress_pthread_args_t pargs = { args, NULL, 0 }; + sigset_t set; + #if defined(HAVE_PTHREAD_ATTR_SETSTACK) +-#if DEFAULT_STACK_MIN == PTHREAD_STACK_MIN +- const size_t stack_size = PTHREAD_STACK_MIN; +-#else +- const size_t stack_size = STRESS_MAXIMUM(DEFAULT_STACK_MIN, PTHREAD_STACK_MIN); +-#endif ++ const size_t stack_size = STRESS_MAXIMUM(DEFAULT_STACK_MIN, stress_min_pthread_stack_size()); + #endif + + keep_running_flag = true; +-- +2.32.0 diff --git a/meta/recipes-extended/stress-ng/stress-ng_0.12.12.bb b/meta/recipes-extended/stress-ng/stress-ng_0.12.12.bb index 32c2d2b6a7..afc9ddf96c 100644 --- a/meta/recipes-extended/stress-ng/stress-ng_0.12.12.bb +++ b/meta/recipes-extended/stress-ng/stress-ng_0.12.12.bb @@ -7,6 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" SRC_URI = "https://kernel.ubuntu.com/~cking/tarballs/${BPN}/${BP}.tar.xz \ file://0001-Do-not-preserve-ownership-when-installing-example-jo.patch \ + file://0001-Detemine-minimal-stack-size-via-sysconf-then-PTHREAD.patch \ " SRC_URI[sha256sum] = "f27af50f6f2308e707fef927674bdd209a046b116734281b792aeca35a4e4499" -- cgit 1.2.3-korg