diff --git a/0318-Skip-diskfilter-on-powerpc-CDs.patch b/0318-Skip-diskfilter-on-powerpc-CDs.patch new file mode 100644 index 0000000..c983e90 --- /dev/null +++ b/0318-Skip-diskfilter-on-powerpc-CDs.patch @@ -0,0 +1,58 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Robbie Harwood +Date: Thu, 12 Jan 2023 16:03:03 -0500 +Subject: [PATCH] Skip diskfilter on powerpc CDs + +Prior to this change, on ppc64le with part_msdos and the mdraid* modules +enabled, we see: + + disk/diskfilter.c:191: scanning ieee1275/cdrom + kern/disk.c:196: Opening `ieee1275/cdrom'... + disk/ieee1275/ofdisk.c:477: Opening `cdrom'. + disk/ieee1275/ofdisk.c:502: MAX_RETRIES set to 20 + kern/disk.c:288: Opening `ieee1275/cdrom' succeeded. + disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom + partmap/msdos.c:184: partition 0: flag 0x80, type 0x96, start 0x0, len + 0x6a5d70 + disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + disk/ieee1275/ofdisk.c:578: MAX_RETRIES set to 20 + +These latter two lines repeat many times, eventually ending in: + + kern/disk.c:388: ieee1275/cdrom read failed + error: ../../grub-core/disk/ieee1275/ofdisk.c:608:failure reading sector + 0x1a9720 from `ieee1275/cdrom'. + +and the system drops to a "grub>" prompt. + +The firmware and the iso image appear to diagree on the blocksize (512 +vs. 2048), and the diskfilter RAID probing is too much for it. We won't +be seeing RAID on bootable CDs, so just turn it off. + +Signed-off-by: Robbie Harwood +(cherry picked from commit 35614da6ef0296d1a2d1583ae23822230c25a334) +--- + grub-core/disk/diskfilter.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c +index 7cdffe3ebd..f9140f7493 100644 +--- a/grub-core/disk/diskfilter.c ++++ b/grub-core/disk/diskfilter.c +@@ -133,6 +133,11 @@ scan_disk_partition_iter (grub_disk_t disk, grub_partition_t p, void *data) + struct grub_diskfilter_pv_id id; + grub_diskfilter_t diskfilter; + ++#ifdef __powerpc__ ++ if (!grub_strcmp (name, "ieee1275/cdrom")) ++ return 0; ++#endif ++ + grub_dprintf ("diskfilter", "Scanning for DISKFILTER devices on disk %s\n", + name); + #ifdef GRUB_UTIL diff --git a/0319-Fix-prefix-and-root-on-ppc64le-CDs.patch b/0319-Fix-prefix-and-root-on-ppc64le-CDs.patch new file mode 100644 index 0000000..e968e4b --- /dev/null +++ b/0319-Fix-prefix-and-root-on-ppc64le-CDs.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Robbie Harwood +Date: Fri, 13 Jan 2023 12:36:29 -0500 +Subject: [PATCH] Fix prefix and root on ppc64le CDs + +CHRP requires grub at /boot/grub. On CDs, this means any other prefix +will be invalid. In particular, a distro grub might prefer /grub2 - but +prefix is hardcoded into the signed core.elf, and will always be wrong +here. + +Also work around a conflict between OF naming and that used by +part_msdos: on CDs, we always want the raw device. This fixes an issue +where grub would successfully load the menu from an image, but then +produce the error: + + error: ../../grub-core/net/net.c:1552:disk `ieee1275/cdrom,0' not found. + +and fail to boot further. + +Signed-off-by: Robbie Harwood +(cherry picked from commit 68e5981a5e808a32350aca4a2414717fa4605ca0) +--- + grub-core/kern/main.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c +index e94a2f78fb..ab06033534 100644 +--- a/grub-core/kern/main.c ++++ b/grub-core/kern/main.c +@@ -278,6 +278,23 @@ grub_set_prefix_and_root (void) + } + + grub_env_set ("root", device); ++ ++#ifdef __powerpc__ ++ /* When booting from a CD, if part_msdos is enabled, grub will detect ++ and create access points starting at (ieee1275/cdrom,msdos1). ++ However, the device detection and OF name transformation will produce ++ a device named (ieee1275/cdrom,0) - i.e., missing the msdos and also ++ differently indexed. Furthermore, CHRP mandates boot/grub as prefix, ++ but our signed images are built with /grub2 to reflect installed ++ systems. Just ignore both messes. ++ */ ++ if (!grub_strncmp (device[0] == '(' ? device + 1 : device, ++ "ieee1275/cdrom", grub_strlen ("ieee1275/cdrom"))) ++ { ++ grub_env_set ("prefix", "/boot/grub"); ++ grub_env_set ("root", "ieee1275/cdrom"); ++ } ++#endif + } + + grub_free (device); diff --git a/grub.patches b/grub.patches index 7e4782a..51a622f 100644 --- a/grub.patches +++ b/grub.patches @@ -315,3 +315,5 @@ Patch0314: 0314-kern-efi-mm-Pass-up-errors-from-add_memory_regions.patch Patch0315: 0315-kern-efi-mm-Implement-runtime-addition-of-pages.patch Patch0316: 0316-efi-Increase-default-memory-allocation-to-32-MiB.patch Patch0317: 0317-mm-Try-invalidate-disk-caches-last-when-out-of-memor.patch +Patch0318: 0318-Skip-diskfilter-on-powerpc-CDs.patch +Patch0319: 0319-Fix-prefix-and-root-on-ppc64le-CDs.patch diff --git a/grub2.spec b/grub2.spec index ac0c558..088265a 100644 --- a/grub2.spec +++ b/grub2.spec @@ -17,7 +17,7 @@ Name: grub2 Epoch: 1 Version: 2.06 -Release: 75%{?dist} +Release: 76%{?dist} Summary: Bootloader with support for Linux, Multiboot and more License: GPLv3+ URL: http://www.gnu.org/software/grub/ @@ -544,6 +544,9 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg %endif %changelog +* Fri Jan 13 2023 Robbie Harwood - 2.06-76 +- ppc64le: fix issues using core.elf on boot media + * Wed Jan 11 2023 Robbie Harwood - 2.06-75 - Pull allocator improvements from upstream