From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 038749E166 for ; Tue, 6 Jun 2023 15:53:26 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C9D6E36475 for ; Tue, 6 Jun 2023 15:52:31 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 6 Jun 2023 15:52:27 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 9DA5848C89 for ; Tue, 6 Jun 2023 15:52:26 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Tue, 6 Jun 2023 15:52:07 +0200 Message-Id: <20230606135222.984747-9-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230606135222.984747-1-d.csapak@proxmox.com> References: <20230606135222.984747-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.015 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH qemu-server v5 6/6] add test for mapped pci devices X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Jun 2023 13:53:26 -0000 Signed-off-by: Dominik Csapak --- test/cfg2cmd/q35-linux-hostpci-mapping.conf | 17 ++++ .../q35-linux-hostpci-mapping.conf.cmd | 36 ++++++++ test/run_config2command_tests.pl | 82 +++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 test/cfg2cmd/q35-linux-hostpci-mapping.conf create mode 100644 test/cfg2cmd/q35-linux-hostpci-mapping.conf.cmd diff --git a/test/cfg2cmd/q35-linux-hostpci-mapping.conf b/test/cfg2cmd/q35-linux-hostpci-mapping.conf new file mode 100644 index 00000000..2402cf2a --- /dev/null +++ b/test/cfg2cmd/q35-linux-hostpci-mapping.conf @@ -0,0 +1,17 @@ +# TEST: Config with q35, NUMA, hostpci mapping passthrough, EFI & Linux +bios: ovmf +bootdisk: scsi0 +cores: 1 +efidisk0: local:100/vm-100-disk-1.qcow2,size=128K +hostpci0: someNic +hostpci1: someGpu,mdev=some-model +hostpci2: someNic +machine: q35 +memory: 512 +net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0 +numa: 1 +ostype: l26 +scsihw: virtio-scsi-pci +smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687 +sockets: 2 +vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d diff --git a/test/cfg2cmd/q35-linux-hostpci-mapping.conf.cmd b/test/cfg2cmd/q35-linux-hostpci-mapping.conf.cmd new file mode 100644 index 00000000..814a9021 --- /dev/null +++ b/test/cfg2cmd/q35-linux-hostpci-mapping.conf.cmd @@ -0,0 +1,36 @@ +/usr/bin/kvm \ + -id 8006 \ + -name 'vm8006,debug-threads=on' \ + -no-shutdown \ + -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \ + -mon 'chardev=qmp,mode=control' \ + -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \ + -mon 'chardev=qmp-event,mode=control' \ + -pidfile /var/run/qemu-server/8006.pid \ + -daemonize \ + -smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \ + -drive 'if=pflash,unit=0,format=raw,readonly=on,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \ + -drive 'if=pflash,unit=1,id=drive-efidisk0,format=qcow2,file=/var/lib/vz/images/100/vm-100-disk-1.qcow2' \ + -global 'ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off' \ + -smp '2,sockets=2,cores=1,maxcpus=2' \ + -nodefaults \ + -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \ + -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \ + -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \ + -m 512 \ + -object 'memory-backend-ram,id=ram-node0,size=256M' \ + -numa 'node,nodeid=0,cpus=0,memdev=ram-node0' \ + -object 'memory-backend-ram,id=ram-node1,size=256M' \ + -numa 'node,nodeid=1,cpus=1,memdev=ram-node1' \ + -readconfig /usr/share/qemu-server/pve-q35-4.0.cfg \ + -device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \ + -device 'usb-tablet,id=tablet,bus=ehci.0,port=1' \ + -device 'vfio-pci,host=0000:07:10.0,id=hostpci0,bus=pci.0,addr=0x10' \ + -device 'vfio-pci,sysfsdev=/sys/bus/mdev/devices/00000001-0000-0000-0000-000000008006,id=hostpci1,bus=pci.0,addr=0x11' \ + -device 'vfio-pci,host=0000:07:10.4,id=hostpci2,bus=pci.0,addr=0x1b' \ + -device 'VGA,id=vga,bus=pcie.0,addr=0x1' \ + -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \ + -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \ + -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \ + -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=1024,bootindex=300' \ + -machine 'type=q35+pve0' diff --git a/test/run_config2command_tests.pl b/test/run_config2command_tests.pl index dda44d99..08718549 100755 --- a/test/run_config2command_tests.pl +++ b/test/run_config2command_tests.pl @@ -87,8 +87,37 @@ my $pci_devs = [ "0000:f0:43.0", "0000:f0:43.1", "1234:f0:43.1", + "0000:01:00.4", + "0000:01:00.5", + "0000:01:00.6", + "0000:07:10.0", + "0000:07:10.1", + "0000:07:10.4", ]; +my $pci_map_config = { + ids => { + someGpu => { + type => 'pci', + map => [ + 'node=localhost,path=0000:01:00.4,id=10de:2231,iommugroup=1', + 'node=localhost,path=0000:01:00.5,id=10de:2231,iommugroup=1', + 'node=localhost,path=0000:01:00.6,id=10de:2231,iommugroup=1', + ], + }, + someNic => { + type => 'pci', + map => [ + 'node=localhost,path=0000:07:10.0,id=8086:1520,iommugroup=2', + 'node=localhost,path=0000:07:10.1,id=8086:1520,iommugroup=2', + 'node=localhost,path=0000:07:10.4,id=8086:1520,iommugroup=2', + ], + }, + }, +}; + +my $usb_map_config = {}, + my $current_test; # = { # description => 'Test description', # if available # qemu_version => '2.12', @@ -275,6 +304,28 @@ $pve_common_sysfstools->mock( } sort @$pci_devs ]; }, + pci_device_info => sub { + my ($path, $noerr) = @_; + + if ($path =~ m/^0000:01:00/) { + return { + mdev => 1, + iommugroup => 1, + mdev => 1, + vendor => "0x10de", + device => "0x2231", + }; + } elsif ($path =~ m/^0000:07:10/) { + return { + iommugroup => 2, + mdev => 0, + vendor => "0x8086", + device => "0x1520", + }; + } else { + return {}; + } + }, ); my $qemu_monitor_module; @@ -303,6 +354,37 @@ $qemu_monitor_module->mock( ); $qemu_monitor_module->mock('qmp_cmd', \&qmp_cmd); +my $mapping_usb_module = Test::MockModule->new("PVE::Mapping::USB"); +$mapping_usb_module->mock( + config => sub { + return $usb_map_config; + }, +); + +my $mapping_pci_module = Test::MockModule->new("PVE::Mapping::PCI"); +$mapping_pci_module->mock( + config => sub { + return $pci_map_config; + }, +); + +my $pci_module = Test::MockModule->new("PVE::QemuServer::PCI"); +$pci_module->mock( + reserve_pci_usage => sub { + my ($ids, $vmid, $timeout, $pid, $dryrun) = @_; + + $ids = [$ids] if !ref($ids); + + for my $id (@$ids) { + if ($id eq "0000:07:10.1") { + die "reserved"; + } + } + + return undef; + }, +); + sub diff($$) { my ($a, $b) = @_; return if $a eq $b; -- 2.30.2