KVM: arm64: Allow no running vcpu on saving vgic3 pending table
authorGavin Shan <gshan@redhat.com>
Thu, 26 Jan 2023 23:54:51 +0000 (07:54 +0800)
committerMarc Zyngier <maz@kernel.org>
Sun, 29 Jan 2023 18:46:11 +0000 (18:46 +0000)
commit6028acbe3a5f2119a2a6ddd3e06453c87c09cae0
tree8e0d8fa78efcc72da3ccf54cbe0be479a555d153
parent2f8b1ad2228a7f1f1e2458864f4bfc1cbdf511ed
KVM: arm64: Allow no running vcpu on saving vgic3 pending table

We don't have a running VCPU context to save vgic3 pending table due
to KVM_DEV_ARM_VGIC_{GRP_CTRL, SAVE_PENDING_TABLES} command on KVM
device "kvm-arm-vgic-v3". The unknown case is caught by kvm-unit-tests.

   # ./kvm-unit-tests/tests/its-pending-migration
   WARNING: CPU: 120 PID: 7973 at arch/arm64/kvm/../../../virt/kvm/kvm_main.c:3325 \
   mark_page_dirty_in_slot+0x60/0xe0
    :
   mark_page_dirty_in_slot+0x60/0xe0
   __kvm_write_guest_page+0xcc/0x100
   kvm_write_guest+0x7c/0xb0
   vgic_v3_save_pending_tables+0x148/0x2a0
   vgic_set_common_attr+0x158/0x240
   vgic_v3_set_attr+0x4c/0x5c
   kvm_device_ioctl+0x100/0x160
   __arm64_sys_ioctl+0xa8/0xf0
   invoke_syscall.constprop.0+0x7c/0xd0
   el0_svc_common.constprop.0+0x144/0x160
   do_el0_svc+0x34/0x60
   el0_svc+0x3c/0x1a0
   el0t_64_sync_handler+0xb4/0x130
   el0t_64_sync+0x178/0x17c

Use vgic_write_guest_lock() to save vgic3 pending table.

Reported-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20230126235451.469087-5-gshan@redhat.com
Documentation/virt/kvm/api.rst
arch/arm64/kvm/vgic/vgic-v3.c