Re: selftests: resctrl: cat_test.c: In function 'noncont_cat_run_test': ../kselftest.h:74:9: error: impossible constraint in 'asm' 74 | __asm__ __volatile__ ("cpuid\n\t"

From: Reinette Chatre
Date: Thu Apr 18 2024 - 13:14:18 EST




On 4/18/2024 2:37 AM, Naresh Kamboju wrote:
> The Linux next building selftests with gcc-13 found these build warnings
> and errors.
>
> Reported-by: Linux Kernel Functional Testing <lkft@xxxxxxxxxx>
>
> Build log:
> ---------
> Path:
> selftests/resctrl/resctrl_tests/
>
> In file included from resctrl.h:24,
> from cat_test.c:11:
> cat_test.c: In function 'noncont_cat_run_test':
> ../kselftest.h:74:9: error: impossible constraint in 'asm'
> 74 | __asm__ __volatile__ ("cpuid\n\t"
> \
> | ^~~~~~~
> cat_test.c:308:17: note: in expansion of macro '__cpuid_count'
> 308 | __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:310:17: note: in expansion of macro '__cpuid_count'
> 310 | __cpuid_count(0x10, 2, eax, ebx, ecx, edx);
> | ^~~~~~~~~~~~~
>

This is unexpected to me. kselftest.h intends to and still does define
__cpuid_count() exactly the same as gcc does (in gcc/config/i386/cpuid.h):


255 #define __cpuid_count(level, count, a, b, c, d) \
256 __asm__ __volatile__ ("cpuid\n\t" \
257 : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
258 : "0" (level), "2" (count))

Reinette