pci: refactor pci device preparation

makes the vm start a bit less crowded

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2021-10-07 15:45:29 +02:00 committed by Thomas Lamprecht
parent 96a3f51f8d
commit acd4b77745
2 changed files with 21 additions and 13 deletions

View File

@ -5389,19 +5389,7 @@ sub vm_start_nolock {
foreach my $pcidevice (@$pcidevices) { foreach my $pcidevice (@$pcidevices) {
my $pciid = $pcidevice->{id}; my $pciid = $pcidevice->{id};
my $info = PVE::SysFSTools::pci_device_info("$pciid"); PVE::QemuServer::PCI::prepare_pci_device($vmid, $pciid, $i, $d->{mdev});
die "IOMMU not present\n" if !PVE::SysFSTools::check_iommu_support();
die "no pci device info for device '$pciid'\n" if !$info;
if ($d->{mdev}) {
my $uuid = PVE::SysFSTools::generate_mdev_uuid($vmid, $i);
PVE::SysFSTools::pci_create_mdev_device($pciid, $uuid, $d->{mdev});
} else {
die "can't unbind/bind PCI group to VFIO '$pciid'\n"
if !PVE::SysFSTools::pci_dev_group_bind_to_vfio($pciid);
die "can't reset PCI device '$pciid'\n"
if $info->{has_fl_reset} && !PVE::SysFSTools::pci_dev_reset($info);
}
} }
} }

View File

@ -461,4 +461,24 @@ sub print_hostpci_devices {
return ($kvm_off, $gpu_passthrough, $legacy_igd); return ($kvm_off, $gpu_passthrough, $legacy_igd);
} }
sub prepare_pci_device {
my ($vmid, $pciid, $confslot, $mdev) = @_;
my $info = PVE::SysFSTools::pci_device_info("$pciid");
die "IOMMU not present\n" if !PVE::SysFSTools::check_iommu_support();
die "no pci device info for device '$pciid'\n" if !$info;
if ($mdev) {
my $uuid = PVE::SysFSTools::generate_mdev_uuid($vmid, $confslot);
PVE::SysFSTools::pci_create_mdev_device($pciid, $uuid, $mdev);
} else {
die "can't unbind/bind PCI group to VFIO '$pciid'\n"
if !PVE::SysFSTools::pci_dev_group_bind_to_vfio($pciid);
die "can't reset PCI device '$pciid'\n"
if $info->{has_fl_reset} && !PVE::SysFSTools::pci_dev_reset($info);
}
return;
}
1; 1;