[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <697723f8-ab0b-4cc4-9e83-ea710f62951a@csgroup.eu>
Date: Wed, 12 Nov 2025 12:38:36 +0100
From: Christophe Leroy <christophe.leroy@...roup.eu>
To: Finn Thain <fthain@...ux-m68k.org>,
Madhavan Srinivasan <maddy@...ux.ibm.com>,
Michael Ellerman <mpe@...erman.id.au>, Nicholas Piggin <npiggin@...il.com>
Cc: Cedar Maxwell <cedarmaxwell@....com>, Stan Johnson <userm57@...oo.com>,
"Dr. David Alan Gilbert" <linux@...blig.org>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>, stable@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] powerpc: Add reloc_offset() to font bitmap pointer
used for bootx_printf()
Le 10/11/2025 à 00:30, Finn Thain a écrit :
> Since Linux v6.7, booting using BootX on an Old World PowerMac produces
> an early crash. Stan Johnson writes, "the symptoms are that the screen
> goes blank and the backlight stays on, and the system freezes (Linux
> doesn't boot)."
>
> Further testing revealed that the failure can be avoided by disabling
> CONFIG_BOOTX_TEXT. Bisection revealed that the regression was caused by
> a change to the font bitmap pointer that's used when btext_init() begins
> painting characters on the display, early in the boot process.
>
> Christophe Leroy explains, "before kernel text is relocated to its final
> location ... data is addressed with an offset which is added to the
> Global Offset Table (GOT) entries at the start of bootx_init()
> by function reloc_got2(). But the pointers that are located inside a
> structure are not referenced in the GOT and are therefore not updated by
> reloc_got2(). It is therefore needed to apply the offset manually by using
> PTRRELOC() macro."
>
> Cc: Cedar Maxwell <cedarmaxwell@....com>
> Cc: Stan Johnson <userm57@...oo.com>
> Cc: "Dr. David Alan Gilbert" <linux@...blig.org>
> Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org>
> Cc: stable@...r.kernel.org
> Link: https://lists.debian.org/debian-powerpc/2025/10/msg00111.html
> Link: https://lore.kernel.org/linuxppc-dev/d81ddca8-c5ee-d583-d579-02b19ed95301@yahoo.com/
> Reported-by: Cedar Maxwell <cedarmaxwell@....com>
> Closes: https://lists.debian.org/debian-powerpc/2025/09/msg00031.html
> Bisected-by: Stan Johnson <userm57@...oo.com>
> Tested-by: Stan Johnson <userm57@...oo.com>
> Fixes: 0ebc7feae79a ("powerpc: Use shared font data")
> Suggested-by: Christophe Leroy <christophe.leroy@...roup.eu>
> Signed-off-by: Finn Thain <fthain@...ux-m68k.org>
Reviewed-by: Christophe Leroy <christophe.leroy@...roup.eu>
> ---
> Changed since v1:
> - Improved commit log entry to better explain the need for PTRRELOC().
> ---
> arch/powerpc/kernel/btext.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/kernel/btext.c b/arch/powerpc/kernel/btext.c
> index 7f63f1cdc6c3..ca00c4824e31 100644
> --- a/arch/powerpc/kernel/btext.c
> +++ b/arch/powerpc/kernel/btext.c
> @@ -20,6 +20,7 @@
> #include <asm/io.h>
> #include <asm/processor.h>
> #include <asm/udbg.h>
> +#include <asm/setup.h>
>
> #define NO_SCROLL
>
> @@ -463,7 +464,7 @@ static noinline void draw_byte(unsigned char c, long locX, long locY)
> {
> unsigned char *base = calc_base(locX << 3, locY << 4);
> unsigned int font_index = c * 16;
> - const unsigned char *font = font_sun_8x16.data + font_index;
> + const unsigned char *font = PTRRELOC(font_sun_8x16.data) + font_index;
> int rb = dispDeviceRowBytes;
>
> rmci_maybe_on();
Powered by blists - more mailing lists