Bug 5876 - [ANCK-5.10-15][Anolis8][rc3.1][社区nightly][ECS]kernel-selftests kvm目录下mmio_warning_test用例fail,“Error in opening KVM dev file: 2”
Summary: [ANCK-5.10-15][Anolis8][rc3.1][社区nightly][ECS]kernel-selftests kvm目录下mmio_war...
Status: NEW
Alias: None
Product: Antest
Classification: Infrastructures
Component: 测试用例 (show other bugs) 测试用例
Version: unspecified
Hardware: x86_64 Linux
: P3-Medium S3-normal
Target Milestone: ---
Assignee: shuancue
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-07-14 10:47 UTC by shanxifanshi
Modified: 2023-07-18 10:09 UTC (History)
11 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description shanxifanshi alibaba_cloud_group 2023-07-14 10:47:14 UTC
[缺陷描述]:
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
Comment 1 shanxifanshi alibaba_cloud_group 2023-07-18 10:09:18 UTC
这个问题在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