Greeting,
FYI, we noticed the following commit (built with gcc-9):
commit: 2efd61a608b0039911924d2e5d7028eb37496e85 ("KVM: Warn if mark_page_dirty() is called without an active vCPU")
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git master
in testcase: kernel-selftests
version: kernel-selftests-x86_64-db530529-1_20220124
with following parameters:
group: kvm
ucode: 0xe2
test-description: The kernel contains a set of "self tests" under the tools/testing/selftests/ directory. These are intended to be small unit tests to exercise individual code paths in the kernel.
test-url: https://www.kernel.org/doc/Documentation/kselftest.txt
on test machine: 8 threads Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz with 28G memory
caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):
If you fix the issue, kindly add following tag
Reported-by: kernel test robot <[email protected]>
[ 123.741578][ T9801] WARNING: CPU: 2 PID: 9801 at arch/x86/kvm/../../../virt/kvm/kvm_main.c:3160 mark_page_dirty_in_slot (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3160 (discriminator 1))
[ 123.753541][ T9801] Modules linked in: btrfs blake2b_generic xor raid6_pq zstd_compress intel_rapl_msr libcrc32c intel_rapl_common sd_mod t10_pi sg ipmi_devintf i915 ipmi_msghandler x86_pkg_temp_thermal intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel mei_wdt intel_gtt ttm rapl wmi_bmof intel_cstate drm_kms_helper ahci syscopyarea libahci mei_me sysfillrect intel_uncore sysimgblt libata i2c_i801 mei i2c_smbus intel_pch_thermal fb_sys_fops wmi video intel_pmc_core acpi_pad ip_tables
[ 123.800234][ T9801] CPU: 2 PID: 9801 Comm: hyperv_clock Not tainted 5.16.0-rc4-00328-g2efd61a608b0 #1
[ 123.809567][ T9801] Hardware name: Dell Inc. OptiPlex 7040/0Y7WYT, BIOS 1.2.8 01/26/2016
[ 123.817787][ T9801] RIP: 0010:mark_page_dirty_in_slot (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3160 (discriminator 1))
[ 123.823970][ T9801] Code: 08 00 00 00 48 85 db 48 8d 43 3f 48 0f 49 c3 48 c1 f8 06 48 8d 7c c5 00 e8 77 96 ad 00 f0 48 0f ab 5d 00 48 83 c4 10 5b 5d c3 <0f> 0b 48 83 c4 10 5b 5d c3 0f 0b eb ec 48 89 54 24 08 48 89 34 24
All code
========
0: 08 00 or %al,(%rax)
2: 00 00 add %al,(%rax)
4: 48 85 db test %rbx,%rbx
7: 48 8d 43 3f lea 0x3f(%rbx),%rax
b: 48 0f 49 c3 cmovns %rbx,%rax
f: 48 c1 f8 06 sar $0x6,%rax
13: 48 8d 7c c5 00 lea 0x0(%rbp,%rax,8),%rdi
18: e8 77 96 ad 00 callq 0xad9694
1d: f0 48 0f ab 5d 00 lock bts %rbx,0x0(%rbp)
23: 48 83 c4 10 add $0x10,%rsp
27: 5b pop %rbx
28: 5d pop %rbp
29: c3 retq
2a:* 0f 0b ud2 <-- trapping instruction
2c: 48 83 c4 10 add $0x10,%rsp
30: 5b pop %rbx
31: 5d pop %rbp
32: c3 retq
33: 0f 0b ud2
35: eb ec jmp 0x23
37: 48 89 54 24 08 mov %rdx,0x8(%rsp)
3c: 48 89 34 24 mov %rsi,(%rsp)
Code starting with the faulting instruction
===========================================
0: 0f 0b ud2
2: 48 83 c4 10 add $0x10,%rsp
6: 5b pop %rbx
7: 5d pop %rbp
8: c3 retq
9: 0f 0b ud2
b: eb ec jmp 0xfffffffffffffff9
d: 48 89 54 24 08 mov %rdx,0x8(%rsp)
12: 48 89 34 24 mov %rsi,(%rsp)
[ 123.844024][ T9801] RSP: 0018:ffffc9000b49f880 EFLAGS: 00010246
[ 123.850038][ T9801] RAX: 0000000000000000 RBX: ffffc9000b4be3a8 RCX: 0000000000000000
[ 123.858004][ T9801] RDX: 0000000000000023 RSI: ffff88874e702400 RDI: ffffc9000b4a1000
[ 123.865934][ T9801] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000004
[ 123.873870][ T9801] R10: ffffc9000b4be3ab R11: fffff52001697c75 R12: 0000000000000023
[ 123.881802][ T9801] R13: ffffc9000b4a1000 R14: 0000000000000004 R15: 00007f0fd89a4000
[ 123.889734][ T9801] FS: 00007f0fd8b88740(0000) GS:ffff88860f100000(0000) knlGS:0000000000000000
[ 123.898641][ T9801] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 123.905186][ T9801] CR2: 0000000000000000 CR3: 00000001584de004 CR4: 00000000003726e0
[ 123.913131][ T9801] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 123.921060][ T9801] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 123.929036][ T9801] Call Trace:
[ 123.932257][ T9801] <TASK>
[ 123.935134][ T9801] __kvm_write_guest_page (arch/x86/kvm/../../../virt/kvm/kvm_main.c:2947)
[ 123.940399][ T9801] kvm_write_guest (arch/x86/kvm/../../../virt/kvm/kvm_main.c:2978)
[ 123.944953][ T9801] kvm_hv_invalidate_tsc_page (arch/x86/kvm/hyperv.c:1220)
[ 123.950615][ T9801] ? kvm_hv_invalidate_tsc_page (arch/x86/kvm/hyperv.c:1213)
[ 123.956501][ T9801] kvm_arch_vm_ioctl (arch/x86/kvm/x86.c:2815 arch/x86/kvm/x86.c:2826 arch/x86/kvm/x86.c:6041 arch/x86/kvm/x86.c:6315)
[ 123.961480][ T9801] ? kvm_arch_pm_notifier (arch/x86/kvm/x86.c:6072)
[ 123.966863][ T9801] ? __lock_acquire (arch/x86/include/asm/bitops.h:214 (discriminator 9) include/asm-generic/bitops/instrumented-non-atomic.h:135 (discriminator 9) kernel/locking/lockdep.c:199 (discriminator 9) kernel/locking/lockdep.c:5024 (discriminator 9))
[ 123.971721][ T9801] ? check_irq_usage (include/asm-generic/bitops/instrumented-non-atomic.h:134 kernel/locking/lockdep.c:199 kernel/locking/lockdep.c:1634 kernel/locking/lockdep.c:2771)
[ 123.976620][ T9801] ? kvm_vcpu_ioctl (arch/x86/kvm/../../../virt/kvm/kvm_main.c:4065)
[ 123.981422][ T9801] ? rcu_read_lock_sched_held (include/linux/lockdep.h:283 kernel/rcu/update.c:125)
[ 123.987028][ T9801] ? rcu_read_lock_bh_held (kernel/rcu/update.c:120)
[ 123.992271][ T9801] ? kvm_arch_vcpu_put (include/linux/srcu.h:189 arch/x86/kvm/x86.c:4483)
[ 123.997323][ T9801] ? find_held_lock (kernel/locking/lockdep.c:5130)
[ 124.002037][ T9801] ? kvm_vcpu_ioctl (arch/x86/kvm/../../../virt/kvm/kvm_main.c:4065)
[ 124.006846][ T9801] ? lock_release (kernel/locking/lockdep.c:5315 kernel/locking/lockdep.c:5657)
[ 124.011486][ T9801] ? lock_downgrade (kernel/locking/lockdep.c:5645)
[ 124.016295][ T9801] kvm_vm_ioctl (arch/x86/kvm/../../../virt/kvm/kvm_main.c:4648)
[ 124.020852][ T9801] ? kvm_arch_vcpu_ioctl_run (include/linux/srcu.h:189 arch/x86/kvm/x86.c:9074 arch/x86/kvm/x86.c:10309)
[ 124.026546][ T9801] ? kvm_unregister_device_ops (arch/x86/kvm/../../../virt/kvm/kvm_main.c:4461)
[ 124.032129][ T9801] ? __mutex_unlock_slowpath (arch/x86/include/asm/atomic64_64.h:190 include/linux/atomic/atomic-long.h:449 include/linux/atomic/atomic-instrumented.h:1677 kernel/locking/mutex.c:917)
[ 124.037740][ T9801] ? rcu_read_lock_sched_held (include/linux/lockdep.h:283 kernel/rcu/update.c:125)
[ 124.043309][ T9801] ? rcu_read_lock_bh_held (kernel/rcu/update.c:120)
[ 124.048582][ T9801] ? rcu_read_lock_bh_held (kernel/rcu/update.c:120)
[ 124.053817][ T9801] ? fiemap_prep (fs/ioctl.c:778)
[ 124.058365][ T9801] ? kvm_vcpu_ioctl (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3861)
[ 124.063157][ T9801] ? kvm_vcpu_kick (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3861)
[ 124.067904][ T9801] ? kvm_vcpu_kick (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3861)
[ 124.072618][ T9801] ? kvm_vcpu_kick (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3861)
[ 124.077352][ T9801] ? kvm_vcpu_kick (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3861)
[ 124.082073][ T9801] ? syscall_exit_to_user_mode (kernel/entry/common.c:127 kernel/entry/common.c:302)
[ 124.087696][ T9801] ? syscall_enter_from_user_mode (kernel/entry/common.c:107)
[ 124.093550][ T9801] ? rcu_read_lock_sched_held (include/linux/lockdep.h:283 kernel/rcu/update.c:125)
[ 124.099155][ T9801] ? rcu_read_lock_bh_held (kernel/rcu/update.c:120)
[ 124.104402][ T9801] __x64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:874 fs/ioctl.c:860 fs/ioctl.c:860)
[ 124.109104][ T9801] do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
[ 124.113504][ T9801] ? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4232 kernel/locking/lockdep.c:4292 kernel/locking/lockdep.c:4244)
[ 124.119441][ T9801] ? do_syscall_64 (arch/x86/entry/common.c:87)
[ 124.124014][ T9801] ? do_syscall_64 (arch/x86/entry/common.c:87)
[ 124.128534][ T9801] ? do_syscall_64 (arch/x86/entry/common.c:87)
[ 124.133074][ T9801] ? do_syscall_64 (arch/x86/entry/common.c:87)
[ 124.137620][ T9801] ? lockdep_hardirqs_on_prepare (kernel/locking/lockdep.c:4232 kernel/locking/lockdep.c:4292 kernel/locking/lockdep.c:4244)
[ 124.143560][ T9801] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:113)
[ 124.149419][ T9801] RIP: 0033:0x7f0fd8c7b427
[ 124.153795][ T9801] Code: 00 00 90 48 8b 05 69 aa 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 39 aa 0c 00 f7 d8 64 89 01 48
All code
========
0: 00 00 add %al,(%rax)
2: 90 nop
3: 48 8b 05 69 aa 0c 00 mov 0xcaa69(%rip),%rax # 0xcaa73
a: 64 c7 00 26 00 00 00 movl $0x26,%fs:(%rax)
11: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax
18: c3 retq
19: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
20: 00 00 00
23: b8 10 00 00 00 mov $0x10,%eax
28: 0f 05 syscall
2a:* 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax <-- trapping instruction
30: 73 01 jae 0x33
32: c3 retq
33: 48 8b 0d 39 aa 0c 00 mov 0xcaa39(%rip),%rcx # 0xcaa73
3a: f7 d8 neg %eax
3c: 64 89 01 mov %eax,%fs:(%rcx)
3f: 48 rex.W
Code starting with the faulting instruction
===========================================
0: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax
6: 73 01 jae 0x9
8: c3 retq
9: 48 8b 0d 39 aa 0c 00 mov 0xcaa39(%rip),%rcx # 0xcaa49
10: f7 d8 neg %eax
12: 64 89 01 mov %eax,%fs:(%rcx)
15: 48 rex.W
To reproduce:
git clone https://github.com/intel/lkp-tests.git
cd lkp-tests
sudo bin/lkp install job.yaml # job file is attached in this email
bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
sudo bin/lkp run generated-yaml-file
# if come across any failure that blocks the test,
# please remove ~/.lkp and /lkp dir to run from a clean state.
---
0DAY/LKP+ Test Infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/[email protected] Intel Corporation
Thanks,
Oliver Sang
On 1/27/22 03:30, kernel test robot wrote:
> Greeting,
>
> FYI, we noticed the following commit (built with gcc-9):
>
> commit: 2efd61a608b0039911924d2e5d7028eb37496e85 ("KVM: Warn if mark_page_dirty() is called without an active vCPU")
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git master
>
> caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):
>
> [ 123.817787][ T9801] RIP: 0010:mark_page_dirty_in_slot (arch/x86/kvm/../../../virt/kvm/kvm_main.c:3160 (discriminator 1))
> [ 123.935134][ T9801] __kvm_write_guest_page (arch/x86/kvm/../../../virt/kvm/kvm_main.c:2947)
> [ 123.940399][ T9801] kvm_write_guest (arch/x86/kvm/../../../virt/kvm/kvm_main.c:2978)
> [ 123.944953][ T9801] kvm_hv_invalidate_tsc_page (arch/x86/kvm/hyperv.c:1220)
Hi, this is known and should be fixed soon.
Paolo