[pve-devel] [PATCH qemu-server 6/7] USB: increase max usb devices to 14 for newer machine version and ostype

Dominik Csapak d.csapak at proxmox.com
Thu Nov 10 15:35:57 CET 2022


for machine versions >= 7.1 and ostype linux or windows > 7, we use the
qemu-xhci controller where we have up to 14 usable ports, so make them
available to the user

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 PVE/QemuServer.pm     |  5 +++--
 PVE/QemuServer/USB.pm | 13 +++++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 452eb10..3a0704a 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -823,7 +823,7 @@ while (my ($k, $v) = each %$confdesc) {
     PVE::JSONSchema::register_standard_option("pve-qm-$k", $v);
 }
 
-my $MAX_USB_DEVICES = 5;
+my $MAX_USB_DEVICES = 14;
 my $MAX_NETS = 32;
 my $MAX_SERIAL_PORTS = 4;
 my $MAX_PARALLEL_PORTS = 3;
@@ -1102,7 +1102,8 @@ EODESCR
 my $usbdesc = {
     optional => 1,
     type => 'string', format => $usb_fmt,
-    description => "Configure an USB device (n is 0 to 4).",
+    description => "Configure an USB device (n is 0 to 4, for machine version >= 7.1 and ostype"
+	." l26 or windows > 7, n can be up to 14).",
 };
 PVE::JSONSchema::register_standard_option("pve-qm-usb", $usbdesc);
 
diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm
index 96931d4..7def04d 100644
--- a/PVE/QemuServer/USB.pm
+++ b/PVE/QemuServer/USB.pm
@@ -14,6 +14,8 @@ get_usb_controllers
 get_usb_devices
 );
 
+my $OLD_MAX_USB = 5;
+
 sub parse_usb_device {
     my ($value) = @_;
 
@@ -35,6 +37,15 @@ sub parse_usb_device {
     return $res;
 }
 
+my sub check_usb_index {
+    my ($index, $use_qemu_xhci) = @_;
+
+    die "using usb$index is only possible with machine type >= 7.1 and ostype l26 or windows > 7\n"
+	if $index >= $OLD_MAX_USB && !$use_qemu_xhci;
+
+    return undef;
+}
+
 sub get_usb_controllers {
     my ($conf, $bridges, $arch, $machine, $format, $max_usb_devices, $machine_version) = @_;
 
@@ -72,6 +83,7 @@ sub get_usb_controllers {
     my $use_usb = 0;
     for (my $i = 0; $i < $max_usb_devices; $i++)  {
 	next if !$conf->{"usb$i"};
+	check_usb_index($i, $use_qemu_xhci);
 	my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) };
 	next if !$d;
 	$use_usb = 1;
@@ -100,6 +112,7 @@ sub get_usb_devices {
     for (my $i = 0; $i < $max_usb_devices; $i++)  {
 	my $devname = "usb$i";
 	next if !$conf->{$devname};
+	check_usb_index($i, $use_qemu_xhci);
 	my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{$devname}) };
 	next if !$d;
 
-- 
2.30.2






More information about the pve-devel mailing list