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 1D8A78B552 for ; Thu, 25 Aug 2022 11:24:59 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 503E722FD0 for ; Thu, 25 Aug 2022 11:24:55 +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 ; Thu, 25 Aug 2022 11:24:49 +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 A4CBE43FFE for ; Thu, 25 Aug 2022 11:24:42 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Thu, 25 Aug 2022 11:24:17 +0200 Message-Id: <20220825092440.1810328-9-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220825092440.1810328-1-d.csapak@proxmox.com> References: <20220825092440.1810328-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% 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 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [pci.pm] Subject: [pve-devel] [PATCH qemu-server v2 03/13] PCI: refactor print_pci_device 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: Thu, 25 Aug 2022 09:24:59 -0000 into a private sub. This makes the 'print_hostpci_devices' function more easier to read Signed-off-by: Dominik Csapak --- PVE/QemuServer/PCI.pm | 57 +++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/PVE/QemuServer/PCI.pm b/PVE/QemuServer/PCI.pm index 1b82aca..7406246 100644 --- a/PVE/QemuServer/PCI.pm +++ b/PVE/QemuServer/PCI.pm @@ -393,6 +393,29 @@ sub parse_hostpci { return $res; } +my $print_pci_device = sub { + my ($device, $id, $hostdevice, $pciaddr, $xvga, $bootindex, $function) = @_; + + my $devicestr = "vfio-pci,$hostdevice"; + + my $mf_addr = defined($function) ? ".$function" : ''; + + $devicestr .= ",id=${id}${mf_addr}${pciaddr}${mf_addr}"; + + if (!defined($function) || $function == 0) { + $devicestr .= ',rombar=0' if defined($device->{rombar}) && !$device->{rombar}; + $devicestr .= "$xvga"; + $devicestr .= ",multifunction=on" if defined($function); + $devicestr .= ",romfile=/usr/share/kvm/$device->{romfile}" if $device->{romfile}; + $devicestr .= ",bootindex=$bootindex" if defined($bootindex); + for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) { + $devicestr .= ",x-pci-$option=$device->{$option}" if $device->{$option}; + } + } + + return $devicestr; +}; + sub print_hostpci_devices { my ($vmid, $conf, $devices, $vga, $winversion, $q35, $bridges, $arch, $machine_type, $bootorder) = @_; @@ -457,37 +480,23 @@ sub print_hostpci_devices { $gpu_passthrough = 1; } - my $sysfspath; - if ($d->{mdev} && scalar(@$pcidevices) == 1) { + my $bootindex = $bootorder->{$id}; + + if ($d->{mdev} && !$multifunction) { my $uuid = generate_mdev_uuid($vmid, $i); - $sysfspath = "/sys/bus/mdev/devices/$uuid"; + my $sysfspath = "sysfsdev=/sys/bus/mdev/devices/$uuid"; + my $devicestr = $print_pci_device->($d, $id, $sysfspath, $pciaddr, $xvga, $bootindex); + push @$devices, '-device', $devicestr; + next; } elsif ($d->{mdev}) { warn "ignoring mediated device '$id' with multifunction device\n"; } my $j = 0; foreach my $pcidevice (@$pcidevices) { - my $devicestr = "vfio-pci"; - - if ($sysfspath) { - $devicestr .= ",sysfsdev=$sysfspath"; - } else { - $devicestr .= ",host=$pcidevice->{id}"; - } - - my $mf_addr = $multifunction ? ".$j" : ''; - $devicestr .= ",id=${id}${mf_addr}${pciaddr}${mf_addr}"; - - if ($j == 0) { - $devicestr .= ',rombar=0' if defined($d->{rombar}) && !$d->{rombar}; - $devicestr .= "$xvga"; - $devicestr .= ",multifunction=on" if $multifunction; - $devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile}; - $devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id}; - for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) { - $devicestr .= ",x-pci-$option=$d->{$option}" if $d->{$option}; - } - } + my $host = "host=$pcidevice->{id}"; + my $func = $multifunction ? $j : undef; + my $devicestr = $print_pci_device->($d, $id, $host, $pciaddr, $xvga, $bootindex, $func); push @$devices, '-device', $devicestr; $j++; -- 2.30.2