mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-11 15:19:12 +00:00
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:
parent
96a3f51f8d
commit
acd4b77745
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user