Question about Valgrind tool in Intel new platform

Yang Zhong <[email protected]>
Newsgroups gmane.comp.debugging.valgrind
Message-ID <20220420080154.GA7993@yangzhon-Virtual>
Hello all,

Recently our QAs used valgrind tool(valgrind-3.20.0.GIT) to verify memory leak 
with Qemu release on Intel new Sapphire Rapids platform. They only focused on
Sapphire Rapids' new features which are merged into Linux and Qemu release.

#The command
/usr/local/bin/valgrind --log-file=/root/valgrind.log --leak-check=full -v \
./qemu-system-x86_64 \
 ...... 

#Qemu will report below issue with valgrind tool:
qemu-system-x86_64: warning: prctl(ARCH_REQ_XCOMP_GUEST_PERM) failure for feature bit 18
qemu-system-x86_64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Operation not permitted

W/o valgrind tool, the AMX can work normally in latest Linux and Qemu release.

I checked the Qemu code, below syscall will fail(rc=-1) with valgrind tool
int rc = syscall(SYS_arch_prctl, ARCH_REQ_XCOMP_GUEST_PERM, bit);
Notice: bit=18, which is AMX feature in xstate area.

I also use same valgrind command to check amx selftool on Sapphire Rapids platform.

/usr/local/bin/valgrind --log-file=/root/valgrind.log --leak-check=full -v linux/tools/testing/selftests/x86/amx_64
amx_64: [FAIL]  xstate cpuid: invalid tile data size/offset: 0/0: Success

from the linux/tools/testing/selftests/x86/amx.c

        eax = CPUID_LEAF_XSTATE;
        ecx = XFEATURE_XTILEDATA;

        cpuid(&eax, &ebx, &ecx, &edx);
        /*
         * eax: XTILEDATA state component size
         * ebx: XTILEDATA state component offset in user buffer
         */
        if (!eax || !ebx)
                fatal_error("xstate cpuid: invalid tile data size/offset: %d/%d",
                                eax, ebx);

Above code only read AMX xtilestate's offset and size from xstate buffer by cpuid.
But from the error information, with valgrind tool, the amx selftest tool in Linux can't
read correct Sapphire Rapids platform's cpuid registers. 

I also tried this same command w/o valgrind tool in intel older platform(without this feature),
we can get same error information, but this should be normal behavior.
root@icx:~/yangzhon/projects/amx/linux# tools/testing/selftests/x86/amx_64
amx_64: [FAIL]  xstate cpuid: invalid tile data size/offset: 0/0: Success

So, from above issue in Intel new platform, the valgrind need do some enablings to be compatible
with on new platform? Seems valgrind tool can't identify the real HW platform because cpuid can't
read correct register value. thanks!

Regards,
Yang
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.