Compare commits

...

No commits in common. "imports/c8-stream-rhel/SLOF-20210217-1.module+el8.7.0+16689+53d59bc2" and "c8-beta-stream-rhel" have entirely different histories.

3 changed files with 156 additions and 1 deletions

View File

@ -0,0 +1,87 @@
From 27f045e2d52ee49ddbb375b5593d4fc387aad4b0 Mon Sep 17 00:00:00 2001
From: Jordan Niethe <jniethe5@gmail.com>
Date: Tue, 29 Aug 2023 10:12:01 +1000
Subject: [PATCH 2/2] virtio-serial: Do not close stdout on quiesce
RH-Author: Thomas Huth <thuth@redhat.com>
RH-MergeRequest: 1: Fix SLOF crash when only using virtio console (without spapr-vty)
RH-Jira: RHEL-3709
RH-Acked-by: David Gibson (Red Hat) <dgibson@redhat.com>
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
RH-Commit: [2/2] cbde239703a11aa2676a12b8415281d37cba54a5
Commit 76fee95 ("slof: Only close stdout for virtio-serial devices")
says that commit cf28264 ("virtio-serial: Rework shutdown sequence")
fixed a hang. The problem was believed to be that it was necessary to
close stdout to shutdown the underlying virtio device.
Commit cf28264 ("virtio-serial: Rework shutdown sequence") closed stdout
on quiesce. This meant when prom_init() called write on stdout after
quiesce, there is a use after free so this is unreliable, and can also
hang (especially after reboots).
Quiescing is intended to put hardware into a safe state for the client
to take over. It is incorrect for SLOF to close ihandles that the client
could still be using, even after a quiesce.
Rather than closing the stdout device, all that needs to happen is to
ensure virtio-serial-shutdown gets called. On quiesce, close the virtio
device, but leave the stdout device itself open.
Commit 8174acd ("virtio-serial: Close device completely") handles reads
and writes as no-ops if the underlying virtio device is closed so there
is no problem with the client calling "write" on stdout after this, but
no output will be displayed.
Fixes: cf28264 ("virtio-serial: Rework shutdown sequence")
Debugged-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Co-developed-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit dd4d4ea0add97df078d571b48192adaf7c4b0d87)
Jira: https://issues.redhat.com/browse/RHEL-3709
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
board-qemu/slof/virtio-serial.fs | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/board-qemu/slof/virtio-serial.fs b/board-qemu/slof/virtio-serial.fs
index 41e2e04..de42cc7 100644
--- a/board-qemu/slof/virtio-serial.fs
+++ b/board-qemu/slof/virtio-serial.fs
@@ -33,16 +33,14 @@ virtio-setup-vd VALUE virtiodev
: virtio-serial-term-key? virtiodev virtio-serial-haschar ;
: virtio-serial-term-key BEGIN virtio-serial-term-key? UNTIL virtiodev virtio-serial-getchar ;
-: virtio-serial-close-stdout s" stdout" get-chosen IF decode-int nip nip close-dev THEN ;
-
\ Basic device initialization - which has only to be done once
: init ( -- )
virtiodev virtio-serial-init drop
TRUE to initialized?
- \ Linux closes stdin at some point in prom_init(). This internally triggers a
- \ quiesce in SLOF. We must ensure stdout gets closed as well otherwise the
- \ device cannot be reset properly and the boot will hang.
- ['] virtio-serial-close-stdout add-quiesce-xt
+ \ virtiodev must be shutdown at quiesce so the device is reset properly.
+ \ The read and write methods can be called after quiesce so must handle
+ \ virtiodev being closed.
+ ['] shutdown add-quiesce-xt
;
0 VALUE open-count
@@ -62,8 +60,8 @@ virtiodev virtio-serial-init drop
open-count 0> IF
open-count 1 - dup to open-count
0= IF shutdown THEN
+ close
THEN
- close
;
: write ( addr len -- actual )
--
2.41.0

View File

@ -0,0 +1,58 @@
From 67cbc16b3e6d34cf3932f88fd32323878026d6a0 Mon Sep 17 00:00:00 2001
From: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Date: Tue, 29 Aug 2023 10:12:00 +1000
Subject: [PATCH 1/2] virtio-serial: Make read and write methods report failure
RH-Author: Thomas Huth <thuth@redhat.com>
RH-MergeRequest: 1: Fix SLOF crash when only using virtio console (without spapr-vty)
RH-Jira: RHEL-3709
RH-Acked-by: David Gibson (Red Hat) <dgibson@redhat.com>
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
RH-Commit: [1/2] 7aee41dceade77a47edd794cab43672ff95896d0
The read and write methods return successfully even if the virtio device
is closed (virtiodev is 0) and it is not able to send or receive any
characters.
Make the read and write methods return 0 to indicate they did not
succeed in this case.
This also fixes an invalid stack access in the read method.
Fixes: 8174acd ("virtio-serial: Close device completely")
Signed-off-by: Kautuk Consul <kconsul@linux.vnet.ibm.com>
Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit 63b66a5147069bda815989732442cb07790609db)
Jira: https://issues.redhat.com/browse/RHEL-3709
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
board-qemu/slof/virtio-serial.fs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/board-qemu/slof/virtio-serial.fs b/board-qemu/slof/virtio-serial.fs
index 82868e2..41e2e04 100644
--- a/board-qemu/slof/virtio-serial.fs
+++ b/board-qemu/slof/virtio-serial.fs
@@ -67,7 +67,7 @@ virtiodev virtio-serial-init drop
;
: write ( addr len -- actual )
- virtiodev 0= IF nip EXIT THEN
+ virtiodev 0= IF 2drop 0 EXIT THEN
tuck
0 ?DO
dup c@ virtiodev SWAP virtio-serial-putchar
@@ -78,7 +78,7 @@ virtiodev virtio-serial-init drop
: read ( addr len -- actual )
0= IF drop 0 EXIT THEN
- virtiodev 0= IF nip EXIT THEN
+ virtiodev 0= IF drop 0 EXIT THEN
virtiodev virtio-serial-haschar 0= IF 0 swap c! -2 EXIT THEN
virtiodev virtio-serial-getchar swap c! 1
;
--
2.41.0

View File

@ -4,7 +4,7 @@
Name: SLOF
Version: %{GITDATE}
Release: 1%{?dist}
Release: 2%{?dist}
Summary: Slimline Open Firmware
Group: Applications/Emulators
License: BSD
@ -12,6 +12,10 @@ URL: http://www.openfirmware.info/SLOF
Source0: https://github.com/aik/SLOF/archive/qemu-slof-20210217.tar.gz
# For RHEL-3709 - SLOF regression prevents VM startup
Patch1: slof-virtio-serial-Make-read-and-write-methods-report-fai.patch
# For RHEL-3709 - SLOF regression prevents VM startup
Patch2: slof-virtio-serial-Do-not-close-stdout-on-quiesce.patch
BuildArch: noarch
ExclusiveArch: %{power64}
@ -56,6 +60,12 @@ install -c -m 0644 boot_rom.bin $RPM_BUILD_ROOT%{_datadir}/qemu-kvm/slof.bin
%{_datadir}/qemu-kvm/slof.bin
%changelog
* Wed Oct 04 2023 Jon Maloy <jmaloy@redhat.com> - 20210217-2.el8
- slof-virtio-serial-Make-read-and-write-methods-report-fai.patch [RHEL-3709]
- slof-virtio-serial-Do-not-close-stdout-on-quiesce.patch [RHEL-3709]
- Resolves: RHEL-3709
(SLOF regression prevents VM startup)
* Thu Sep 2 2021 Danilo C. L. de Paula <ddepaula@redhat.com> - 20210217-1.el8
- Resolves: bz#2000225
(Rebase virt:rhel module:stream based on AV-8.6)