aboutsummaryrefslogtreecommitdiff
path: root/scripts/qapi/parser.py
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2024-04-08 13:09:56 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2024-04-08 21:22:00 +0200
commite34f4d87e8d47b0a65cb663aaf7bef60c2112d36 (patch)
tree581b1c255eb9774ec1fe54cae4d4ce86daa265fb /scripts/qapi/parser.py
parent207a2baa16bc27ba5ac5f75893e7adab80df3476 (diff)
downloadqemu-e34f4d87e8d47b0a65cb663aaf7bef60c2112d36.zip
qemu-e34f4d87e8d47b0a65cb663aaf7bef60c2112d36.tar.gz
qemu-e34f4d87e8d47b0a65cb663aaf7bef60c2112d36.tar.bz2
kvm: error out of kvm_irqchip_add_msi_route() in case of full route table
subj is calling kvm_add_routing_entry() which simply extends KVMState::irq_routes::entries[] but doesn't check if number of routes goes beyond limit the kernel is willing to accept. Which later leads toi the assert qemu-kvm: ../accel/kvm/kvm-all.c:1833: kvm_irqchip_commit_routes: Assertion `ret == 0' failed typically it happens during guest boot for large enough guest Reproduced with: ./qemu --enable-kvm -m 8G -smp 64 -machine pc \ `for b in {1..2}; do echo -n "-device pci-bridge,id=pci$b,chassis_nr=$b "; for i in {0..31}; do touch /tmp/vblk$b$i; echo -n "-drive file=/tmp/vblk$b$i,if=none,id=drive$b$i,format=raw -device virtio-blk-pci,drive=drive$b$i,bus=pci$b "; done; done` While crash at boot time is bad, the same might happen at hotplug time which is unacceptable. So instead calling kvm_add_routing_entry() unconditionally, check first that number of routes won't exceed KVM_CAP_IRQ_ROUTING. This way virtio device insteads killin qemu, will gracefully fail to initialize device as expected with following warnings on console: virtio-blk failed to set guest notifier (-28), ensure -accel kvm is set. virtio_bus_start_ioeventfd: failed. Fallback to userspace (slower). Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-ID: <20240408110956.451558-1-imammedo@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'scripts/qapi/parser.py')
0 files changed, 0 insertions, 0 deletions