Messages in this thread | | | Date | Thu, 6 Sep 2007 16:37:20 +0200 (CEST) | From | Richard Kojedzinszky <> | Subject | Re: 2.4.35.1 and panic at boot with arch=c3 and gcc-4.x |
| |
Dear Willy,
I can confirm that this fixes the problem, the kernel indeed boots on such a board.
regards, Kojedzinszky Richard TvNetWork Nyrt. E-mail: krichy (at) tvnetwork [dot] hu PGP: 0x24E79141 Fingerprint = 6847 ECFF EF58 0C09 18A5 16CF 270F 0C6F 24E7 9141
On Thu, 6 Sep 2007, Willy Tarreau wrote:
> Date: Thu, 6 Sep 2007 00:00:27 +0200 > From: Willy Tarreau <w@1wt.eu> > To: Axel Reinhold <axel@freakout.de>, > Richard Kojedzinszky <krichy@tvnetwork.hu> > Cc: linux-kernel@vger.kernel.org > Subject: 2.4.35.1 and panic at boot with arch=c3 and gcc-4.x > > Axel, Richard, > > you both reported a very similar problem to me (panic at boot on VIA c3 > with 2.4.35.1 when built with gcc-4.1). I could reproduce the problem > with your configs here and compare the code with your working builds. > > I finally tracked the problem down to a dirty trick used to prevent > do_test_wp_bit() from being inlined (Axel, you identified the right > file). Unfortunately, this trick does not work anymore when gcc-4.x > is used without -fno-unit-at-a-time, so let's use the correct method > instead. I really hope that this trick is not used anywhere else! > > The following patch fixes the issue for me. Could you please give it a > try before I merge it? > > Thanks in advance, > Willy > > -- >> From 6ede67f873403d7e19fc0099952badd1db73ed66 Mon Sep 17 00:00:00 2001 > From: Willy Tarreau <w@1wt.eu> > Date: Wed, 5 Sep 2007 23:39:11 +0200 > Subject: [PATCH] i386: do_test_wp_bit() must not be inlined > > do_test_wp_bit() has a comment stating that it must not be inlined. > Unfortunately, the trick to prevent it from being inlined is not > reliable under gcc 4.x. > > The simple fix consists in specifying the noinline attribute. > Tested and confirmed to produce the correct code for gcc versions > 2.95.3, 3.3.6, 3.4.6, 4.0.2, 4.1.1 and 4.2.1. > > Special thanks to Axel Reinhold and Richard Kojedzinszky for their > continuous feedback when trying to solve this issue. > > Signed-off-by: Willy Tarreau <w@1wt.eu> > --- > arch/i386/mm/init.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c > index 0dc1751..2d81117 100644 > --- a/arch/i386/mm/init.c > +++ b/arch/i386/mm/init.c > @@ -381,7 +381,7 @@ void __init paging_init(void) > * This function cannot be __init, since exceptions don't work in that > * section. > */ > -static int do_test_wp_bit(unsigned long vaddr); > +static int __attribute__((noinline)) do_test_wp_bit(unsigned long vaddr); > > void __init test_wp_bit(void) > { > @@ -561,8 +561,8 @@ void __init mem_init(void) > > } > > -/* Put this after the callers, so that it cannot be inlined */ > -static int do_test_wp_bit(unsigned long vaddr) > +/* This function must not be inlined */ > +static int __attribute__((noinline)) do_test_wp_bit(unsigned long vaddr) > { > char tmp_reg; > int flag; > -- > 1.5.2.5 > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |