Bug 2019314
Summary: | [ovmf] nc broken after hotplug device for windows guest | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 9 | Reporter: | menli <menli> |
Component: | qemu-kvm | Assignee: | Virtualization Maintenance <virt-maint> |
qemu-kvm sub component: | Devices | QA Contact: | CongLi <coli> |
Status: | CLOSED DUPLICATE | Docs Contact: | |
Severity: | high | ||
Priority: | high | CC: | coli, jinzhao, phou, qinwang, qizhu, virt-maint, xuwei |
Version: | 9.0 | ||
Target Milestone: | rc | ||
Target Release: | --- | ||
Hardware: | x86_64 | ||
OS: | Windows | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2021-11-04 08:46:52 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
menli@redhat.com
2021-11-02 08:16:47 UTC
edk2 version: edk2-ovmf-20210527gite1999b264f1f-6.el9.noarch I found the nc disconnection only at the first time. Versions: kernel-5.14.0-1.7.1.el9.x86_64 qemu-kvm-6.1.0-6.el9 edk2-ovmf-20210527gite1999b264f1f-7.el9.noarch win11 with virtio-win-prewhql-0.1-211.iso 1. boot a Win11 guest # mkdir /tmp/mytpm # /usr/bin/swtpm_setup --tpm2 --tpmstate /tmp/mytpm --create-ek-cert --create-platform-cert --overwrite --lock-nvram # /usr/bin/swtpm socket --daemon --ctrl type=unixio,path=/tmp/avocado_596hxgoj/avocado-vt-vm1_tpm0_swtpm.sock,mode=0600 --tpmstate dir=/tmp/mytpm,mode=0600 --tpm2 /usr/libexec/qemu-kvm \ -S \ -name 'avocado-vt-vm1' \ -sandbox on \ -blockdev node-name=file_ovmf_code,driver=file,filename=/usr/share/OVMF/OVMF_CODE.secboot.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_code,driver=raw,read-only=on,file=file_ovmf_code \ -blockdev node-name=file_ovmf_vars,driver=file,filename=/home/kvm_autotest_root/images/avocado-vt-vm1_win11-64-virtio-scsi.qcow2_VARS.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_vars,driver=raw,read-only=off,file=file_ovmf_vars \ -machine q35,memory-backend=mem-machine_mem,pflash0=drive_ovmf_code,pflash1=drive_ovmf_vars \ -device pcie-root-port,id=pcie-root-port-0,multifunction=on,bus=pcie.0,addr=0x1,chassis=1 \ -device pcie-pci-bridge,id=pcie-pci-bridge-0,addr=0x0,bus=pcie-root-port-0 \ -nodefaults \ -device VGA,bus=pcie.0,addr=0x2 \ -m 109568 \ -object memory-backend-ram,size=109568M,id=mem-machine_mem \ -smp 56,maxcpus=56,cores=28,threads=1,dies=1,sockets=2 \ -cpu 'Icelake-Server-noTSX',hv_stimer,hv_synic,hv_vpindex,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_frequencies,hv_runtime,hv_tlbflush,hv_reenlightenment,hv_stimer_direct,hv_ipi,+kvm_pv_unhalt \ -chardev socket,wait=off,path=/tmp/avocado_596hxgoj/monitor-qmpmonitor1-20211101-171713-6TwaG1GI,server=on,id=qmp_id_qmpmonitor1 \ -mon chardev=qmp_id_qmpmonitor1,mode=control \ -chardev socket,wait=off,path=/tmp/avocado_596hxgoj/monitor-catch_monitor-20211101-171713-6TwaG1GI,server=on,id=qmp_id_catch_monitor \ -mon chardev=qmp_id_catch_monitor,mode=control \ -device pvpanic,ioport=0x505,id=id7CzbRb \ -chardev socket,wait=off,path=/tmp/avocado_596hxgoj/serial-serial0-20211101-171713-6TwaG1GI,server=on,id=chardev_serial0 \ -device isa-serial,id=serial0,chardev=chardev_serial0 \ -chardev socket,id=seabioslog_id_20211101-171713-6TwaG1GI,path=/tmp/avocado_596hxgoj/seabios-20211101-171713-6TwaG1GI,server=on,wait=off \ -device isa-debugcon,chardev=seabioslog_id_20211101-171713-6TwaG1GI,iobase=0x402 \ -device pcie-root-port,id=pcie-root-port-1,port=0x1,addr=0x1.0x1,bus=pcie.0,chassis=2 \ -device qemu-xhci,id=usb1,bus=pcie-root-port-1,addr=0x0 \ -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ -device pcie-root-port,id=pcie-root-port-2,port=0x2,addr=0x1.0x2,bus=pcie.0,chassis=3 \ -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pcie-root-port-2,addr=0x0 \ -blockdev node-name=file_image1,driver=file,auto-read-only=on,discard=unmap,aio=threads,filename=/home/kvm_autotest_root/images/win11-64-virtio-scsi.qcow2,cache.direct=on,cache.no-flush=off \ -blockdev node-name=drive_image1,driver=qcow2,read-only=off,cache.direct=on,cache.no-flush=off,file=file_image1 \ -device scsi-hd,id=image1,drive=drive_image1,write-cache=on \ -device pcie-root-port,id=pcie-root-port-3,port=0x3,addr=0x1.0x3,bus=pcie.0,chassis=4 \ -device virtio-net-pci,mac=9a:6d:9b:a3:91:92,id=idu0gazB,netdev=idVL4RzC,bus=pcie-root-port-3,addr=0x0 \ -netdev tap,id=idVL4RzC,vhost=on \ -blockdev node-name=file_cd1,driver=file,auto-read-only=on,discard=unmap,aio=threads,filename=/home/kvm_autotest_root/iso/windows/winutils.iso,cache.direct=on,cache.no-flush=off \ -blockdev node-name=drive_cd1,driver=raw,read-only=on,cache.direct=on,cache.no-flush=off,file=file_cd1 \ -device scsi-cd,id=cd1,drive=drive_cd1,write-cache=on \ -vnc :0 \ -rtc base=localtime,clock=host,driftfix=slew \ -boot menu=off,order=cdn,once=c,strict=off \ -chardev socket,id=char_vtpm_tpm0,path=/tmp/avocado_596hxgoj/avocado-vt-vm1_tpm0_swtpm.sock \ -tpmdev emulator,chardev=char_vtpm_tpm0,id=emulator_vtpm_tpm0 \ -device tpm-crb,id=tpm-crb_vtpm_tpm0,tpmdev=emulator_vtpm_tpm0 \ -enable-kvm \ -device pcie-root-port,id=pcie_extra_root_port_0,multifunction=on,bus=pcie.0,addr=0x3,chassis=5 \ -monitor stdio \ -qmp tcp:0:6666,server,nowait \ 2. connect to guest session # nc -C 10.73.116.196 10022 get disk index C:\>wmic diskdrive get index Index 0 3. hotplug blk device # telnet localhost 6666 {"execute":"qmp_capabilities"} {"return": {}} {"execute": "blockdev-add", "arguments": {"node-name": "file_stg0", "driver": "file", "auto-read-only": true, "discard": "unmap", "aio": "threads", "filename": "/home/kvm_autotest_root/images/storage0.raw", "cache": {"direct": true, "no-flush": false}}, "id": "hM7JFSeo"} {"return": {}, "id": "hM7JFSeo"} {"execute": "blockdev-add", "arguments": {"node-name": "drive_stg0", "driver": "raw", "read-only": false, "cache": {"direct": true, "no-flush": false}, "file": "file_stg0"}, "id": "QOuMpwwZ"} {"return": {}, "id": "QOuMpwwZ"} {"execute": "device_add", "arguments": {"driver": "virtio-blk-pci", "id": "stg0", "drive": "drive_stg0", "write-cache": "on", "bus": "pcie_extra_root_port_0", "addr": "0x0"}, "id": "T8sSU2i0"} {"return": {}, "id": "T8sSU2i0"} {"execute": "query-block"} 4. re-connect guest session # nc -C 10.73.116.196 10022 5. get disk index after hotplug blk disk C:\>wmic diskdrive get index Index 0 1 6. unplug blk device and re-hotplug it {"execute":"device_del","arguments":{"id":"stg0"} } {"return": {}} {"timestamp": {"seconds": 1635894046, "microseconds": 658627}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/stg0/virtio-backend"}} {"timestamp": {"seconds": 1635894046, "microseconds": 658821}, "event": "DEVICE_DELETED", "data": {"device": "stg0", "path": "/machine/peripheral/stg0"}} {"execute": "blockdev-del","arguments": { "node-name": "drive_stg0"}} {"return": {}} {"execute": "blockdev-del","arguments": { "node-name": "file_stg0"}} {"return": {}} {"execute": "blockdev-add", "arguments": {"node-name": "file_stg0", "driver": "file", "auto-read-only": true, "discard": "unmap", "aio": "threads", "filename": "/home/kvm_autotest_root/images/storage0.raw", "cache": {"direct": true, "no-flush": false}}, "id": "hM7JFSeo"} {"return": {}, "id": "hM7JFSeo"} {"execute": "blockdev-add", "arguments": {"node-name": "drive_stg0", "driver": "raw", "read-only": false, "cache": {"direct": true, "no-flush": false}, "file": "file_stg0"}, "id": "QOuMpwwZ"} {"return": {}, "id": "QOuMpwwZ"} {"execute": "device_add", "arguments": {"driver": "virtio-blk-pci", "id": "stg0", "drive": "drive_stg0", "write-cache": "on", "bus": "pcie_extra_root_port_0", "addr": "0x0"}, "id": "T8sSU2i0"} {"return": {}, "id": "T8sSU2i0"} 7. check nc session C:\>wmic diskdrive get index Index 0 1 After step 3, nc disconnection C:\> Ncat: Connection reset by peer. After step 5, nc works well. After step 7, nc works well. Tested in rhel8.6, also hit it. Versions: kernel-4.18.0-348.3.el8.x86_64 qemu-kvm-6.1.0-4.module+el8.6.0+13039+4b81a1dc edk2-ovmf-20210527gite1999b264f1f-3.el8.noarch win11 with virtio-win-prewhql-0.1-211.iso Reproduce on Red Hat Enterprise Linux release 9.0 Beta (Plow) 5.14.0-11.el9.x86_64 qemu-kvm-6.1.0-6.el9.x86_64 seabios-bin-1.14.0-7.el9.noarch edk2-ovmf-20210527gite1999b264f1f-6.el9.noarch It looks like related to device add operation not limit on block device. Steps: 1.boot vm /usr/libexec/qemu-kvm \ -name testvm \ -machine q35,pflash0=drive_ovmf_code,pflash1=drive_ovmf_vars \ -m 4G \ -smp 8 \ -cpu host,svm,+kvm_pv_unhalt \ -device ich9-usb-ehci1,id=usb1 \ -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ \ -blockdev node-name=file_ovmf_code,driver=file,filename=/usr/share/OVMF/OVMF_CODE.secboot.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_code,driver=raw,read-only=on,file=file_ovmf_code \ -blockdev node-name=file_ovmf_vars,driver=file,filename=/home/ovmf/OVMF_VARS.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_vars,driver=raw,read-only=off,file=file_ovmf_vars \ \ -device pcie-root-port,id=pcie-root-port-0,multifunction=on,bus=pcie.0,addr=0x3,chassis=1 \ -device pcie-root-port,id=pcie-root-port-1,port=0x1,addr=0x3.0x1,bus=pcie.0,chassis=2 \ -device pcie-root-port,id=pcie-root-port-2,port=0x2,addr=0x3.0x2,bus=pcie.0,chassis=3 \ -device pcie-root-port,id=pcie-root-port-3,port=0x3,addr=0x3.0x3,bus=pcie.0,chassis=4 \ -device pcie-root-port,id=pcie-root-port-4,port=0x4,addr=0x3.0x4,bus=pcie.0,chassis=5 \ -device pcie-root-port,id=pcie-root-port-5,port=0x5,addr=0x3.0x5,bus=pcie.0,chassis=6 \ -device pcie-root-port,id=pcie-root-port-6,port=0x6,addr=0x3.0x6,bus=pcie.0,chassis=7 \ -device pcie-root-port,id=pcie-root-port-7,port=0x7,addr=0x3.0x7,bus=pcie.0,chassis=8 \ -device pcie-root-port,id=pcie_extra_root_port_0,bus=pcie.0,addr=0x4 \ -device virtio-scsi-pci,id=scsi0,bus=pcie-root-port-5 \ -device virtio-scsi-pci,id=scsi1,bus=pcie-root-port-6 \ -blockdev driver=qcow2,file.driver=file,cache.direct=off,cache.no-flush=on,file.filename=/home/kvm_autotest_root/images/win2019-64-virtio-scsi.qcow2,node-name=drive_image1 \ -device scsi-hd,id=os,drive=drive_image1,bus=scsi0.0,bootindex=0,serial=OS_DISK \ \ -blockdev driver=qcow2,file.driver=file,file.filename=/home/kvm_autotest_root/images/data1.qcow2,node-name=data_image1 \ -device scsi-hd,id=data1,drive=data_image1,bus=scsi0.0,bootindex=1,serial=DATA_DISK \ -vnc :5 \ -monitor stdio \ -qmp tcp:0:5955,server=on,wait=off \ -device virtio-net-pci,mac=9a:b5:b6:b1:b2:b7,id=nic1,netdev=nicpci,bus=pcie-root-port-7 \ -netdev tap,id=nicpci \ -chardev socket,id=qmpmonitor1,path=/var/tmp/run-qmp.log,server=on,wait=off \ -mon chardev=qmpmonitor1,mode=control \ -chardev socket,id=serial1,path=/var/tmp/run-serial.log,server=on,wait=off \ -device isa-serial,chardev=serial1 \ -D debug.log \ -boot menu=on,reboot-timeout=1000,strict=off \ 2.create nc connection with guest ip and port nc -C 10.73.114.185 10022 3.create nc connection with socket file nc -U /var/tmp/run-serial.log 4.hotplug new device (nic or block) {"execute": "qmp_capabilities"} { "execute": "netdev_add", "arguments": { "type":"tap","id":"idb8GVnn","vhost":true,"script":"/etc/qemu-ifup"}} {"execute": "device_add", "arguments": { "driver":"virtio-net-pci","netdev":"idb8GVnn","mac":"00:1a:4a:42:0b:01","id": "idVn2ph4","bus":"pcie_extra_root_port_0"}} 5.check NC connection Result: Rhe nc connnection with guest ip and port is broken Ncat: Connection reset by peer. The nc connection with socked file is keep. Also hit this issue when hotpluging virtio-scsi-pci device. Here are remote shell server logs: Shell server: waiting for clients to connect... File transfer server: waiting for clients to connect... Shell server: new client connected (10.73.73.9:45796) Shell server: client disconnected (10.73.73.9:45796) ----after virtio-scsi-pci device was pluged Child exited SocketToChild thread exited nc connection disconnected after run this command: {'execute': 'device_add', 'arguments': {'id':'virtio_scsi_pci1', 'driver':'virtio-scsi-pci', 'num_queues':'12', 'bus':'pcie_extra_root_port_0', 'addr':'0x0'},'id': '9PP8WMx4'} Reproduced with qemu-kvm-6.1.0-5.el9.x86_64 Other versions: kernel-5.14.0-9.el9.x86_64 edk2-ovmf-20210527gite1999b264f1f-6.el9.noarch virtio-win-prewhql-213/214 Also tried to test with qemu-kvm-6.0.0-13.el9_b.5.x86_64, cannot reproduce this issue. other versions: 5.14.0-6.el9.x86_64 edk2-ovmf-20210527gite1999b264f1f-6.el9.noarch virtio-win-prewhql-213 Thanks~ Peixiu Tested on Red Hat Enterprise Linux release 9.0 Beta (Plow) 5.14.0-11.el9.x86_64 qemu-kvm-6.1.0-6.el9.x86_64 seabios-bin-1.14.0-7.el9.noarch edk2-ovmf-20210527gite1999b264f1f-6.el9.noarch It does not reproduce after adding following option on VM command. -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off The question is "ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off" is necessary for the OVMF ? /usr/libexec/qemu-kvm \ -name testvm \ -machine q35,pflash0=drive_ovmf_code,pflash1=drive_ovmf_vars \ -m 4G \ -smp 8 \ -cpu host,svm,+kvm_pv_unhalt \ -device ich9-usb-ehci1,id=usb1 \ -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off \ \ -blockdev node-name=file_ovmf_code,driver=file,filename=/usr/share/OVMF/OVMF_CODE.secboot.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_code,driver=raw,read-only=on,file=file_ovmf_code \ -blockdev node-name=file_ovmf_vars,driver=file,filename=/home/ovmf/OVMF_VARS.fd,auto-read-only=on,discard=unmap \ -blockdev node-name=drive_ovmf_vars,driver=raw,read-only=off,file=file_ovmf_vars \ \ -device pcie-root-port,id=pcie-root-port-0,multifunction=on,bus=pcie.0,addr=0x3,chassis=1 \ -device pcie-root-port,id=pcie-root-port-1,port=0x1,addr=0x3.0x1,bus=pcie.0,chassis=2 \ -device pcie-root-port,id=pcie-root-port-2,port=0x2,addr=0x3.0x2,bus=pcie.0,chassis=3 \ -device pcie-root-port,id=pcie-root-port-3,port=0x3,addr=0x3.0x3,bus=pcie.0,chassis=4 \ -device pcie-root-port,id=pcie-root-port-4,port=0x4,addr=0x3.0x4,bus=pcie.0,chassis=5 \ -device pcie-root-port,id=pcie-root-port-5,port=0x5,addr=0x3.0x5,bus=pcie.0,chassis=6 \ -device pcie-root-port,id=pcie-root-port-6,port=0x6,addr=0x3.0x6,bus=pcie.0,chassis=7 \ -device pcie-root-port,id=pcie-root-port-7,port=0x7,addr=0x3.0x7,bus=pcie.0,chassis=8 \ -device pcie-root-port,id=pcie_extra_root_port_0,bus=pcie.0,addr=0x4 \ -device virtio-scsi-pci,id=scsi0,bus=pcie-root-port-5 \ -device virtio-scsi-pci,id=scsi1,bus=pcie-root-port-6 \ -blockdev driver=qcow2,file.driver=file,cache.direct=off,cache.no-flush=on,file.filename=/home/kvm_autotest_root/images/win2019-64-virtio-scsi.qcow2,node-name=drive_image1 \ -device scsi-hd,id=os,drive=drive_image1,bus=scsi0.0,bootindex=0,serial=OS_DISK \ \ -blockdev driver=qcow2,file.driver=file,file.filename=/home/kvm_autotest_root/images/data1.qcow2,node-name=data_image1 \ -device scsi-hd,id=data1,drive=data_image1,bus=scsi0.0,bootindex=1,serial=DATA_DISK \ -vnc :5 \ -monitor stdio \ -qmp tcp:0:5955,server=on,wait=off \ -device virtio-net-pci,mac=9a:b5:b6:b1:b2:b7,id=nic1,netdev=nicpci,bus=pcie-root-port-7 \ -netdev tap,id=nicpci \ -chardev socket,id=qmpmonitor1,path=/var/tmp/run-qmp.log,server=on,wait=off \ -mon chardev=qmpmonitor1,mode=control \ -chardev socket,id=serial1,path=/var/tmp/run-serial.log,server=on,wait=off \ -device isa-serial,chardev=serial1 \ -D debug.log \ -boot menu=on,reboot-timeout=1000,strict=off \ *** This bug has been marked as a duplicate of bug 2004829 *** |