diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index f1025cfa..45daa06c 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -3382,7 +3382,7 @@ sub config_to_command { } # For now, handles only specific parts, but the final goal is to cover everything. - my $cfg2cmd = PVE::QemuServer::Cfg2Cmd->new($conf, $defaults); + my $cfg2cmd = PVE::QemuServer::Cfg2Cmd->new($conf, $defaults, $version_guard); my $generated = $cfg2cmd->generate(); push $cmd->@*, '-global', $_ for ($generated->global_flags() // [])->@*; push $machineFlags->@*, ($generated->machine_flags() // [])->@*; diff --git a/src/PVE/QemuServer/Cfg2Cmd.pm b/src/PVE/QemuServer/Cfg2Cmd.pm index 6b26ab23..c7ee0165 100644 --- a/src/PVE/QemuServer/Cfg2Cmd.pm +++ b/src/PVE/QemuServer/Cfg2Cmd.pm @@ -7,15 +7,16 @@ use PVE::QemuServer::Cfg2Cmd::Timer; use PVE::QemuServer::Helpers; sub new { - my ($class, $conf, $defaults) = @_; + my ($class, $conf, $defaults, $version_guard) = @_; my $self = bless { conf => $conf, defaults => $defaults, + 'version-guard' => $version_guard, }, $class; - my $ostype = $self->get_prop('ostype'); - $self->{'windows-version'} = PVE::QemuServer::Helpers::windows_version($ostype); + $self->{ostype} = $self->get_prop('ostype'); + $self->{'windows-version'} = PVE::QemuServer::Helpers::windows_version($self->{ostype}); return $self; } @@ -74,12 +75,35 @@ sub rtc_flags { return $self->{'rtc-flags'}; } +=head3 is_linux + + if ($self->is_linux()) { + do_something_for_linux_vms(); + } + +Check if the virtual machine is configured for running Linux. Does not include the C os type +by default. Specify C<$include_l24> if that is desired. + +=cut + +sub is_linux { + my ($self, $include_l24) = @_; + + return $self->{ostype} eq 'l26' || ($include_l24 && $self->{ostype} eq 'l24'); +} + sub windows_version { my ($self) = @_; return $self->{'windows-version'}; } +sub version_guard { + my ($self, $major, $minor, $pve) = @_; + + $self->{'version-guard'}->($major, $minor, $pve); +} + sub generate { my ($self) = @_; diff --git a/src/PVE/QemuServer/Cfg2Cmd/Timer.pm b/src/PVE/QemuServer/Cfg2Cmd/Timer.pm index d4b16af0..452c15b2 100644 --- a/src/PVE/QemuServer/Cfg2Cmd/Timer.pm +++ b/src/PVE/QemuServer/Cfg2Cmd/Timer.pm @@ -21,6 +21,8 @@ sub generate { if ($cfg2cmd->windows_version() >= 6) { $cfg2cmd->add_global_flag('kvm-pit.lost_tick_policy=discard'); $cfg2cmd->add_machine_flag('hpet=off'); + } elsif ($cfg2cmd->is_linux() && $cfg2cmd->version_guard(10, 1, 0)) { + $cfg2cmd->add_machine_flag('hpet=off'); } $cfg2cmd->add_rtc_flag('driftfix=slew') if $time_drift_fix;