diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
| commit | f4566a1e73957800df75a3dd2dccee8a4697f327 (patch) | |
| tree | b043b875228c0b25988af66c680d60cae69d761d /lib/stackinit_kunit.c | |
| parent | b9e6e28663928cab836a19abbdec3d036a07db3b (diff) | |
| parent | 4cece764965020c22cff7665b18a012006359095 (diff) | |
| download | linux-f4566a1e73957800df75a3dd2dccee8a4697f327.tar.xz | |
Merge tag 'v6.9-rc1' into sched/core, to pick up fixes and to refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib/stackinit_kunit.c')
| -rw-r--r-- | lib/stackinit_kunit.c | 21 | 
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/stackinit_kunit.c b/lib/stackinit_kunit.c index 05947a2feb93..3bc14d1ee816 100644 --- a/lib/stackinit_kunit.c +++ b/lib/stackinit_kunit.c @@ -63,7 +63,16 @@ static bool stackinit_range_contains(char *haystack_start, size_t haystack_size,  #define FETCH_ARG_STRING(var)		var  #define FETCH_ARG_STRUCT(var)		&var +/* + * On m68k, if the leaf function test variable is longer than 8 bytes, + * the start of the stack frame moves. 8 is sufficiently large to + * test m68k char arrays, but leave it at 16 for other architectures. + */ +#ifdef CONFIG_M68K +#define FILL_SIZE_STRING		8 +#else  #define FILL_SIZE_STRING		16 +#endif  #define INIT_CLONE_SCALAR		/**/  #define INIT_CLONE_STRING		[FILL_SIZE_STRING] @@ -165,19 +174,23 @@ static noinline void test_ ## name (struct kunit *test)		\  	/* Verify all bytes overwritten with 0xFF. */		\  	for (sum = 0, i = 0; i < target_size; i++)		\  		sum += (check_buf[i] != 0xFF);			\ -	KUNIT_ASSERT_EQ_MSG(test, sum, 0,			\ -			    "leaf fill was not 0xFF!?\n");	\  	/* Clear entire check buffer for later bit tests. */	\  	memset(check_buf, 0x00, sizeof(check_buf));		\  	/* Extract stack-defined variable contents. */		\  	ignored = leaf_ ##name((unsigned long)&ignored, 0,	\  				FETCH_ARG_ ## which(zero));	\ +	/*							\ +	 * Delay the sum test to here to do as little as	\ +	 * possible between the two leaf function calls.	\ +	 */							\ +	KUNIT_ASSERT_EQ_MSG(test, sum, 0,			\ +			    "leaf fill was not 0xFF!?\n");	\  								\  	/* Validate that compiler lined up fill and target. */	\  	KUNIT_ASSERT_TRUE_MSG(test,				\  		stackinit_range_contains(fill_start, fill_size,	\  			    target_start, target_size),		\ -		"stack fill missed target!? "			\ +		"stackframe was not the same between calls!? "	\  		"(fill %zu wide, target offset by %d)\n",	\  		fill_size,					\  		(int)((ssize_t)(uintptr_t)fill_start -		\ @@ -404,7 +417,7 @@ static noinline int leaf_switch_2_none(unsigned long sp, bool fill,   * These are expected to fail for most configurations because neither   * GCC nor Clang have a way to perform initialization of variables in   * non-code areas (i.e. in a switch statement before the first "case"). - * https://bugs.llvm.org/show_bug.cgi?id=44916 + * https://llvm.org/pr44916   */  DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR, ALWAYS_FAIL);  DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR, ALWAYS_FAIL);  | 
