No functional change is intended.

Signed-off-by: Fiona Ebner <[email protected]>
---

Popped out while trying the other approach mentioned in:
https://lists.proxmox.com/pipermail/pve-devel/2022-December/055091.html

Better viewed with
--color-moved=zebra --color-moved-ws=ignore-all-space
or similar.

 PVE/QemuServer.pm | 114 +++++++++++++++++++++++++++-------------------
 1 file changed, 66 insertions(+), 48 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index a52a883e..619908de 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -3514,6 +3514,68 @@ my sub should_disable_smm {
        $vga->{type} && $vga->{type} =~ m/^(serial\d+|none)$/;
 }
 
+my sub print_ovmf_drive_commandlines {
+    my ($conf, $storecfg, $vmid, $arch, $q35, $version_guard) = @_;
+
+    my $d;
+    if (my $efidisk = $conf->{efidisk0}) {
+       $d = parse_drive('efidisk0', $efidisk);
+    }
+
+    my ($ovmf_code, $ovmf_vars) = get_ovmf_files($arch, $d, $q35);
+    die "uefi base image '$ovmf_code' not found\n" if ! -f $ovmf_code;
+
+    my ($path, $format);
+    my $read_only_str = '';
+    if ($d) {
+       my ($storeid, $volname) = PVE::Storage::parse_volume_id($d->{file}, 1);
+       $format = $d->{format};
+       if ($storeid) {
+           $path = PVE::Storage::path($storecfg, $d->{file});
+           if (!defined($format)) {
+               my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
+               $format = qemu_img_format($scfg, $volname);
+           }
+       } else {
+           $path = $d->{file};
+           die "efidisk format must be specified\n"
+               if !defined($format);
+       }
+
+       $read_only_str = ',readonly=on' if drive_is_read_only($conf, $d);
+    } else {
+       log_warn("no efidisk configured! Using temporary efivars disk.");
+       $path = "/tmp/$vmid-ovmf.fd";
+       PVE::Tools::file_copy($ovmf_vars, $path, -s $ovmf_vars);
+       $format = 'raw';
+    }
+
+    my $size_str = "";
+
+    if ($format eq 'raw' && $version_guard->(4, 1, 2)) {
+       $size_str = ",size=" . (-s $ovmf_vars);
+    }
+
+    # SPI flash does lots of read-modify-write OPs, without writeback this 
gets really slow #3329
+    my $cache = "";
+    if ($path =~ m/^rbd:/) {
+       $cache = ',cache=writeback';
+       $path .= ':rbd_cache_policy=writeback'; # avoid write-around, we *need* 
to cache writes too
+    }
+
+    my $code_drive_str = 
"if=pflash,unit=0,format=raw,readonly=on,file=$ovmf_code";
+    my $var_drive_str = "if=pflash"
+       . ",unit=1"
+       . "$cache"
+       . ",format=$format"
+       . ",id=drive-efidisk0"
+       . "$size_str"
+       . ",file=$path"
+       . "$read_only_str";
+
+    return ($code_drive_str, $var_drive_str);
+}
+
 sub config_to_command {
     my ($storecfg, $vmid, $conf, $defaults, $forcemachine, $forcecpu,
         $pbs_backing) = @_;
@@ -3633,54 +3695,10 @@ sub config_to_command {
     }
 
     if ($conf->{bios} && $conf->{bios} eq 'ovmf') {
-       my $d;
-       if (my $efidisk = $conf->{efidisk0}) {
-           $d = parse_drive('efidisk0', $efidisk);
-       }
-
-       my ($ovmf_code, $ovmf_vars) = get_ovmf_files($arch, $d, $q35);
-       die "uefi base image '$ovmf_code' not found\n" if ! -f $ovmf_code;
-
-       my ($path, $format);
-       my $read_only_str = '';
-       if ($d) {
-           my ($storeid, $volname) = PVE::Storage::parse_volume_id($d->{file}, 
1);
-           $format = $d->{format};
-           if ($storeid) {
-               $path = PVE::Storage::path($storecfg, $d->{file});
-               if (!defined($format)) {
-                   my $scfg = PVE::Storage::storage_config($storecfg, 
$storeid);
-                   $format = qemu_img_format($scfg, $volname);
-               }
-           } else {
-               $path = $d->{file};
-               die "efidisk format must be specified\n"
-                   if !defined($format);
-           }
-
-           $read_only_str = ',readonly=on' if drive_is_read_only($conf, $d);
-       } else {
-           log_warn("no efidisk configured! Using temporary efivars disk.");
-           $path = "/tmp/$vmid-ovmf.fd";
-           PVE::Tools::file_copy($ovmf_vars, $path, -s $ovmf_vars);
-           $format = 'raw';
-       }
-
-       my $size_str = "";
-
-       if ($format eq 'raw' && $version_guard->(4, 1, 2)) {
-           $size_str = ",size=" . (-s $ovmf_vars);
-       }
-
-       # SPI flash does lots of read-modify-write OPs, without writeback this 
gets really slow #3329
-       my $cache = "";
-       if ($path =~ m/^rbd:/) {
-               $cache = ',cache=writeback';
-               $path .= ':rbd_cache_policy=writeback'; # avoid write-around, 
we *need* to cache writes too
-       }
-
-       push @$cmd, '-drive', 
"if=pflash,unit=0,format=raw,readonly=on,file=$ovmf_code";
-       push @$cmd, '-drive', 
"if=pflash,unit=1$cache,format=$format,id=drive-efidisk0$size_str,file=${path}${read_only_str}";
+       my ($code_drive_str, $var_drive_str) =
+           print_ovmf_drive_commandlines($conf, $storecfg, $vmid, $arch, $q35, 
$version_guard);
+       push $cmd->@*, '-drive', $code_drive_str;
+       push $cmd->@*, '-drive', $var_drive_str;
     }
 
     if ($q35) { # tell QEMU to load q35 config early
-- 
2.30.2



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to