Update to 5^20260601git6ee8da2 (sync with Fedora)

- Rebase ppc64le QEMU backend support onto upstream v5: keep boot-order
  generation off on pseries (avoids the SLOF once=d trap), add BOOTFROM=d
  one-shot CD boot opt-in, and skip audio on ppc64le (EL9 QEMU has no
  audio device model). Verified against EL9 qemu-kvm 10.1.
- Drop obsolete multifd patch (implemented upstream, auto-enabled for
  QEMU >= 9.1) and the old combined AArch64/ppc64le patch.
- Carry Fedora backports: script_run serial marker (PR #2952) and
  qemu 11 linuxboot.bin test fix (PR #2953).
This commit is contained in:
Andrew Lukoshko 2026-07-20 19:38:19 +02:00
parent c8c5692035
commit 883d55ca32
8 changed files with 467 additions and 385 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/os-autoinst-6c17e240815aea1d0b417bf0f334c7ad4c0c9e00.tar.gz
SOURCES/os-autoinst-6ee8da2b6ee5c5f5c0a30581cc3a0b42ab5a8224.tar.gz

View File

@ -1 +1 @@
92a36eabd460b0a16141012523c311207f04c246 SOURCES/os-autoinst-6c17e240815aea1d0b417bf0f334c7ad4c0c9e00.tar.gz
b09ddbae8aec245661523028f4d9b22f2a51e270 SOURCES/os-autoinst-6ee8da2b6ee5c5f5c0a30581cc3a0b42ab5a8224.tar.gz

View File

@ -1,124 +0,0 @@
From dffd32bb5418f6eb183bf8518dd1d82d70463c94 Mon Sep 17 00:00:00 2001
From: Elkhan Mammadli <elkhan.mammadli@protonmail.com>
Date: Thu, 2 Nov 2023 16:09:37 +0400
Subject: [PATCH 1/1] Add AArch64 and ppc64le support to QEMU backend
Disable audio device support since it's not available
in the QEMU of Enterprise Linux on AArch64 and ppc64le
AArch64:
- Use XHCI (qemu-xhci) as USB controller.
It's more modern than nec-usb-xhci
which is not available in the QEMU of Enterprise Linux
ppc64le:
- Use VirtIO Keyboard as a keyboard device.
- Use VirtIO Tablet as a tablet device.
- Do not remove floppy drive device since it's not supported.
- Set $arch_supports_boot_order = 0 so the QEMU command line gets no
`-boot once=d` / `-boot order=` by default. This matches upstream
behavior on aarch64 / s390x and avoids the SLOF spapr-NVRAM trap
where `-boot once=d` is *not* a one-shot on QEMU pseries (SLOF
caches the chosen boot device and re-picks the empty CD on the
post-install reboot, dropping the guest at the OF prompt with
E3405). With boot-order generation off, an empty HDD naturally
falls through to the installer CD and a populated HDD wins the
post-install boot.
- For tests that supply both an installer ISO and a populated HDD_1
and need the CD to win the first boot (e.g. install_resize_lvm),
set BOOTFROM=d in the test settings. The patch translates this
into `-boot once=d` and clears $bootfrom so Proc::configure_blockdevs
does NOT assign a persistent bootindex(0) to the CD — that would
loop the installer on every reboot.
Signed-off-by: Elkhan Mammadli <elkhan.mammadli@protonmail.com>
Signed-off-by: Andrew Lukoshko <andrew.lukoshko@gmail.com>
---
backend/qemu.pm | 35 ++++++++++++++++++++++++++++++-----
1 file changed, 30 insertions(+), 5 deletions(-)
diff --git a/backend/qemu.pm b/backend/qemu.pm
index 0a6275f4..904ec7bf 100644
--- a/backend/qemu.pm
+++ b/backend/qemu.pm
@@ -733,6 +733,8 @@ sub start_qemu ($self) {
$arch = 'arm' if ($arch =~ /armv6|armv7/);
my $is_arm = $arch eq 'aarch64' || $arch eq 'arm';
my $is_s390x = $arch eq 's390x';
+ my $is_ppc64le = $arch eq 'ppc64le';
+ my $ppc64le_once_d = 0;
$self->_set_graphics_backend($is_arm);
@@ -749,7 +751,26 @@ sub start_qemu ($self) {
$arch_supports_boot_order = 0;
$use_virtio_kbd = 1;
}
- elsif ($vars->{OFW}) {
+ elsif ($is_ppc64le) {
+ # AlmaLinux ppc64le: keep arch_supports_boot_order=0 by default so
+ # we match upstream / AL9 behavior — empty HDD falls through to the
+ # installer CD, populated HDD boots its own bootloader. Avoids the
+ # SLOF spapr-nvram trap where `-boot once=d` is *not* a one-shot.
+ #
+ # For tests that supply both an ISO and a populated HDD_1 and need
+ # the installer to win the first boot (e.g. install_resize_lvm),
+ # the test sets BOOTFROM=d. We translate that into `-boot once=d`
+ # below and clear $bootfrom so Proc::configure_blockdevs() does NOT
+ # assign a *persistent* bootindex(0) to the CD — that would loop
+ # the installer on every reboot.
+ $arch_supports_boot_order = 0;
+ $use_virtio_kbd = 1;
+ if ($bootfrom eq 'cdrom') {
+ $bootfrom = '';
+ $ppc64le_once_d = 1;
+ }
+ }
+ elsif ($vars->{OFW} && !$is_ppc64le) {
$use_usb_kbd = $self->qemu_params_ofw;
}
@@ -838,7 +859,7 @@ sub start_qemu ($self) {
sp('chardev', 'ringbuf,id=serial0,logfile=serial0,logappend=on');
sp('serial', 'chardev:serial0');
- if (!$is_s390x) {
+ if (!$is_s390x && !$is_arm && !$is_ppc64le) {
if ($self->requires_audiodev) {
my $audiodev = $vars->{QEMU_AUDIODEV} // 'intel-hda';
my $audiobackend = $vars->{QEMU_AUDIOBACKEND} // 'none';
@@ -856,7 +877,7 @@ sub start_qemu ($self) {
}
{
# Remove floppy drive device on architectures
- sp('global', 'isa-fdc.fdtypeA=none') unless ($is_arm || $is_s390x || $vars->{QEMU_NO_FDC_SET});
+ sp('global', 'isa-fdc.fdtypeA=none') unless ($is_arm || $is_s390x || $is_ppc64le || $vars->{QEMU_NO_FDC_SET});
sp('m', $vars->{QEMURAM}) if $vars->{QEMURAM};
sp('machine', $vars->{QEMUMACHINE}) if $vars->{QEMUMACHINE};
@@ -928,6 +949,10 @@ sub start_qemu ($self) {
push @boot_args, 'once=d';
}
}
+ elsif ($ppc64le_once_d) {
+ # ppc64le opt-in (BOOTFROM=d): one-shot CD boot, then default order.
+ push @boot_args, 'once=d';
+ }
sp('boot', join(',', @boot_args)) if @boot_args;
if (!$vars->{UEFI} && $vars->{BIOS}) {
@@ -939,8 +964,8 @@ sub start_qemu ($self) {
}
unless ($vars->{QEMU_NO_TABLET}) {
- sp('device', ($vars->{OFW} || $arch eq 'aarch64') ? 'nec-usb-xhci' : $is_s390x ? 'virtio-tablet' : 'qemu-xhci');
- sp('device', 'usb-tablet') unless $is_s390x;
+ sp('device', ($vars->{OFW} && !$is_ppc64le) ? 'nec-usb-xhci' : ($is_s390x || $is_ppc64le) ? 'virtio-tablet' : 'qemu-xhci');
+ sp('device', 'usb-tablet') unless ($is_s390x || $is_ppc64le);
}
sp('device', 'usb-kbd') if $use_usb_kbd;
--
2.41.0

View File

@ -0,0 +1,100 @@
From ae8e39bbe59777392f4d2a20fc5736cacc2b25b9 Mon Sep 17 00:00:00 2001
From: Andrew Lukoshko <andrew.lukoshko@gmail.com>
Date: Mon, 20 Jul 2026 19:16:54 +0200
Subject: [PATCH] Add ppc64le support to QEMU backend
QEMU pseries/SLOF handling for AlmaLinux Enterprise Linux 9:
- Disable arch_supports_boot_order on ppc64le so boot-order generation
is off by default. An empty HDD then falls through to the installer CD
and a populated HDD boots its own bootloader, matching upstream
aarch64/s390x behavior. This avoids the SLOF trap where '-boot once=d'
is not honored as a one-shot (SLOF caches the chosen device and
re-picks the empty CD on the post-install reboot, dropping the guest at
the OpenFirmware prompt with E3405).
- BOOTFROM=d opt-in: tests that ship both an installer ISO and a
populated HDD_1 and need the CD to win the first boot (e.g.
install_resize_lvm) set BOOTFROM=d. This is translated into a one-shot
'-boot once=d' and $bootfrom is cleared so configure_blockdevs() does
not assign a persistent bootindex(0) to the CD.
- Skip audio on ppc64le: EL9 ppc64le QEMU ships no audio device model
(intel-hda et al. are absent), so the default audiodev/-device intel-hda
aborts QEMU. Handle it like s390x.
USB tablet/keyboard and floppy handling need no change: EL9 ppc64le QEMU
10.1 provides nec-usb-xhci + usb-tablet + usb-kbd, and '-global
isa-fdc.fdtypeA=none' is harmless there.
Signed-off-by: Andrew Lukoshko <andrew.lukoshko@gmail.com>
---
backend/qemu.pm | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/backend/qemu.pm b/backend/qemu.pm
index 95a0901..d1d833b 100644
--- a/backend/qemu.pm
+++ b/backend/qemu.pm
@@ -793,6 +793,7 @@ sub start_qemu ($self) {
# misc
my $arch_supports_boot_order = $vars->{UEFI} ? 0 : 1; # UEFI/OVMF supports ",bootindex=N", but not "-boot order=X"
my $use_usb_kbd;
+ my $ppc64le_once_d = 0; # AlmaLinux: BOOTFROM=d one-shot CD boot on ppc64le
if (is_arm($arch) || is_riscv($arch)) {
$arch_supports_boot_order = 0;
@@ -805,6 +806,26 @@ sub start_qemu ($self) {
$use_usb_kbd = $self->qemu_params_ofw;
}
+ # AlmaLinux ppc64le (QEMU pseries/SLOF): keep boot-order generation off so
+ # an empty HDD falls through to the installer CD and a populated HDD boots
+ # its own bootloader -- matching upstream aarch64/s390x behavior. This
+ # avoids the SLOF trap where `-boot once=d` is NOT a one-shot: SLOF caches
+ # the chosen device and re-picks the empty CD on the post-install reboot,
+ # dropping the guest at the OF prompt with E3405. Keyboard handling is left
+ # to the OFW branch above (usb-kbd, which pseries supports).
+ if (is_ppc($arch)) {
+ $arch_supports_boot_order = 0;
+ # Tests that supply both an installer ISO and a populated HDD_1 and need
+ # the CD to win the *first* boot (e.g. install_resize_lvm) set BOOTFROM=d.
+ # Translate that into `-boot once=d` below and clear $bootfrom so
+ # configure_blockdevs() does NOT assign a *persistent* bootindex(0) to
+ # the CD -- that would loop the installer on every reboot.
+ if ($bootfrom eq 'cdrom') {
+ $bootfrom = '';
+ $ppc64le_once_d = 1;
+ }
+ }
+
my @nicmac;
my @nicvlan;
my @tapdev;
@@ -890,7 +911,10 @@ sub start_qemu ($self) {
sp('chardev', 'ringbuf,id=serial0,logfile=serial0,logappend=on');
sp('serial', 'chardev:serial0');
- if (!is_s390x($arch)) {
+ # AlmaLinux: EL9 ppc64le QEMU ships no audio device model at all (intel-hda
+ # and friends are absent), so emitting the default audiodev/-device intel-hda
+ # aborts QEMU. Skip audio entirely on ppc64le, as we already do on s390x.
+ if (!is_s390x($arch) && !is_ppc($arch)) {
if ($self->requires_audiodev) {
my $audiodev = $vars->{QEMU_AUDIODEV} // 'intel-hda';
my $audiobackend = $vars->{QEMU_AUDIOBACKEND} // 'none';
@@ -984,6 +1008,11 @@ sub start_qemu ($self) {
push @boot_args, 'once=d';
}
}
+ elsif ($ppc64le_once_d) {
+ # AlmaLinux ppc64le opt-in (BOOTFROM=d): one-shot CD boot, then SLOF
+ # falls back to the default device order on subsequent reboots.
+ push @boot_args, 'once=d';
+ }
sp('boot', join ',', @boot_args) if @boot_args;
foreach my $attribute (qw(KERNEL INITRD APPEND)) {
--
2.50.1 (Apple Git-155)

View File

@ -0,0 +1,42 @@
From 18c0610e5c2af1d7b90ea7b02e496290d8f400ff Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Mon, 1 Jun 2026 14:16:29 -0700
Subject: [PATCH] fix(test): use linuxboot_dma.bin in 18-backend-qemu.t
linuxboot.bin is apparently a legacy implementation and has been
removed in qemu 11:
https://lists.endsoftwarepatents.org/archive/html/qemu-devel/2025-12/msg00243.html
linuxboot_dma.bin should be present in all qemu versions we care
about.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
t/18-backend-qemu.t | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/t/18-backend-qemu.t b/t/18-backend-qemu.t
index de45ecfa..6643d2ae 100755
--- a/t/18-backend-qemu.t
+++ b/t/18-backend-qemu.t
@@ -685,7 +685,7 @@ subtest 'special cases when starting QEMU' => sub {
# set certain variables to test special handling for them that is not otherwise tested
$bmwqemu::topdir = "$Bin/.."; # for dmi data
$bmwqemu::vars{ARCH} = 'x86_64';
- $bmwqemu::vars{KERNEL} = 'linuxboot.bin';
+ $bmwqemu::vars{KERNEL} = 'linuxboot_dma.bin';
$bmwqemu::vars{LAPTOP} = '1';
$bmwqemu::vars{BOOT_HDD_IMAGE} = 1;
$bmwqemu::vars{MULTIPATH} = 1;
@@ -713,7 +713,7 @@ subtest 'special cases when starting QEMU' => sub {
my @invoked_cmds;
$backend_mock->redefine(runcmd => sub (@cmd) { push @invoked_cmds, join ' ', @cmd });
combined_like { $backend->start_qemu } qr{.*slirpvde --dhcp -s ./vde.ctl --port 87 started with pid 1.*not starting CPU}s, 'slirpvde started, DELAYED_START logged';
- like $bmwqemu::vars{KERNEL}, qr{/.*/linuxboot\.bin}, 'KERNEL set to absolute location';
+ like $bmwqemu::vars{KERNEL}, qr{/.*/linuxboot_dma\.bin}, 'KERNEL set to absolute location';
is $bmwqemu::vars{LAPTOP}, 'hp_elitebook_820g1', 'default laptop model assigned for LAPTOP=1';
is $bmwqemu::vars{BOOTFROM}, 'c', 'BOOTFROM defaults to "c" for BOOT_HDD_IMAGE=1';
is $bmwqemu::vars{HDDMODEL}, 'scsi-hd', 'HDDMODEL set for MULTIPATH=1';
--
2.54.0

View File

@ -0,0 +1,83 @@
From e6b17af9560e651c728de360f1c851d11b9a665b Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Mon, 1 Jun 2026 12:05:22 -0700
Subject: [PATCH] script_run: "type" command and marker together on serial
console
When doing script_run on a serial console, we "type" the command
and then "type" the marker string in separate calls. Sometimes,
somehow, extraneous characters seem to be added between the two
in the output echoed back over the serial line, breaking the
subsequent check. Typing them in one call should avoid this.
Related ticket: https://progress.opensuse.org/issues/201516
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
distribution.pm | 3 +--
t/03-testapi.t | 21 +++------------------
2 files changed, 4 insertions(+), 20 deletions(-)
diff --git a/distribution.pm b/distribution.pm
index 127721be..f6d493b2 100644
--- a/distribution.pm
+++ b/distribution.pm
@@ -181,8 +181,7 @@ sub script_run ($self, $cmd, @args) {
my $marker = "; echo $str-\$?-" . ($args{output} ? "Comment: $args{output}" : '');
my $final_cmd = $skip_pretty ? "OA_NO_MARKER=1; $cmd" : $cmd;
if (testapi::is_serial_terminal) {
- testapi::type_string "$final_cmd", max_interval => $args{max_interval};
- testapi::type_string $marker, max_interval => $args{max_interval};
+ testapi::type_string "$final_cmd$marker", max_interval => $args{max_interval};
testapi::wait_serial($final_cmd . $marker, no_regex => 1, quiet => $args{quiet}, buffer_size => (length $final_cmd) + 128, internal_marker => 1)
or _handle_cmd_typing_error($final_cmd, \%args);
testapi::type_string "\n", max_interval => $args{max_interval};
diff --git a/t/03-testapi.t b/t/03-testapi.t
index 2a4a92f8..00cb1642 100755
--- a/t/03-testapi.t
+++ b/t/03-testapi.t
@@ -382,12 +382,7 @@ subtest 'script_run' => sub {
is(assert_script_run('true', max_interval => 1), undef, 'nothing happens on success (slow typing)');
is_deeply($cmds, [
{
- text => 'true',
- cmd => 'backend_type_string',
- max_interval => 1
- },
- {
- text => '; echo XXX-$?-',
+ text => 'true; echo XXX-$?-',
cmd => 'backend_type_string',
max_interval => 1
},
@@ -599,12 +594,7 @@ subtest 'upload_logs' => sub {
upload_logs '/var/log/messages';
is_deeply($cmds, [
{
- text => 'curl --form upload=@/var/log/messages --form upname=basetest-messages http://localhost:4243/LookAtMeImAToken/uploadlog/messages',
- cmd => 'backend_type_string',
- max_interval => 250
- },
- {
- text => '; echo XXX-$?-',
+ text => 'curl --form upload=@/var/log/messages --form upname=basetest-messages http://localhost:4243/LookAtMeImAToken/uploadlog/messages; echo XXX-$?-',
cmd => 'backend_type_string',
max_interval => 250
},
@@ -618,12 +608,7 @@ subtest 'upload_logs' => sub {
upload_logs '/var/log/messages', failok => 1;
is_deeply($cmds, [
{
- text => 'curl --form upload=@/var/log/messages --form upname=basetest-messages --max-time 90 http://localhost:4243/LookAtMeImAToken/uploadlog/messages',
- cmd => 'backend_type_string',
- max_interval => 250
- },
- {
- text => '; echo XXX-$?-',
+ text => 'curl --form upload=@/var/log/messages --form upname=basetest-messages --max-time 90 http://localhost:4243/LookAtMeImAToken/uploadlog/messages; echo XXX-$?-',
cmd => 'backend_type_string',
max_interval => 250
},
--
2.54.0

View File

@ -1,186 +0,0 @@
From 10216249e021a87f7a6fac89970ae463c7ae25ad Mon Sep 17 00:00:00 2001
From: Guillaume Gardet <guillaume.gardet@arm.com>
Date: Fri, 27 Sep 2024 09:53:47 +0200
Subject: [PATCH] Enable multifd support
From qemu 9.1.0, the "compress" migration capability has been removed,
but multifd migration is able to do compression and can be used instead.
---
backend/qemu.pm | 93 +++++++++++++++++++++++++++------------
doc/backend_vars.asciidoc | 5 ++-
2 files changed, 68 insertions(+), 30 deletions(-)
diff --git a/backend/qemu.pm b/backend/qemu.pm
index c86688b7a5e..474da41b2b0 100644
--- a/backend/qemu.pm
+++ b/backend/qemu.pm
@@ -240,27 +240,49 @@ sub _migrate_to_file ($self, %args) {
my $fdname = 'dumpfd';
my $compress_level = $args{compress_level} || 0;
my $compress_threads = $args{compress_threads} // 2;
+ my $multifd_channels = $args{multifd_channels} // 2;
my $filename = $args{filename};
my $max_bandwidth = $args{max_bandwidth} // LONG_MAX;
+ # poo#167218: From qemu 9.1, the "compress" migration capability has been removed,
+ # but multifd migration is able to do compression and can be used instead.
+ my $migration_use_multifd = $args{migration_use_multifd} // (version->declare($self->{qemu_version}) ge version->declare(9.1));
- # Internally compressed dumps can't be opened by crash. They need to be
- # fed back into QEMU as an incoming migration.
- $self->set_migrate_capability('compress', 1) if $compress_level > 0;
$self->set_migrate_capability('events', 1);
- $self->handle_qmp_command(
- {
- execute => 'migrate-set-parameters',
- arguments => {
- # This is ignored if the compress capability is not set
- 'compress-level' => $compress_level + 0,
- 'compress-threads' => $compress_threads + 0,
- # Ensure slow dump times are not due to a transfer rate cap
- 'max-bandwidth' => $max_bandwidth + 0,
- }
- },
- fatal => 1
- );
+ # Internally compressed dumps can't be opened by crash. They need to be
+ # fed back into QEMU as an incoming migration.
+ if ($migration_use_multifd) {
+ $self->set_migrate_capability('multifd', 1);
+ $self->set_migrate_capability('mapped-ram', 1);
+ $self->handle_qmp_command(
+ {
+ execute => 'migrate-set-parameters',
+ arguments => {
+ 'multifd-channels' => $multifd_channels + 0,
+ 'direct-io' => Mojo::JSON->true,
+ # Ensure slow dump times are not due to a transfer rate cap
+ 'max-bandwidth' => $max_bandwidth + 0,
+ }
+ },
+ fatal => 1
+ );
+ }
+ else {
+ $self->set_migrate_capability('compress', 1) if $compress_level > 0;
+ $self->handle_qmp_command(
+ {
+ execute => 'migrate-set-parameters',
+ arguments => {
+ # This is ignored if the compress capability is not set
+ 'compress-level' => $compress_level + 0,
+ 'compress-threads' => $compress_threads + 0,
+ # Ensure slow dump times are not due to a transfer rate cap
+ 'max-bandwidth' => $max_bandwidth + 0,
+ }
+ },
+ fatal => 1
+ );
+ }
$self->open_file_and_send_fd_to_qemu($filename, $fdname);
@@ -268,10 +290,11 @@ sub _migrate_to_file ($self, %args) {
# mark. However it is easier for QEMU if the VM is already frozen.
$self->freeze_vm();
# migrate consumes the file descriptor, so we do not need to call closefd
+ my $migration_strategy = $migration_use_multifd ? "file" : "fd";
$self->handle_qmp_command(
{
execute => 'migrate',
- arguments => {uri => "fd:$fdname"}
+ arguments => {uri => "$migration_strategy:$fdname"}
},
fatal => 1
);
@@ -292,6 +315,8 @@ sub save_memory_dump ($self, $args) {
my $compress_method = $vars->{QEMU_DUMP_COMPRESS_METHOD} || 'xz';
my $compress_level = $vars->{QEMU_COMPRESS_LEVEL} || 6;
my $compress_threads = $vars->{QEMU_COMPRESS_THREADS} || $vars->{QEMUCPUS} || 2;
+ my $migration_use_multifd = (version->declare($self->{qemu_version}) ge version->declare(9.1));
+ my $multifd_channels = $vars->{QEMU_MULTIFD_CHANNELS} || 2;
my $filename = $args->{filename} . '-vm-memory-dump';
my $rsp = $self->handle_qmp_command({execute => 'query-status'}, fatal => 1);
@@ -301,6 +326,8 @@ sub save_memory_dump ($self, $args) {
mkpath('ulogs');
$self->_migrate_to_file(compress_level => $compress_method eq 'internal' ? $compress_level : 0,
compress_threads => $compress_threads,
+ multifd_channels => $multifd_channels,
+ migration_use_multifd => $migration_use_multifd,
filename => "ulogs/$filename",
max_bandwidth => $vars->{QEMU_MAX_BANDWIDTH});
@@ -442,6 +469,8 @@ sub save_snapshot ($self, $args) {
filename => path(VM_SNAPSHOTS_DIR, $snapshot->name),
compress_level => $vars->{QEMU_COMPRESS_LEVEL} || 6,
compress_threads => $vars->{QEMU_COMPRESS_THREADS} // $vars->{QEMUCPUS},
+ multifd_channels => $vars->{QEMU_MULTIFD_CHANNELS} || 2,
+ migration_use_multifd => (version->declare($self->{qemu_version}) ge version->declare(9.1)),
max_bandwidth => $vars->{QEMU_MAX_BANDWIDTH});
diag('Snapshot complete');
@@ -454,6 +483,10 @@ sub save_snapshot ($self, $args) {
sub load_snapshot ($self, $args) {
my $vmname = $args->{name};
+ # poo#167218: From qemu 9.1, the "compress" migration capability has been removed,
+ # but multifd migration is able to do compression and can be used instead.
+ my $migration_use_multifd = (version->declare($self->{qemu_version}) ge version->declare(9.1));
+ my $fdname = 'dumpfd';
my $rsp = $self->handle_qmp_command({execute => 'query-status'}, fatal => 1);
bmwqemu::diag("Loading snapshot (Current VM state is $rsp->{return}->{status})");
@@ -478,18 +511,22 @@ sub load_snapshot ($self, $args) {
$self->{select_read}->add($qemu_pipe, 'qemu::load_snapshot::qemu_pipe');
$self->{select_write}->add($qemu_pipe, 'qemu::load_snapshot::qemu_pipe');
- # Ideally we want to send a file descriptor to QEMU, but it doesn't seem
- # to work for incoming migrations, so we are forced to use exec:cat instead.
- #
- # my $fdname = 'incoming';
- # $self->open_file_and_send_fd_to_qemu(VM_SNAPSHOTS_DIR . '/' . $snapshot->name,
- # $fdname);
- $self->set_migrate_capability('compress', 1);
$self->set_migrate_capability('events', 1);
- $rsp = $self->handle_qmp_command({execute => 'migrate-incoming',
- arguments => {uri => 'exec:cat ' . VM_SNAPSHOTS_DIR . '/' . $snapshot->name}},
- #arguments => { uri => "fd:$fdname" }},
- fatal => 1);
+
+ if ($migration_use_multifd) {
+ $self->set_migrate_capability('multifd', 1);
+ $self->set_migrate_capability('mapped-ram', 1) if (version->declare($self->{qemu_version}) ge version->declare(9.0));
+ $self->open_file_and_send_fd_to_qemu(VM_SNAPSHOTS_DIR . '/' . $snapshot->name,
+ $fdname);
+ $rsp = $self->handle_qmp_command({execute => 'migrate-incoming',
+ arguments => {uri => "file:$fdname"}},
+ fatal => 1);
+ } else {
+ $self->set_migrate_capability('compress', 1);
+ $rsp = $self->handle_qmp_command({execute => 'migrate-incoming',
+ arguments => {uri => 'exec:cat ' . VM_SNAPSHOTS_DIR . '/' . $snapshot->name}},
+ fatal => 1);
+ }
$self->load_console_snapshots($vmname);
diff --git a/doc/backend_vars.asciidoc b/doc/backend_vars.asciidoc
index e13b64f65d8..759164f4c5f 100644
--- a/doc/backend_vars.asciidoc
+++ b/doc/backend_vars.asciidoc
@@ -172,11 +172,12 @@ QEMU_SMBIOS;see qemu -smbios ?;undef;pass this value to qemu -smbios
QEMU_SOUNDHW;see qemu -soundhw ?;had;pass this value to qemu -soundhw (for qemu < 4.2)
QEMU_AUDIODEV;see qemu -device ?;intel-hda;Audio device to use with audiodev to qemu -device (for qemu >= 4.2)
QEMU_AUDIOBACKEND;see qemu -audio-help;none;Audio backend to use with audiodev (for qemu >= 4.2)
-QEMU_COMPRESS_LEVEL;integer;6;Sets the compression level used for memory dumps and snapshots. Zero turns compression off and 9 is the maximum level. Generally there is little improvement in compression ratio by increasing the level, but the CPU time can be high on some platforms.
-QEMU_COMPRESS_THREADS;integer;QEMUCPUS;Number of threads used for compressing memory dumps and snapshots.
+QEMU_COMPRESS_LEVEL;integer;6;Sets the compression level used for memory dumps and snapshots. Zero turns compression off and 9 is the maximum level. Generally there is little improvement in compression ratio by increasing the level, but the CPU time can be high on some platforms. (For qemu < 9.1.0)
+QEMU_COMPRESS_THREADS;integer;QEMUCPUS;Number of threads used for compressing memory dumps and snapshots. (For qemu < 9.1.0)
QEMU_NON_FATAL_DBUS_CALL;boolean;0;Ignore failed dbus calls and ignore instead of fatal exits
QEMU_MAX_BANDWIDTH;integer;INT_MAX;Limits the transfer rate during a snapshot.
QEMU_DUMP_COMPRESS_METHOD;string;xz;The compression to use during a memory dump. Can be set to xz, bzip2 or internal (QEMU's internal compression, not compatible with crash or gdb). If xz is set, but not available, it will fallback to bzip2. Also see QEMU_COMPRESSION_LEVEL.
+QEMU_MULTIFD_CHANNELS;integer;2;Number of channels used to migrate data in parallel (only when multifd is used, which means qemu >= 9.1.0). This is the same number that the number of sockets used for migration. Can be set from 1 to 255.
QEMU_APPEND;string;;Append parameters on qemu command line. The first item will have '-' prepended to it.
QEMU_ENABLE_SMBD;boolean;0;Enable QEMU's built-in samba service for user network. Exported worker's pool will be accessible on `\\10.0.2.4\qemu` share. Requires `smbd` to be installed (usually part of the `samba` package).
VIRTIO_CONSOLE;boolean;1;Enable/disable virtio console. (@see `-device virtconsole` qemu option)

View File

@ -1,3 +1,4 @@
# AlmaLinux spec, tracked from the Fedora os-autoinst package.
# Fedora spec initially based on upstream spec file from OBS:
# https://build.opensuse.org/package/view_file/devel:openQA/os-autoinst/os-autoinst.spec
# License: GPLv2+
@ -8,12 +9,6 @@
%global no_fullstack 1
%endif
# This test fails intermittently on these arches, weird bug:
# https://github.com/mudler/Mojo-IOLoop-ReadWriteProcess/issues/20
%ifarch ppc64le s390x
%global no_osutils 1
%endif
# os-autoinst has a bunch of annoyingly-badly-named private modules,
# we do not want automatic provides or requires for these
# ref https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering#Perl
@ -29,34 +24,46 @@
%global github_owner os-autoinst
%global github_name os-autoinst
%global github_version 4.6
%global github_commit 6c17e240815aea1d0b417bf0f334c7ad4c0c9e00
%global github_version 5
%global github_commit 6ee8da2b6ee5c5f5c0a30581cc3a0b42ab5a8224
# if set, will be a post-release snapshot build, otherwise a 'normal' build
%global github_date 20230731
%global github_date 20260601
%global shortcommit %(c=%{github_commit}; echo ${c:0:7})
Name: os-autoinst
Version: %{github_version}%{?github_date:^%{github_date}git%{shortcommit}}
Release: 5%{?dist}
Release: 1%{?dist}
Summary: OS-level test automation
License: GPLv2+
URL: https://os-autoinst.github.io/openQA/
# there are some files under other licenses in the tarball, but we
# do not distribute any of them in the binary packages
License: GPL-2.0-or-later
URL: https://github.com/os-autoinst/os-autoinst
ExcludeArch: %{ix86}
Source0: https://github.com/%{github_owner}/%{github_name}/archive/%{github_commit}/%{github_name}-%{github_commit}.tar.gz
# Backport upstream commit 10216249e021a87f7a6fac89970ae463c7ae25ad
# Enable multifd support (required for qemu >= 9.1 where the "compress"
# migration capability has been removed)
Patch0: os-autoinst-enable-multifd-support.patch
# AlmaLinux-specific: adjust the QEMU backend for the QEMU build shipped
# in Enterprise Linux on AArch64 and ppc64le (USB/keyboard/tablet wiring,
# disable audio, drop unsupported boot order and floppy handling)
Patch1: 0001-Add-AArch64-and-ppc64le-support-to-QEMU-backend.patch
# https://github.com/os-autoinst/os-autoinst/pull/2952
# https://progress.opensuse.org/issues/201516
# Type command and "marker string" together on the serial console in
# script_run to avoid weird bug where we get extra chars between them
Patch: 0001-script_run-type-command-and-marker-together-on-seria.patch
# https://github.com/os-autoinst/os-autoinst/pull/2953
# Adjust tests for removal of linuxboot.bin in qemu 11
Patch: 0001-fix-test-use-linuxboot_dma.bin-in-18-backend-qemu.t.patch
# AlmaLinux: QEMU pseries/SLOF ppc64le support -- keep boot-order generation
# off (avoids the SLOF once=d trap), add BOOTFROM=d one-shot CD boot opt-in,
# and skip audio which EL9 ppc64le QEMU has no device model for.
Patch: 0001-Add-ppc64le-support-to-QEMU-backend.patch
# on SUSE this is conditional, for us it doesn't have to be but we
# still use a macro just to keep build_requires similar for ease of
# cross-comparison
%define opencv_require pkgconfig(opencv)
# Ditto
%define ocr_requires tesseract tesseract-langpack-eng
# Ditto
# diff from SUSE: python3-radon is omitted as we do not have it packaged
# it's just ruff in Fedora, not python3-ruff, ditto ty
# The following line is generated from dependencies.yaml (upstream)
%define python_style_requires ruff ty python3-vulture
# The following line is generated from dependencies.yaml (upstream)
%define build_base_requires %opencv_require gcc-c++ perl(Pod::Html) pkg-config pkgconfig(fftw3) pkgconfig(libpng) pkgconfig(sndfile) pkgconfig(theoraenc)
# diff from SUSE: SUSE has 'ninja', Fedora has 'ninja-build'
@ -69,8 +76,11 @@ Patch1: 0001-Add-AArch64-and-ppc64le-support-to-QEMU-backend.patch
# diff from SUSE: added main_requires_additional, dropped perl-base
# which does not exist in Fedora - we have perl(base) in
# main_requires_additional and the perl(:MODULE_COMPAT) require below
# their versioning of mojolicious is different due to
# https://github.com/openSUSE/cpanspec/issues/47
# they have iproute2, we have iproute
# The following line is generated from dependencies.yaml (upstream)
%define main_requires %main_requires_additional git-core perl(B::Deparse) perl(Carp) perl(Carp::Always) perl(Config) perl(Cpanel::JSON::XS) perl(Crypt::DES) perl(Cwd) perl(Data::Dumper) perl(Digest::MD5) perl(DynaLoader) perl(English) perl(Errno) perl(Exception::Class) perl(Exporter) perl(ExtUtils::testlib) perl(Fcntl) perl(File::Basename) perl(File::Find) perl(File::Path) perl(File::Temp) perl(File::Touch) perl(File::Which) perl(File::chdir) perl(IO::Handle) perl(IO::Scalar) perl(IO::Select) perl(IO::Socket) perl(IO::Socket::INET) perl(IO::Socket::UNIX) perl(IPC::Open3) perl(IPC::Run::Debug) perl(IPC::System::Simple) perl(JSON::Validator) perl(List::MoreUtils) perl(List::Util) perl(Mojo::IOLoop::ReadWriteProcess) >= 0.26 perl(Mojo::JSON) perl(Mojo::Log) perl(Mojo::URL) perl(Mojo::UserAgent) perl(Mojolicious) >= 8.42 perl(Mojolicious::Lite) perl(Net::DBus) perl(Net::IP) perl(Net::SNMP) perl(Net::SSH2) perl(POSIX) perl(Scalar::Util) perl(Socket) perl(Socket::MsgHdr) perl(Term::ANSIColor) perl(Thread::Queue) perl(Time::HiRes) perl(Time::Moment) perl(Time::Seconds) perl(Try::Tiny) perl(XML::LibXML) perl(XML::SemanticDiff) perl(YAML::PP) perl(YAML::XS) perl(autodie) perl(base) perl(constant) perl(integer) perl(strict) perl(version) perl(warnings)
%define main_requires %main_requires_additional git-core iproute iputils jq openssh-clients perl(B::Deparse) perl(Carp) perl(Carp::Always) perl(Config) perl(Cpanel::JSON::XS) perl(Crypt::DES) perl(Cwd) perl(Data::Dumper) perl(Digest::MD5) perl(DynaLoader) perl(English) perl(Errno) perl(Exception::Class) perl(Exporter) perl(ExtUtils::testlib) perl(Fcntl) perl(Feature::Compat::Try) perl(File::Basename) perl(File::Find) perl(File::Map) perl(File::Path) perl(File::Temp) perl(File::Which) perl(File::chdir) perl(IO::Handle) perl(IO::Scalar) perl(IO::Select) perl(IO::Socket) perl(IO::Socket::INET) perl(IO::Socket::UNIX) perl(IPC::Open3) perl(IPC::Run::Debug) perl(IPC::System::Simple) perl(JSON::Validator) perl(List::MoreUtils) perl(List::Util) perl(Mojo::IOLoop::ReadWriteProcess) >= 0.26 perl(Mojo::JSON) perl(Mojo::Log) perl(Mojo::URL) perl(Mojo::UserAgent) perl(Mojolicious) >= 9.34 perl(Mojolicious::Lite) perl(Net::DBus) perl(Net::IP) perl(Net::SNMP) perl(Net::SSH2) perl(POSIX) perl(Scalar::Util) perl(Socket) perl(Socket::MsgHdr) perl(Term::ANSIColor) perl(Thread::Queue) perl(Time::HiRes) perl(Time::Moment) perl(Time::Seconds) perl(XML::LibXML) perl(XML::SemanticDiff) perl(YAML::PP) perl(YAML::XS) perl(autodie) perl(base) perl(constant) perl(integer) perl(strict) perl(version) perl(warnings) rsync sshpass
# diff from SUSE: SUSE has python3-yamllint, Fedora has just yamllint
# The following line is generated from dependencies.yaml (upstream)
%define yamllint_requires yamllint
@ -78,19 +88,30 @@ Patch1: 0001-Add-AArch64-and-ppc64le-support-to-QEMU-backend.patch
# itself or any sub-packages
# diff from SUSE: replaced qemu with qemu-kvm, qemu-tools with
# qemu-img, qemu-x86 with qemu-system-i386, xorg-x11-Xvnc with
# tigervnc-server-minimal (provider of /usr/bin/Xvnc)
# Fedora
# file dep on /usr/bin/Xvnc (as it's in different packages in
# different releases)
# SUSE just has 'ipxe-bootimgs', we have -aarch64 and -x86
# The following line is generated from dependencies.yaml (upstream)
%define test_base_requires %main_requires cpio icewm perl(Benchmark) perl(Devel::Cover) perl(FindBin) perl(Pod::Coverage) perl(Test::Fatal) perl(Test::Mock::Time) perl(Test::MockModule) perl(Test::MockObject) perl(Test::MockRandom) perl(Test::Mojo) perl(Test::Most) perl(Test::Output) perl(Test::Pod) perl(Test::Strict) perl(Test::Warnings) >= 0.029 procps python3-setuptools qemu-kvm /usr/bin/qemu-img tigervnc-server-minimal xterm xterm-console
%define test_base_requires %main_requires cpio icewm perl(Benchmark) perl(Devel::Cover) perl(FindBin) perl(Pod::Coverage) perl(Test::Compile) perl(Test::Mock::Time) perl(Test::MockModule) perl(Test::MockObject) perl(Test::MockRandom) perl(Test::Mojo) perl(Test::Most) perl(Test::Output) perl(Test::Perl::Critic) perl(Test::Pod) perl(Test::Warnings) >= 0.029 procps python3-setuptools qemu-kvm /usr/bin/qemu-img /usr/bin/qemu-system-i386 socat /usr/bin/Xvnc xterm xterm-console
# The following line is generated from dependencies.yaml (upstream)
%define test_version_only_requires perl(Mojo::IOLoop::ReadWriteProcess) >= 0.28
# diff from SUSE: it's python3-pillow-tk, not python3-Pillow-tk
# diff from SUSE: it's python3-pillow-tk, not python3-Pillow-tk, and
# ffmpeg-free, not ffmpeg, and gitlint, not python3-gitlint
# we don't use test_non_s390_requires because on Fedora all the deps
# are available on s390x, ditto python_support_requires
# we don't use lua_support_requires because perl-Inline-Lua isn't
# packaged on Fedora at all
# The following line is generated from dependencies.yaml (upstream)
%define test_requires %build_requires %test_base_requires %yamllint_requires perl(Inline::Python) perl(YAML::PP) python3-pillow-tk
# diff from SUSE: dropped perl(Devel::Cover::Report::Codecov) as it's
# not currently packaged for Fedora
%define test_requires %build_requires %ocr_requires %test_base_requires %yamllint_requires ipxe-bootimgs-x86 ipxe-bootimgs-aarch64 ffmpeg-free perl(Inline::Python) perl(YAML::PP) python3-pillow-tk gitlint python3-pytest python3-pytest-cov python3-pytest-mock python3-pytest-xdist
%ifnarch s390x
# The following line is generated from dependencies.yaml
%define devel_non_s390_requires ShellCheck
%else
%define devel_non_s390_requires %{nil}
%endif
# Diff from SUSE: shfmt is omitted as our package for it was orphaned and retired
# The following line is generated from dependencies.yaml (upstream)
%define devel_requires %test_requires ShellCheck perl(Code::TidyAll) perl(Devel::Cover) perl(Perl::Tidy) perl(Template::Toolkit)
%define devel_requires %devel_non_s390_requires %python_style_requires %test_requires ShellCheck file perl(Code::TidyAll) perl(Devel::Cover) perl(Module::CPANfile) perl(PPI) perl(Perl::Tidy) perl(Template::Toolkit) sed
BuildRequires: perl-devel
BuildRequires: perl-generators
@ -100,16 +121,22 @@ BuildRequires: systemd
BuildRequires: perl(Mojo::File)
%endif # no_fullstack
# tinycv is a compiled public module, so we should have this
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Recommends: tesseract
Recommends: qemu >= 4.0.0
Recommends: qemu-kvm
Recommends: /usr/bin/qemu-img
# For chattr, see SUSE 'qemu_requires'
Recommends: e2fsprogs
# Optional dependency for Python test API support
Recommends: perl(Inline::Python)
# More efficient video encoding is done automatically if ffmpeg is present
# diff from SUSE: this is just 'ffmpeg' there
Recommends: ffmpeg-free >= 4
BuildRequires: %test_requires %test_version_only_requires
# For unbuffered output of Perl testsuite
BuildRequires: expect
# tests use chattr
BuildRequires: e2fsprogs
Requires: %main_requires
Requires(pre): %{_bindir}/getent
Requires(pre): %{_sbindir}/useradd
@ -134,6 +161,7 @@ Development package pulling in all build+test dependencies.
Summary: Open vSwitch support for os-autoinst
Requires: openvswitch
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires(post): dbus-tools
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
@ -149,19 +177,17 @@ This package contains Open vSwitch support for os-autoinst.
rm -f t/99-full-stack.t
%endif # no_fullstack
%if 0%{?no_osutils}
rm -f t/13-osutils.t
%endif # no_osutils
# Tesseract 4.0.0 (in Rawhide as of 2018-11) fails utterly to OCR
# the test needle properly:
# https://github.com/tesseract-ocr/tesseract/issues/2052
rm -f t/02-test_ocr.t
# exclude unnecessary author tests
rm xt/00-tidy.t
rm xt/00-tidy.t tools/tidyall
# Remove test relying on a git working copy
rm xt/30-make.t
%ifarch aarch64 s390x
# https://progress.opensuse.org/issues/194359
# https://progress.opensuse.org/issues/199940
rm -f t/28-signalblocker.t
# https://progress.opensuse.org/issues/200949
rm -f t/26-video_stream.t
%endif
%build
%cmake \
@ -175,7 +201,7 @@ rm xt/30-make.t
%ninja_install -C %{__cmake_builddir} install-openvswitch
# we don't really need to ship this in the package, usually the web UI
# is much better for needle editing
rm %{buildroot}%{_prefix}/lib/os-autoinst/crop.py*
rm %{buildroot}%{_prefix}/lib/os-autoinst/script/crop.py*
# we're going to %%license this
rm %{buildroot}%{_pkgdocdir}/COPYING
ls -lR %buildroot
@ -190,16 +216,20 @@ export CI=1
# account for sporadic slowness in build environments
# https://progress.opensuse.org/issues/89059
export OPENQA_TEST_TIMEOUT_SCALE_CI=20
# We don't want fatal warnings during package building
export PERL_TEST_WARNINGS_ONLY_REPORT_WARNINGS=1
# the default is 4 seconds, ppc64le is often a bit slower
export EXPECTED_ISOTOVIDEO_RUNTIME=8
# Enable verbose test output as we can not store test artifacts within package
# build environments in case of needing to investigate failures
export PROVE_ARGS="--timer -v --nocolor"
# 00-compile-check-all.t fails if this is present and Perl::Critic is
# not installed
rm tools/lib/perlcritic/Perl/Critic/Policy/*.pm
%ninja_build -C %{__cmake_builddir} check-pkg-build
%post openvswitch
%systemd_post os-autoinst-openvswitch.service
if test $1 -eq 1 ; then
%{_bindir}/dbus-send --system --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig 2>&1 || :
fi
%preun openvswitch
%systemd_preun os-autoinst-openvswitch.service
@ -208,11 +238,14 @@ rm tools/lib/perlcritic/Perl/Critic/Policy/*.pm
%systemd_postun_with_restart os-autoinst-openvswitch.service
%files
%doc README.md doc/architecture.md doc/backend_vars.md doc/backends.md doc/memorydumps.md doc/networking.md
%{_pkgdocdir}
%license COPYING
%{perl_vendorarch}/tinycv.pm
%{perl_vendorarch}/auto/tinycv
%dir %{_prefix}/lib/os-autoinst
%{_prefix}/lib/os-autoinst/debugviewer
%{_prefix}/lib/os-autoinst/snd2png
%{_prefix}/lib/os-autoinst/videoencoder
%{_prefix}/lib/os-autoinst/basetest.pm
#
@ -236,49 +269,183 @@ rm tools/lib/perlcritic/Perl/Critic/Policy/*.pm
%{_prefix}/lib/os-autoinst/consoles
%{_prefix}/lib/os-autoinst/autotest.pm
%{_prefix}/lib/os-autoinst/*.py
%{_prefix}/lib/os-autoinst/check_qemu_oom
%{_prefix}/lib/os-autoinst/dewebsockify
%{_prefix}/lib/os-autoinst/vnctest
%dir %{_prefix}/lib/os-autoinst/script
%{_prefix}/lib/os-autoinst/script/check_qemu_oom
%{_prefix}/lib/os-autoinst/script/dewebsockify
%{_prefix}/lib/os-autoinst/script/vnctest
%{_bindir}/os-autoinst-generate-needle-preview
%{_bindir}/os-autoinst-setup-multi-machine
%dir %{_prefix}/lib/os-autoinst/schema
%{_prefix}/lib/os-autoinst/schema/Wheels-01.yaml
%{_bindir}/isotovideo
%{_bindir}/debugviewer
%{_bindir}/snd2png
%files openvswitch
%{_prefix}/lib/os-autoinst/os-autoinst-openvswitch
%dir %{_prefix}/lib/os-autoinst/script
%{_prefix}/lib/os-autoinst/script/os-autoinst-openvswitch
%{_unitdir}/os-autoinst-openvswitch.service
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.opensuse.os_autoinst.switch.conf
%files devel
%changelog
* Wed Apr 29 2026 Andrew Lukoshko <andrew.lukoshko@gmail.com> - 4.6^20230731git6c17e24-5
- Re-disable arch_supports_boot_order for ppc64le and add a BOOTFROM=d
opt-in path that emits `-boot once=d` (and clears Proc.pm's persistent
bootindex(0) on the CD). The previous "drop disable" change was wrong:
on QEMU spapr, SLOF caches the chosen boot device in spapr-NVRAM, so
`-boot once=d` is *not* a one-shot, and the post-install reboot loops
back into the installer. With the new behavior an empty HDD naturally
falls through to the installer CD on first boot, a populated HDD wins
the post-install reboot, and tests that need CD-first when the HDD is
already populated (install_resize_lvm) opt in via BOOTFROM=d.
* Mon Jul 20 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 5^20260601git6ee8da2-1
- Update to os-autoinst 5^20260601git6ee8da2 to match Fedora
- Rebase AlmaLinux ppc64le QEMU backend support onto the new upstream:
keep boot-order generation off on pseries (avoids the SLOF once=d trap),
add the BOOTFROM=d one-shot CD boot opt-in, and skip audio on ppc64le
(EL9 QEMU ships no audio device model there)
- Drop the obsolete multifd patch (multifd migration is implemented
upstream, auto-enabled for QEMU >= 9.1) and the old combined
AArch64/ppc64le patch; USB tablet/keyboard and floppy handling need no
downstream change on EL9 QEMU 10.1
- Carry Fedora backports: script_run serial marker fix (PR #2952) and the
qemu 11 linuxboot.bin test fix (PR #2953)
* Thu Apr 23 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 4.6^20230731git6c17e24-4
- Drop the ppc64le "disable arch_supports_boot_order" bit from the
AArch64/ppc64le QEMU backend patch. QEMU spapr supports -boot
once=d / order=, and leaving it disabled makes install tests that
supply both an ISO and an HDD_1 boot the HDD instead of the
installer CD on ppc64le.
* Thu Jul 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5^20260601git6ee8da2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Tue Apr 21 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 4.6^20230731git6c17e24-3
- Add AArch64 and ppc64le support to QEMU backend (by Elkhan Mammadli)
* Mon Jun 01 2026 Adam Williamson <awilliam@redhat.com> - 5^20260601git6ee8da2-2
- Backport PR #2953 to handle removal of linuxboot.bin in qemu 11
* Tue Apr 21 2026 Andrew Lukoshko <alukoshko@almalinux.org> - 4.6^20230731git6c17e24-2
- Backport upstream commit 10216249 to enable multifd support (required
for qemu >= 9.1 where the "compress" migration capability was removed)
* Mon Jun 01 2026 Adam Williamson <awilliam@redhat.com> - 5^20260601git6ee8da2-1
- Update snapshot again, backport PR #2952 to fix serial console bug
* Fri May 29 2026 Adam Williamson <awilliam@redhat.com> - 5^20260521git11296ca-1
- Update to recent snapshot, re-sync with upstream spec
* Thu May 21 2026 Adam Williamson <awilliam@redhat.com> - 5^20260123git72cabd0-8
- Add a missing 'diff from SUSE' note
* Wed Mar 11 2026 Adam Williamson <awilliam@redhat.com> - 5^20260123git72cabd0-7
- Drop shfmt from -devel dependencies (it was retired)
* Thu Jan 29 2026 Adam Williamson <awilliam@redhat.com> - 5^20260123git72cabd0-3
- Depend on /usr/bin/Xvnc not tigervnc-server-minimal (#2435305)
* Thu Jan 29 2026 Nicolas Chauvet <kwizart@gmail.com> - 5^20260123git72cabd0-2
- Rebuilt for OpenCV 4.13
* Tue Jan 20 2026 Adam Williamson <awilliam@redhat.com> - 5^20260123git72cabd0-1
- Update to latest git, re-sync spec
- Drop merged patches
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5^20250707gitd55ec72-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Wed Dec 10 2025 Nicolas Chauvet <kwizart@gmail.com> - 5^20250707gitd55ec72-7
- Rebuilt for OpenCV-4.12
* Mon Nov 24 2025 Adam Williamson <awilliam@redhat.com> - 5^20250707gitd55ec72-6
- Backport PR #2776 to fix aarch64 encryption entry bug (#2392684)
* Fri Nov 14 2025 Adam Williamson <awilliam@redhat.com> - 5^20250707gitd55ec72-5
- Backport PR #2772 to add disconnect_usb function
* Wed Oct 15 2025 Dominik Mierzejewski <dominik@greysector.net> - 5^20250707gitd55ec72-4
- Rebuilt for FFmpeg 8
* Tue Sep 16 2025 Adam Williamson <awilliam@redhat.com> - 5^20250707gitd55ec72-3
- Backport PR #2750 to allow slow typing with (assert_)script_run
- Backport PR #2751 to fix tests with IPC::Run 20250809.0
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5^20250707gitd55ec72-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Fri Jul 11 2025 Adam Williamson <awilliam@redhat.com> - 5^20250707gitd55ec72-1
- Update to latest git
- Backport #2727 to fix multi-machine script on Fedora
- Backport #2728 to fix tests without Inline::Lua
* Mon Jul 07 2025 Jitka Plesnikova <jplesnik@redhat.com> - 5^20250522gita855b3a-2
- Perl 5.42 rebuild
* Thu May 22 2025 Adam Williamson <awilliam@redhat.com> - 5^20250522gita855b3a-1
- Update to latest git
- Drop a now-unneeded test workaround
* Fri May 02 2025 Adam Williamson <awilliam@redhat.com> - 5^20250424git49afb50-1
- Update to latest git
- Drop merged patch
- Re-enable s390x tests (should be fixed now)
* Wed Feb 12 2025 Adam Williamson <awilliam@redhat.com> - 4.6^20241125gitb64e219-3
- Rebuild for opencv-4.11.0 (Sérgio Basto)
- Disable tests on s390x to get build through (see #2345306)
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20241125gitb64e219-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Mon Nov 25 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20241125gitb64e219-1
- Update to latest git
- Backport PR #2550 to fix for qemu 9.1.0
* Mon Jul 29 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20240729gitabb9288-3
- Update to latest git
* Thu Jul 25 2024 Sérgio Basto <sergio@serjux.com> - 4.6^20240705git12ff220-3
- Rebuild for opencv 4.10.0
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20240705git12ff220-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jul 12 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20240705git12ff220-1
- Update to latest git, drop merged patch, update license to SPDX
* Tue Jun 11 2024 Jitka Plesnikova <jplesnik@redhat.com> - 4.6^20240609gitae652c1-2
- Perl 5.40 rebuild
* Mon Jun 10 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20240609gitae652c1-1
- update to latest git, drop merged patch, update ustreamer patch
* Thu Jun 06 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20240604git6646558-1
- Update to latest git, resync spec
* Mon Feb 05 2024 Sérgio Basto <sergio@serjux.com> - 4.6^20231222gitd525e04-6
- Rebuild for opencv 4.9.0
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20231222gitd525e04-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20231222gitd525e04-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Jan 09 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20231222gitd525e04-3
- Backport PR #2429 to fix issue running long commands at serial console
* Wed Jan 03 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20231222gitd525e04-2
- Recommend ffmpeg-free, not ffmpeg
* Tue Jan 02 2024 Adam Williamson <awilliam@redhat.com> - 4.6^20231222gitd525e04-1
- Update to latest git
* Mon Nov 27 2023 Adam Williamson <awilliam@redhat.com> - 4.6^20231124gita2deffd-1
- Update to latest git
* Wed Oct 25 2023 Adam Williamson <awilliam@redhat.com> - 4.6^20231025git64b339c-1
- Update to latest git, resync spec
* Mon Aug 07 2023 Sérgio Basto <sergio@serjux.com> - 4.6^20230527git1946eb1-4
- Rebuild for opencv 4.8.0
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20230527git1946eb1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 11 2023 Jitka Plesnikova <jplesnik@redhat.com> - 4.6^20230527git1946eb1-2
- Perl 5.38 rebuild
* Fri May 26 2023 Adam Williamson <awilliam@redhat.com> - 4.6^20230527git1946eb1-1
- Update to latest git, drop merged patch, sync spec
* Wed Apr 19 2023 Adam Williamson <awilliam@redhat.com> - 4.6^20230418git6802f44-1
- Update to latest git, re-enable OCR tests
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.6^20221122git5a76fb8-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Mon Jan 16 2023 Sérgio Basto <sergio@serjux.com> - 4.6^20221122git5a76fb8-2
- Rebuild for opencv 4.7.0
* Wed Nov 23 2022 Adam Williamson <awilliam@redhat.com> - 4.6^20221122git5a76fb8-1
- Update to latest git, drop merged patch