From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 48E331FF183 for ; Wed, 2 Jul 2025 16:49:30 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D74961DE4E; Wed, 2 Jul 2025 16:49:42 +0200 (CEST) To: pve-devel@lists.proxmox.com Date: Wed, 2 Jul 2025 16:48:52 +0200 In-Reply-To: <20250702144900.3963405-1-alexandre.derumier@groupe-cyllene.com> References: <20250702144900.3963405-1-alexandre.derumier@groupe-cyllene.com> MIME-Version: 1.0 Message-ID: List-Id: Proxmox VE development discussion List-Post: From: Alexandre Derumier via pve-devel Precedence: list Cc: Alexandre Derumier X-Mailman-Version: 2.1.29 X-BeenThere: pve-devel@lists.proxmox.com List-Subscribe: , List-Unsubscribe: , List-Archive: Reply-To: Proxmox VE development discussion List-Help: Subject: [pve-devel] [PATCH qemu-server 02/10] add print_drivedevice_controller && print_drivedevice_iothread Content-Type: multipart/mixed; boundary="===============3797391968904917211==" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" --===============3797391968904917211== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: pve-devel@lists.proxmox.com Delivered-To: pve-devel@lists.proxmox.com 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 64D70D3D41 for ; Wed, 2 Jul 2025 16:49:40 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4618A1D92B for ; Wed, 2 Jul 2025 16:49:10 +0200 (CEST) Received: from bastiontest.odiso.net (unknown [IPv6:2a0a:1580:2000:6700::14]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 2 Jul 2025 16:49:08 +0200 (CEST) Received: from formationkvm1.odiso.net (unknown [10.11.201.57]) by bastiontest.odiso.net (Postfix) with ESMTP id 5E930860F14; Wed, 2 Jul 2025 16:49:01 +0200 (CEST) Received: by formationkvm1.odiso.net (Postfix, from userid 0) id 5089B112B911; Wed, 2 Jul 2025 16:49:01 +0200 (CEST) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server 02/10] add print_drivedevice_controller && print_drivedevice_iothread Date: Wed, 2 Jul 2025 16:48:52 +0200 Message-Id: <20250702144900.3963405-3-alexandre.derumier@groupe-cyllene.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250702144900.3963405-1-alexandre.derumier@groupe-cyllene.com> References: <20250702144900.3963405-1-alexandre.derumier@groupe-cyllene.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.106 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_NONE 0.1 DMARC none policy HEADER_FROM_DIFFERENT_DOMAINS 0.017 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_NONE 0.25 DKIM has Failed or SPF has failed on the message and the domain has no DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [qemuserver.pm,drivedevice.pm] Signed-off-by: Alexandre Derumier --- src/PVE/QemuServer.pm | 60 +++---------------------- src/PVE/QemuServer/DriveDevice.pm | 75 +++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 54 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index eed56b0d..6b26c7d3 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -73,7 +73,7 @@ use PVE::QemuServer::Drive qw( print_drive storage_allows_io_uring_default ); -use PVE::QemuServer::DriveDevice qw(print_drivedevice_full scsihw_infos); +use PVE::QemuServer::DriveDevice qw(print_drivedevice_controller print_drivedevice_full print_drivedevice_iothread scsihw_infos); use PVE::QemuServer::Machine; use PVE::QemuServer::Memory qw(get_current_memory); use PVE::QemuServer::MetaInfo; @@ -3444,8 +3444,7 @@ sub config_to_command { push @$devices, '-watchdog-action', $wdopts->{action} if $wdopts->{action}; } - my $scsicontroller = {}; - my $ahcicontroller = {}; + my $used_controller = {}; my $scsihw = defined($conf->{scsihw}) ? $conf->{scsihw} : $defaults->{scsihw}; # Add iscsi initiator name if available @@ -3467,58 +3466,11 @@ sub config_to_command { $drive->{bootindex} = $bootorder->{$ds} if $bootorder->{$ds}; - if ($drive->{interface} eq 'virtio') { - push @$cmd, '-object', "iothread,id=iothread-$ds" if $drive->{iothread}; - } - - if ($drive->{interface} eq 'scsi') { - - my ($maxdev, $controller, $controller_prefix) = scsihw_infos($conf, $drive); - - die - "scsi$drive->{index}: machine version 4.1~pve2 or higher is required to use more than 14 SCSI disks\n" - if $drive->{index} > 13 && !&$version_guard(4, 1, 2); - - my $pciaddr = print_pci_addr("$controller_prefix$controller", $bridges, $arch); - my $scsihw_type = - $scsihw =~ m/^virtio-scsi-single/ ? "virtio-scsi-pci" : $scsihw; - - my $iothread = ''; - if ( - $conf->{scsihw} - && $conf->{scsihw} eq "virtio-scsi-single" - && $drive->{iothread} - ) { - $iothread .= ",iothread=iothread-$controller_prefix$controller"; - push @$cmd, '-object', "iothread,id=iothread-$controller_prefix$controller"; - } elsif ($drive->{iothread}) { - log_warn( - "iothread is only valid with virtio disk or virtio-scsi-single controller, ignoring\n" - ); - } - - my $queues = ''; - if ( - $conf->{scsihw} - && $conf->{scsihw} eq "virtio-scsi-single" - && $drive->{queues} - ) { - $queues = ",num_queues=$drive->{queues}"; - } + my $iothread = print_drivedevice_iothread($conf, $drive); + push @$cmd, '-object', $iothread if $iothread; - push @$devices, '-device', - "$scsihw_type,id=$controller_prefix$controller$pciaddr$iothread$queues" - if !$scsicontroller->{$controller}; - $scsicontroller->{$controller} = 1; - } - - if ($drive->{interface} eq 'sata') { - my $controller = int($drive->{index} / $PVE::QemuServer::Drive::MAX_SATA_DISKS); - my $pciaddr = print_pci_addr("ahci$controller", $bridges, $arch); - push @$devices, '-device', "ahci,id=ahci$controller,multifunction=on$pciaddr" - if !$ahcicontroller->{$controller}; - $ahcicontroller->{$controller} = 1; - } + my $controller = print_drivedevice_controller($conf, $drive, $scsihw, $arch, $bridges, $used_controller); + push @$devices, '-device', $controller if $controller; my $live_restore = $live_restore_backing->{$ds}; diff --git a/src/PVE/QemuServer/DriveDevice.pm b/src/PVE/QemuServer/DriveDevice.pm index 764afc93..0e1b54a1 100644 --- a/src/PVE/QemuServer/DriveDevice.pm +++ b/src/PVE/QemuServer/DriveDevice.pm @@ -14,6 +14,8 @@ use base qw(Exporter); our @EXPORT_OK = qw( print_drivedevice_full + print_drivedevice_controller + print_drivedevice_iothread scsihw_infos ); @@ -160,4 +162,77 @@ sub print_drivedevice_full { return $device; } +sub print_drivedevice_controller { + my ($conf, $drive, $scsihw, $arch, $bridges, $used_controller) = @_; + + if ($drive->{interface} eq 'scsi') { + + my ($maxdev, $controller, $controller_prefix) = scsihw_infos($conf, $drive); + return if $used_controller->{scsi}->{$controller}; + + my $pciaddr = print_pci_addr("$controller_prefix$controller", $bridges, $arch); + my $scsihw_type = + $scsihw =~ m/^virtio-scsi-single/ ? "virtio-scsi-pci" : $scsihw; + + my $iothread = ''; + if ( + $conf->{scsihw} + && $conf->{scsihw} eq "virtio-scsi-single" + && $drive->{iothread} + ) { + $iothread .= ",iothread=iothread-$controller_prefix$controller"; + } + + my $queues = ''; + if ( + $conf->{scsihw} + && $conf->{scsihw} eq "virtio-scsi-single" + && $drive->{queues} + ) { + $queues = ",num_queues=$drive->{queues}"; + } + + $used_controller->{scsi}->{$controller} = 1; + return "$scsihw_type,id=$controller_prefix$controller$pciaddr$iothread$queues"; + } + + if ($drive->{interface} eq 'sata') { + my $controller = int($drive->{index} / $PVE::QemuServer::Drive::MAX_SATA_DISKS); + return if $used_controller->{ahci}->{$controller}; + + my $pciaddr = print_pci_addr("ahci$controller", $bridges, $arch); + + $used_controller->{ahci}->{$controller} = 1; + return "ahci,id=ahci$controller,multifunction=on$pciaddr"; + + } +} + +sub print_drivedevice_iothread { + my ($conf, $drive) = @_; + + my $drive_id = PVE::QemuServer::Drive::get_drive_id($drive); + + if ($drive->{interface} eq 'virtio') { + return "iothread,id=iothread-$drive_id" if $drive->{iothread}; + } + + if ($drive->{interface} eq 'scsi') { + + my ($maxdev, $controller, $controller_prefix) = scsihw_infos($conf, $drive); + + if ( + $conf->{scsihw} + && $conf->{scsihw} eq "virtio-scsi-single" + && $drive->{iothread} + ) { + return "iothread,id=iothread-$controller_prefix$controller"; + } elsif ($drive->{iothread}) { + log_warn( + "iothread is only valid with virtio disk or virtio-scsi-single controller, ignoring\n" + ); + } + } +} + 1; -- 2.39.5 --===============3797391968904917211== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel --===============3797391968904917211==--