diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 7d9cf220..c706653b 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -5594,12 +5594,19 @@ sub vm_start_nolock { PVE::QemuServer::PCI::reserve_pci_usage($pci_id_list, $vmid, $start_timeout); eval { + my $uuid; for my $id (sort keys %$pci_devices) { my $d = $pci_devices->{$id}; for my $dev ($d->{pciid}->@*) { - PVE::QemuServer::PCI::prepare_pci_device($vmid, $dev->{id}, $id, $d->{mdev}); + my $info = PVE::QemuServer::PCI::prepare_pci_device($vmid, $dev->{id}, $id, $d->{mdev}); + + # nvidia grid needs the uuid of the mdev as qemu parameter + if ($d->{mdev} && !defined($uuid) && $info->{vendor} eq '10de') { + $uuid = PVE::QemuServer::PCI::generate_mdev_uuid($vmid, $id); + } } } + push @$cmd, '-uuid', $uuid if defined($uuid); }; if (my $err = $@) { eval { PVE::QemuServer::PCI::remove_pci_reservation($pci_id_list) }; diff --git a/PVE/QemuServer/PCI.pm b/PVE/QemuServer/PCI.pm index 23fe508e..3d0e70ea 100644 --- a/PVE/QemuServer/PCI.pm +++ b/PVE/QemuServer/PCI.pm @@ -253,7 +253,7 @@ sub get_pci_addr_map { return $pci_addr_map; } -my sub generate_mdev_uuid { +sub generate_mdev_uuid { my ($vmid, $index) = @_; return sprintf("%08d-0000-0000-0000-%012d", $index, $vmid); } @@ -514,6 +514,8 @@ sub prepare_pci_device { die "can't reset PCI device '$pciid'\n" if $info->{has_fl_reset} && !PVE::SysFSTools::pci_dev_reset($info); } + + return $info; } my $RUNDIR = '/run/qemu-server';