diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index d5bdf7c4..1260cc03 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3829,7 +3829,10 @@ sub config_to_command { } # usb devices - my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES); + my $usb_dev_features = {}; + $usb_dev_features->{spice_usb3} = 1 if qemu_machine_feature_enabled($machine_type, $kvmver, 4, 1); + + my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES, $usb_dev_features); push @$devices, @usbdevices if @usbdevices; # serial devices for (my $i = 0; $i < $MAX_SERIAL_PORTS; $i++) { diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm index 2c09490e..d3281485 100644 --- a/PVE/QemuServer/USB.pm +++ b/PVE/QemuServer/USB.pm @@ -74,7 +74,7 @@ sub get_usb_controllers { } sub get_usb_devices { - my ($conf, $format, $max_usb_devices) = @_; + my ($conf, $format, $max_usb_devices, $features) = @_; my $devices = []; @@ -87,9 +87,12 @@ sub get_usb_devices { my $hostdevice = parse_usb_device($d->{host}); $hostdevice->{usb3} = $d->{usb3}; if ($hostdevice->{spice}) { - # usb redir support for spice, currently no usb3 + # usb redir support for spice + my $bus = 'ehci'; + $bus = 'xhci' if $hostdevice->{usb3} && $features->{spice_usb3}; + push @$devices, '-chardev', "spicevmc,id=usbredirchardev$i,name=usbredir"; - push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=ehci.0"; + push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=$bus.0"; } else { push @$devices, '-device', print_usbdevice_full($conf, "usb$i", $hostdevice); }