qemu/pc-bios/s390-ccw
Thomas Huth 422865f667 pc-bios/s390-ccw/bootmap: Improve the guessing logic in zipl_load_vblk()
The logic of trying an final ISO or ECKD boot on virtio-block devices is
very weird: Since the geometry hardly ever matches in virtio_disk_is_scsi(),
virtio_blk_setup_device() always sets a "guessed" disk geometry via
virtio_assume_scsi() (which is certainly also wrong in a lot of cases).

zipl_load_vblk() then sees that there's been a "virtio_guessed_disk_nature"
and tries to fix up the geometry again via virtio_assume_iso9660() before
always trying to do ipl_iso_el_torito(). That's a very brain-twisting
way of attempting to boot from ISO images, which won't work anymore after
the following patches that will clean up the virtio_assume_scsi() mess
(and thus get rid of the "virtio_guessed_disk_nature" here).

Let's try a better approach instead: ISO files always have a magic
string "CD001" at offset 0x8001 (see e.g. the ECMA-119 specification)
which we can use to decide whether we should try to boot in ISO 9660
mode (which we should also try if we see a sector size of 2048).

And if we were not able to boot in ISO mode here, the final boot attempt
before panicking is to boot in ECKD mode. Since this is our last boot
attempt anyway, simply always assume the ECKD geometry here (if the sector
size was not 4096 yet), so that we also do not depend on the guessed disk
geometry from virtio_blk_setup_device() here anymore.

Message-Id: <20220704111903.62400-4-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2022-07-06 18:33:53 +02:00
..
bootmap.c pc-bios/s390-ccw/bootmap: Improve the guessing logic in zipl_load_vblk() 2022-07-06 18:33:53 +02:00
bootmap.h pc-bios: s390x: Fix bootmap.c zipl component entry data handling 2020-10-06 19:57:35 +02:00
bswap.h pc-bios/s390-ccw: Move byteswap functions to a separate header 2017-07-14 12:29:48 +02:00
cio.c pc-bios: s390x: cio.c cleanup and compile fix 2020-07-02 09:59:10 +02:00
cio.h pc-bios: s390x: Get rid of magic offsets into the lowcore 2020-07-02 09:59:51 +02:00
dasd-ipl.c docs: fix references to docs/devel/s390-dasd-ipl.rst 2021-06-02 06:51:09 +02:00
dasd-ipl.h s390-bios: Support booting from real dasd device 2019-04-12 12:40:35 +02:00
helper.h pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
iplb.h pc-bios/s390-ccw: define loadparm length 2018-06-18 15:08:44 +02:00
jump2ipl.c pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
libc.c pc-bios/s390-ccw: Clean up harmless misuse of isdigit() 2019-05-08 10:52:14 +02:00
libc.h s390-bios: cio error handling 2019-04-12 12:40:35 +02:00
main.c pc-bios/s390-ccw: Add a proper prototype for main() 2022-07-06 18:33:26 +02:00
Makefile configure: enable cross-compilation of s390-ccw 2022-06-01 15:47:43 +01:00
menu.c pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
netboot.mak configure: enable cross-compilation of s390-ccw 2022-06-01 15:47:43 +01:00
netmain.c pc-bios: s390x: Move panic() into header and add infinite loop 2020-07-02 10:00:42 +02:00
s390-arch.h pc-bios: s390x: Clear out leftover S390EP string 2020-11-23 09:48:45 +01:00
s390-ccw.h pc-bios/s390-ccw: Add a proper prototype for main() 2022-07-06 18:33:26 +02:00
s390-time.h pc-bios: s390x: Consolidate timing functions into time.h 2020-07-02 09:59:24 +02:00
sclp.c pc-bios/s390-ccw: fix sclp_get_loadparm_ascii 2019-11-29 09:16:02 +01:00
sclp.h misc: Replace zero-length arrays with flexible array member (automatic) 2020-03-16 22:07:42 +01:00
scsi.h pc-bios/s390-ccw: Get Block Limits VPD device data 2017-05-19 12:29:01 +02:00
start.S pc-bios: s390x: Go into disabled wait when encountering a PGM exception 2020-10-06 20:14:48 +02:00
virtio-blkdev.c pc-bios/s390-ccw/virtio: Introduce a macro for the DASD block size 2022-07-06 18:33:36 +02:00
virtio-net.c pc-bios: s390x: Move sleep and yield to helper.h 2020-07-02 09:59:51 +02:00
virtio-scsi.c pc-bios/s390-ccw: Do not bail out early if not finding a SCSI disk 2020-10-06 19:36:50 +02:00
virtio-scsi.h pc-bios/s390-ccw: Do not bail out early if not finding a SCSI disk 2020-10-06 19:36:50 +02:00
virtio.c pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
virtio.h pc-bios/s390-ccw/virtio: Introduce a macro for the DASD block size 2022-07-06 18:33:36 +02:00