[pve-devel] [PATCH guest-common v2 2/5] mapping: pci: rework properties check
Dominik Csapak
d.csapak at proxmox.com
Wed Apr 10 13:03:41 CEST 2024
refactors the actual checking out to its own sub, so we can reuse it
later
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
src/PVE/Mapping/PCI.pm | 43 +++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/src/PVE/Mapping/PCI.pm b/src/PVE/Mapping/PCI.pm
index 725e106..fcf07c0 100644
--- a/src/PVE/Mapping/PCI.pm
+++ b/src/PVE/Mapping/PCI.pm
@@ -129,6 +129,26 @@ sub options {
};
}
+my sub check_properties {
+ my ($correct, $configured, $path, $name) = @_;
+ for my $prop (sort keys %$correct) {
+ next if !defined($correct->{$prop}) && !defined($configured->{$prop});
+
+ die "no '$prop' for device '$path'\n"
+ if defined($correct->{$prop}) && !defined($configured->{$prop});
+ die "'$prop' configured but should not be\n"
+ if !defined($correct->{$prop}) && defined($configured->{$prop});
+
+ my $correct_prop = $correct->{$prop};
+ $correct_prop =~ s/0x//g;
+ my $configured_prop = $configured->{$prop};
+ $configured_prop =~ s/0x//g;
+
+ die "'$prop' does not match for '$name' ($correct_prop != $configured_prop)\n"
+ if $correct_prop ne $configured_prop;
+ }
+}
+
# checks if the given config is valid for the current node
sub assert_valid {
my ($name, $cfg) = @_;
@@ -150,30 +170,19 @@ sub assert_valid {
my $correct_props = {
id => "$info->{vendor}:$info->{device}",
- iommugroup => $info->{iommugroup},
};
+ # check iommu only on the first device
+ if ($idx == 0) {
+ $correct_props->{iommugroup} = $info->{iommugroup};
+ }
+
if (defined($info->{'subsystem_vendor'}) && defined($info->{'subsystem_device'})) {
$correct_props->{'subsystem-id'} = "$info->{'subsystem_vendor'}:$info->{'subsystem_device'}";
}
- for my $prop (sort keys %$correct_props) {
- next if $prop eq 'iommugroup' && $idx > 0; # check iommu only on the first device
-
- next if !defined($correct_props->{$prop}) && !defined($cfg->{$prop});
- die "no '$prop' for device '$path'\n"
- if defined($correct_props->{$prop}) && !defined($cfg->{$prop});
- die "'$prop' configured but should not be\n"
- if !defined($correct_props->{$prop}) && defined($cfg->{$prop});
+ check_properties($correct_props, $cfg, $path, $name);
- my $correct_prop = $correct_props->{$prop};
- $correct_prop =~ s/0x//g;
- my $configured_prop = $cfg->{$prop};
- $configured_prop =~ s/0x//g;
-
- die "'$prop' does not match for '$name' ($correct_prop != $configured_prop)\n"
- if $correct_prop ne $configured_prop;
- }
$idx++;
}
--
2.39.2
More information about the pve-devel
mailing list