From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Muhammad Usama Anjum <usama.anjum@collabora.com>,
Shuah Khan <shuah@kernel.org>
Cc: "Reinette Chatre" <reinette.chatre@intel.com>,
linux-kselftest@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
"Shaopeng Tan" <tan.shaopeng@jp.fujitsu.com>,
"Fenghua Yu" <fenghua.yu@intel.com>,
"Maciej Wieczór-Retman" <maciej.wieczor-retman@intel.com>
Subject: Re: [PATCH v3 3/3] kselftest: Provide __cpuid_count() stub on non-x86 archs
Date: Tue, 3 Sep 2024 12:57:08 +0300 (EEST) [thread overview]
Message-ID: <474fb657-15a8-3fb1-c769-2269f772d8cd@linux.intel.com> (raw)
In-Reply-To: <20240829131657.1917-4-ilpo.jarvinen@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 3936 bytes --]
On Thu, 29 Aug 2024, Ilpo Järvinen wrote:
> Building resctrl selftest fails on ARM because it uses __cpuid_count()
> that fails the build with error:
>
> CC resctrl_tests
> In file included from resctrl.h:24,
> from cat_test.c:11:
> In function 'arch_supports_noncont_cat',
> inlined from 'noncont_cat_run_test' at cat_test.c:323:6:
> ../kselftest.h:74:9: error: impossible constraint in 'asm'
> 74 | __asm__ __volatile__ ("cpuid\n\t" \
> | ^~~~~~~
> cat_test.c:301:17: note: in expansion of macro '__cpuid_count'
> 301 | __cpuid_count(0x10, 1, eax, ebx, ecx, edx);
> | ^~~~~~~~~~~~~
> ../kselftest.h:74:9: error: impossible constraint in 'asm'
> 74 | __asm__ __volatile__ ("cpuid\n\t" \
> | ^~~~~~~
> cat_test.c:303:17: note: in expansion of macro '__cpuid_count'
> 303 | __cpuid_count(0x10, 2, eax, ebx, ecx, edx);
> | ^~~~~~~~~~~~~
>
> The resctrl selftest would run that code only on Intel CPUs but as is,
> the code cannot be build at all.
>
> Define HAVE_CPUID in lib.mk based on ARCH (x86 or x86_64). If ARCH is
> not set, acquire it using uname -m.
>
> Provide a stub for __cpuid_count() if HAVE_CPUID is not present to
> allow build to succeed. The stub casts its arguments to void to avoid
> causing "unused variable" or "set but not used" warnings.
>
> Fixes: ae638551ab64 ("selftests/resctrl: Add non-contiguous CBMs CAT test")
> Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> v3:
> - Remove "empty" wording
> - Also cast input parameters to void
> - Initialize ARCH from uname -m if not set (this might allow cleaning
> up some other makefiles but that is left as future work)
> v2:
> - Removed RFC & added Fixes and Tested-by
> - Fixed the error message's line splits
> - Noted down the reason for void casts in the stub
> ---
> tools/testing/selftests/kselftest.h | 6 ++++++
> tools/testing/selftests/lib.mk | 6 ++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h
> index b8967b6e29d5..9c4bfbf107f1 100644
> --- a/tools/testing/selftests/kselftest.h
> +++ b/tools/testing/selftests/kselftest.h
> @@ -70,10 +70,16 @@
> * have __cpuid_count().
> */
> #ifndef __cpuid_count
> +#ifdef HAVE_CPUID
> #define __cpuid_count(level, count, a, b, c, d) \
> __asm__ __volatile__ ("cpuid\n\t" \
> : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
> : "0" (level), "2" (count))
> +#else
> +#define __cpuid_count(level, count, a, b, c, d) do { \
> + (void)level; (void)count; (void)a; (void)b; (void)c; (void)d; \
> +} while (0)
> +#endif
> #endif
>
> /* define kselftest exit codes */
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index d6edcfcb5be8..8e3069926153 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -23,6 +23,8 @@ CLANG_TARGET_FLAGS_x86_64 := x86_64-linux-gnu
>
> # Default to host architecture if ARCH is not explicitly given.
> ifeq ($(ARCH),)
> +ARCH := $(shell uname -m 2>/dev/null || echo not)
> +ARCH := $(shell echo $(ARCH) | sed -e s/i.86/x86/)
> CLANG_TARGET_FLAGS := $(shell $(CLANG) -print-target-triple)
> else
> CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(ARCH))
> @@ -199,6 +201,10 @@ clean: $(if $(TEST_GEN_MODS_DIR),clean_mods_dir)
> # Build with _GNU_SOURCE by default
> CFLAGS += -D_GNU_SOURCE=
>
> +ifeq ($(ARCH),$(filter $(ARCH),x86 x86_64))
> +CFLAGS += -DHAVE_CPUID=
> +endif
Hpmf, scratch this. CFLAGS are overwritten by x86 selftest makefile so I
need to reorder things there before making this change.
--
i.
next prev parent reply other threads:[~2024-09-03 9:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 13:16 [PATCH v3 0/3] selftests: Fix cpuid / vendor checking build issues Ilpo Järvinen
2024-08-29 13:16 ` [PATCH v3 1/3] selftests/resctrl: Generalize non-contiguous CAT check Ilpo Järvinen
2024-08-29 13:16 ` [PATCH v3 2/3] selftests/resctrl: Always initialize ecx to avoid build warnings Ilpo Järvinen
2024-08-29 13:16 ` [PATCH v3 3/3] kselftest: Provide __cpuid_count() stub on non-x86 archs Ilpo Järvinen
2024-09-01 5:06 ` kernel test robot
2024-09-03 9:57 ` Ilpo Järvinen [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-09-01 2:07 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=474fb657-15a8-3fb1-c769-2269f772d8cd@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=fenghua.yu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=reinette.chatre@intel.com \
--cc=shuah@kernel.org \
--cc=tan.shaopeng@jp.fujitsu.com \
--cc=usama.anjum@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.