[缺陷描述]: kernel-selftests kvm目录下mmio_warning_test用例fail,“Error in opening KVM dev file: 2” 测试日志: # ./mmio_warning_test ==== Test Assertion Failure ==== lib/kvm_util.c:1820: f != NULL pid=951043 tid=951043 - No such file or directory 1 0x0000000000403d3e: vm_is_unrestricted_guest at kvm_util.c:1819 2 0x000000000040149b: main at mmio_warning_test.c:101 3 0x00007fa7a523acf2: ?? ??:0 4 0x000000000040157d: _start at ??:? Error in opening KVM dev file: 2 复现环境: anolis8 5.10 ecs 复现概率: 必现 内核信息: # uname -r 5.10.134-460.git.e450ca8f08b5.an8.x86_64 操作系统信息: # cat /etc/os-release NAME="Anolis OS" VERSION="8.8" ID="anolis" ID_LIKE="rhel fedora centos" VERSION_ID="8.8" PLATFORM_ID="platform:an8" PRETTY_NAME="Anolis OS 8.8" ANSI_COLOR="0;31" HOME_URL="https://openanolis.cn/" cpu信息: # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel BIOS Vendor ID: Alibaba Cloud CPU family: 6 Model: 106 Model name: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz BIOS Model name: pc-i440fx-2.1 Stepping: 6 CPU MHz: 2699.998 BogoMIPS: 5399.99 Hypervisor vendor: KVM Virtualization type: full L1d cache: 48K L1i cache: 32K L2 cache: 1280K L3 cache: 49152K NUMA node0 CPU(s): 0-3 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid tsc_known_freq pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves wbnoinvd arat avx512vbmi pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm arch_capabilities 内存信息: # free -h total used free shared buff/cache available Mem: 15Gi 486Mi 10Gi 2.0Mi 4.1Gi 14Gi Swap: 0B 0B 0B [复现步骤]: 测试用例代码路径: tools/testing/selftests/net/l2tp.sh 执行步骤: 下载当前内核对应的kernel源码包 rpm -ivh xxx.src.rpm 默认安装到/root下 yum-builddep -y rpmbuild/SPECS/kernel.spec 自动安装前置依赖包,需要yum-utils rpmbuild -bp ./rpmbuild/SPECS/kernel.spec # 这个步骤会打相关的patch, 解压缩tar包,生成BUILD目录 cd rpmbuild/BUILD/kernel-xxx/linux-xxx/ 接下来就可以编译测试了 cd /tools/testing/selftests/kvm/ make 执行测试用例 ./mmio_warning_test [期望结果]: 用例pass [实际结果]: 用例fail [原因分析] 这个问题是7月13号解决kvm编译失败问题后,新发现的fail用例 用例在测试前会判断是否Intel CPU以及是否unrestricted_guest,在判断vm_is_unrestricted_guest时需要首先打开/dev/kvm设备,ecs不存在该设备,打开失败,引发断言失败,跑出异常 bool vm_is_unrestricted_guest(struct kvm_vm *vm) { char val = 'N'; size_t count; FILE *f; if (vm == NULL) { /* Ensure that the KVM vendor-specific module is loaded. */ f = fopen(KVM_DEV_PATH, "r"); TEST_ASSERT(f != NULL, "Error in opening KVM dev file: %d", errno); fclose(f); } f = fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r"); if (f) { count = fread(&val, sizeof(char), 1, f); TEST_ASSERT(count == 1, "Unable to read from param file."); fclose(f); } return val == 'Y'; } 看起来是个用例问题,请开发同学确认 上游有修复代码,会先判断是否打开/dev/kvm失败时,会对用例做skip处理,请开发同学参考 https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git/commit/?id=2aab4b355cbbe1deacfd9349729c43509042b557
这个问题在anck 15 rc3.1内核仍然存在 # ./mmio_warning_test ==== Test Assertion Failure ==== lib/kvm_util.c:1820: f != NULL pid=69772 tid=69772 - No such file or directory 1 0x0000000000403d3e: vm_is_unrestricted_guest at kvm_util.c:1819 2 0x000000000040149b: main at mmio_warning_test.c:101 3 0x00007fcf2143acf2: ?? ??:0 4 0x000000000040157d: _start at ??:? Error in opening KVM dev file: 2 # uname -r 5.10.134-15_rc3.1.an8.x86_64