I've been tinkering around a little bit this evening....
To: [email protected] Cc: "H. Peter Anvin" <[email protected]> Subject: [PATCH] - add "fixpae" bootparam to fix/workaround #930447 Hello kernel-team, regarding https://bugs.launchpad.net/ubuntu/+source/syslinux/+bug/930447 , i have developed a simple patch to (hopefully) provide an easy and elegant workaround/fix for the issue. I assume some hundred users (if not some thousand, as entries in bugreports are only the tip of an iceberg) are affected by this issue. Please take a review and feel free to merge. As defaulting to PAE kernels is specific for some distros only, i think this is no patch for mainline (yet). I did not often do patches, nor am i a good programmer - so sorry if the patch or the submission style is not perfect. regards Roland --- This patch adds a kernel bootparam "fixpae". If integrated into the kernel, this should make life more easy, as installation quirks like fake-pae package, upgrade path from ubuntu 12.04 onwards or specially crafted installation media are not needed anymore. Affected users also get a hint that their issue may be workarounded with this param. Just add the bootparam to the kernel commandline and you`re done. fixpae [x86] Workaround for a nasty PAE issue with older CPU`s like Pentium M, as they may report PAE incapability although they support it. This bootparam adds a fake pae entry to the flags section in /proc/cpuinfo and skips the validate_cpu() routine in arch/x86/boot/main.c This is necesssary as major distros nowadays only ship PAE Kernels for x86 and there is no easy workaround. signed-off-by: Roland Kletzing <[email protected]> --- diff -uprN linux-source-3.11.0.orig/arch/x86/boot/main.c linux-source-3.11.0/arch/x86/boot/main.c --- linux-source-3.11.0.orig/arch/x86/boot/main.c 2013-09-02 22:46:10.000000000 +0200 +++ linux-source-3.11.0/arch/x86/boot/main.c 2013-11-26 20:56:01.175269235 +0100 @@ -146,9 +146,17 @@ void main(void) /* Make sure we have all the proper CPU support */ if (validate_cpu()) { - puts("Unable to boot - please use a kernel appropriate " - "for your CPU.\n"); - die(); + if(cmdline_find_option_bool("fixpae")) + puts("fixpae bootparam active. Skipping CPU " + "validation and continuing Kernel execution\n"); + else { + puts("Unable to boot - please use a kernel appropriate " + "for your CPU.\n" + "Hint: CPU`s like Pentium M may incorrectly report " + "on PAE incapability, so you may try booting with " + "fixpae bootparam as a workaround.\n"); + die(); + } } /* Tell the BIOS what CPU mode we intend to run in. */ diff -uprN linux-source-3.11.0.orig/arch/x86/kernel/cpu/proc.c linux-source-3.11.0/arch/x86/kernel/cpu/proc.c --- linux-source-3.11.0.orig/arch/x86/kernel/cpu/proc.c 2013-09-02 22:46:10.000000000 +0200 +++ linux-source-3.11.0/arch/x86/kernel/cpu/proc.c 2013-11-26 21:15:53.961267903 +0100 @@ -4,6 +4,17 @@ #include <linux/seq_file.h> #include <linux/cpufreq.h> +/* fixpae kernelparam workaround, see kernel-parameters.txt */ +static int fixpaeflag = 0; + +static int __init fixpae(char *s) +{ + fixpaeflag=1; + return 1; +} + +__setup("fixpae", fixpae); + /* * Get CPU information for use by the procfs. */ @@ -96,6 +107,8 @@ static int show_cpuinfo(struct seq_file show_cpuinfo_misc(m, c); seq_printf(m, "flags\t\t:"); + if(fixpaeflag) + seq_printf(m, " pae"); for (i = 0; i < 32*NCAPINTS; i++) if (cpu_has(c, i) && x86_cap_flags[i] != NULL) seq_printf(m, " %s", x86_cap_flags[i]); diff -uprN linux-source-3.11.0.orig/Documentation/kernel-parameters.txt linux-source-3.11.0/Documentation/kernel-parameters.txt --- linux-source-3.11.0.orig/Documentation/kernel-parameters.txt 2013-10-23 19:26:00.000000000 +0200 +++ linux-source-3.11.0/Documentation/kernel-parameters.txt 2013-11-26 21:13:28.515313678 +0100 @@ -900,6 +900,14 @@ bytes respectively. Such letter suffixes Format: <interval>,<probability>,<space>,<times> See also Documentation/fault-injection/. + fixpae [x86] Workaround for a nasty PAE issue with older CPU`s + like Pentium M, as they may report PAE incapability + although they support it. This bootparam adds a fake + pae entry to the flags section in /proc/cpuinfo and + skips the validate_cpu() routine in arch/x86/boot/main.c + This is necesssary as major distros nowadays only ship + PAE Kernels for x86 and there is no easy workaround. + floppy= [HW] See Documentation/blockdev/floppy.txt. -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/930447 Title: Unable to start Ubuntu 12.04 live CD with syslinux loader on Pentium M x86 Laptop due to bug in PAE kernel, initramfs or syslinux To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/syslinux/+bug/930447/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
