On 11/12/19 2:23 PM, Dominik Csapak wrote: > but prepend '0000' to ids where no domain is given, to keep the ability > to use the shorthand syntax (e.g. 00:01.0 instead of 0000:00:01.0) > > Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> > --- > src/PVE/SysFSTools.pm | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > > diff --git a/src/PVE/SysFSTools.pm b/src/PVE/SysFSTools.pm > index 2da3a38..a8d9a7f 100644 > --- a/src/PVE/SysFSTools.pm > +++ b/src/PVE/SysFSTools.pm > @@ -73,9 +73,9 @@ sub lspci { > > dir_glob_foreach("$pcisysfs/devices", $pciregex, sub { > my ($fullid, $domain, $bus, $slot, $function) = @_; > - my $id = "$bus:$slot.$function"; > + my $id = "$domain:$bus:$slot.$function"; > > - if (defined($filter) && !ref($filter) && $id !~ m/^\Q$filter\E/) { > + if (defined($filter) && !ref($filter) && $id !~ > m/^(0000:)?\Q$filter\E/) { > return; # filter ids early > } > > @@ -279,13 +279,15 @@ sub pci_dev_group_bind_to_vfio { > } > die "Cannot find vfio-pci module!\n" if !-d $vfio_basedir; > > + $pciid = "0000:$pciid" if $pciid !~ m/^[0-9a-f]{4}:/; > + > # get IOMMU group devices > - opendir(my $D, "$pcisysfs/devices/0000:$pciid/iommu_group/devices/") || > die "Cannot open iommu_group: $!\n"; > - my @devs = grep /^0000:/, readdir($D); > + opendir(my $D, "$pcisysfs/devices/$pciid/iommu_group/devices/") || die > "Cannot open iommu_group: $!\n"; > + my @devs = grep /^[0-9a-f]{4}:/, readdir($D); > closedir($D); > > foreach my $pciid (@devs) { > - $pciid =~ m/^([:\.\da-f]+)$/ or die "PCI ID $pciid not valid!\n"; > + $pciid =~ m/^([:\.0-9a-f]+)$/ or die "PCI ID $pciid not valid!\n"; > > # pci bridges, switches or root ports are not supported > # they have a pci_bus subdirectory so skip them > @@ -301,7 +303,9 @@ sub pci_dev_group_bind_to_vfio { > sub pci_create_mdev_device { > my ($pciid, $uuid, $type) = @_; > > - my $basedir = "$pcisysfs/devices/0000:$pciid"; > + $pciid = "0000:$pciid" if $pciid !~ m/^[0-9a-f]{4}:/; > + > + my $basedir = "$pcisysfs/devices/$pciid"; > my $mdev_dir = "$basedir/mdev_supported_types"; > > die "pci device '$pciid' does not support mediated devices \n" > @@ -336,7 +340,9 @@ sub pci_create_mdev_device { > sub pci_cleanup_mdev_device { > my ($pciid, $uuid) = @_; > > - my $basedir = "$pcisysfs/devices/0000:$pciid/$uuid"; > + $pciid = "0000:$pciid" if $pciid !~ m/^[0-9a-f]{4}:/;
maybe above could be moved in a helper? could either return the "full" ID or a tuple like: my ($full, $domain, $bus, $slot) = ... not to sure though, and can also be OK without this for the few call places.. > + > + my $basedir = "$pcisysfs/devices/$pciid/$uuid"; > > if (! -e $basedir) { > return 1; # no cleanup necessary if it does not exist > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel