diff options
Diffstat (limited to 'results/classifier/118/network/2884')
| -rw-r--r-- | results/classifier/118/network/2884 | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/results/classifier/118/network/2884 b/results/classifier/118/network/2884 new file mode 100644 index 000000000..11a97080a --- /dev/null +++ b/results/classifier/118/network/2884 @@ -0,0 +1,65 @@ +network: 0.982 +device: 0.908 +graphic: 0.843 +KVM: 0.809 +socket: 0.772 +ppc: 0.749 +peripherals: 0.731 +kernel: 0.683 +PID: 0.657 +user-level: 0.641 +virtual: 0.639 +vnc: 0.630 +architecture: 0.629 +files: 0.617 +permissions: 0.594 +hypervisor: 0.580 +register: 0.578 +performance: 0.559 +i386: 0.543 +semantic: 0.528 +x86: 0.527 +risc-v: 0.519 +debug: 0.491 +arm: 0.484 +mistranslation: 0.451 +boot: 0.408 +VMM: 0.406 +assembly: 0.384 +TCG: 0.258 + +Questions about vfio-pci +Description of problem: +When I use VFIO-PCI to pass through an hns3 device and load the driver to the VM to enable the hns3 network port, there is a possibility that the failure occurs. +Steps to reproduce: +1. Start the VM and load the hns3 driver. +2. enable net port + + `ifconfig eth0 10.10.10.10/24 up` +3. ping host + + `ping 10.10.10.11 -c 3` +Additional information: +I have the following findings: + +1. The problem can be reproduced in different kernel versions and QEMU versions. +2. The problem does not recur when the number of vCPUs is 1. +3. It is irrelevant to the GIC version. + +the hns3 relately logic: + +{width="394" height="285"} + +If the VM has two vCPUs, "ifconfig eth0 10.10.10.10/24 up" command performs two sequential enable_irq operations(vector_num=2). The enable_irq will trap into KVM for interrupt configuration and exit to QEMU for PCI device emulation. When emulating interrupt enabling in QEMU, vfio\_\[intx/msi/msix\]\_enable calls vfio_disable_interrupts to disable all interrupts on the vdev. + +{width="455" height="266"} + +vfio_disable_interrupts in QEMU calls the kernel vfio driver interface vfio_pci_set_irqs_ioctl + +{width="404" height="127"} + +dump stack as above. and then its_irq_domain_deactivate will call its_send_discard to discard the interrupt on the device. + +If an interrupt is handled after the first enable_irq but the second enable_irq discards it, this inconsistency leads to network port enablement failures. + +It puzzles me. why does the vfio-pci disable all interrupts of the device before enabling irqs? |