[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080821205558.GC23377@hoblitt.com>
Date: Thu, 21 Aug 2008 10:55:58 -1000
From: Joshua Hoblitt <josh@...litt.com>
To: Yinghai Lu <yhlu.kernel@...il.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
bugme-daemon@...zilla.kernel.org, linux-kernel@...r.kernel.org,
j_kernel@...litt.com
Subject: Re: [Bug 11388] New: 2.6.27-rc3 warns about MTRR range; only 3 of
16gb of memory is usable
Both hunks in the patch applied with an offset of -36 but the show_msr
flag doesn't seem to have any effect. The dmesg is still the same
number of lines accord to wc.
I'm attaching the new dmesg anyways.
$ cat /proc/cmdline
root=/dev/ram0 real_root=/dev/sda3 init=/linuxrc show_msr=1 console=tty0
console=ttyS0,115200n8
-J
--
On Wed, Aug 20, 2008 at 06:49:11PM -0700, Yinghai Lu wrote:
> On Wed, Aug 20, 2008 at 6:20 PM, Yinghai Lu <yhlu.kernel@...il.com> wrote:
> > On Wed, Aug 20, 2008 at 6:04 PM, Andrew Morton
> > <akpm@...ux-foundation.org> wrote:
> >>
> >> (switched to email. Please respond via emailed reply-to-all, not via the
> >> bugzilla web interface).
> >>
> >> On Wed, 20 Aug 2008 17:38:59 -0700 (PDT)
> >> bugme-daemon@...zilla.kernel.org wrote:
> >>
> >>> http://bugzilla.kernel.org/show_bug.cgi?id=11388
> >>>
> >>> Summary: 2.6.27-rc3 warns about MTRR range; only 3 of 16gb of
> >>> memory is usable
> >>> Product: Memory Management
> >>> Version: 2.5
> >>> KernelVersion: 2.6.27-rc3
> >>> Platform: All
> >>> OS/Version: Linux
> >>> Tree: Mainline
> >>> Status: NEW
> >>> Severity: normal
> >>> Priority: P1
> >>> Component: MTTR
> >>> AssignedTo: akpm@...l.org
> >>> ReportedBy: j_kernel@...litt.com
> >>>
> >>>
> >>> Latest working kernel version: 2.4.24.2 (possibly later)
> >>> Earliest failing kernel version: 2.6.27-rc3-21328-ga7f5aaf (from netdev-2.6)
> >>> Distribution: Gentoo
> >>> Hardware Environment: 2x Intel X5482
> >>> Software Environment:
> >>> Problem Description:
> >>>
> >>> [ 0.000000] WARNING: BIOS bug: CPU MTRRs don't cover all of memory, losing
> >>> 13056MB of RAM.
> >>> [ 0.000000] ------------[ cut here ]------------
> >>> [ 0.000000] WARNING: at arch/x86/kernel/cpu/mtrr/main.c:1561
> >>> mtrr_trim_uncached_memory+0x508/0x550()
> >>> [ 0.000000] Modules linked in:
> >>> [ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.27-rc3-21328-ga7f5aaf #8
> >>> [ 0.000000]
> >>> [ 0.000000] Call Trace:
> >>> [ 0.000000] [<ffffffff80234c3e>] warn_on_slowpath+0x51/0x77
> >>> [ 0.000000] [<ffffffff8023570a>] printk+0x4e/0x56
> >>> [ 0.000000] [<ffffffff803add02>] sort+0xfa/0x18c
> >>> [ 0.000000] [<ffffffff808283d3>] cmp_range+0x0/0x6
> >>> [ 0.000000] [<ffffffff80828a47>] mtrr_trim_uncached_memory+0x508/0x550
> >>> [ 0.000000] [<ffffffff802178e1>] post_set+0x20/0x3d
> >>> [ 0.000000] [<ffffffff80824f99>] setup_arch+0x39d/0x6be
> >>> [ 0.000000] [<ffffffff8081e962>] start_kernel+0x74/0x341
> >>> [ 0.000000] [<ffffffff8081e394>] x86_64_start_kernel+0xe3/0xe7
> >>> [ 0.000000]
> >>> [ 0.000000] ---[ end trace 4eaa2a86a8e2da22 ]---
> >>>
> >>>
> >>> Steps to reproduce:
> >>>
> >>> This warning isn't present under 2.6.24.2 and the full range of physical memory
> >>> is usable.
> >>
> >> Looks like a post-2.6.26 regression caused by
> >> 12031a624af7816ec7660b82be648aa3703b4ebe.
> > reg00: base=0xd0000000 (3328MB), size=196864MB: uncachable, count=1
> > reg01: base=0xe0000000 (3584MB), size=197120MB: uncachable, count=1
> > reg02: base=0x00000000 ( 0MB), size=212992MB: write-back, count=1
> > reg03: base=0x400000000 (16384MB), size=197120MB: write-back, count=1
> > reg04: base=0x420000000 (16896MB), size=196864MB: write-back, count=1
> >
> > the size mtrr looks crazy.
>
> please apply attached patch and boot with show_msr=1 to dump the msr
> (including mtrr)
>
> YH
> [PATCH] x86_64: printout msr
>
> commandline show_msr=1 for bsp, show_msr=32 for all 32 cpus.
>
> Signed-off-by: Yinghai Lu <yhlu.kernel@...il.com>
>
> ---
> arch/x86/kernel/cpu/common_64.c | 46 ++++++++++++++++++++++++++++++++++++++++
> include/asm-x86/msr.h | 23 ++++++++++++++++++++
> 2 files changed, 69 insertions(+)
>
> Index: linux-2.6/arch/x86/kernel/cpu/common_64.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/cpu/common_64.c
> +++ linux-2.6/arch/x86/kernel/cpu/common_64.c
> @@ -430,6 +430,49 @@ static __init int setup_noclflush(char *
> }
> __setup("noclflush", setup_noclflush);
>
> +struct msr_range {
> + unsigned min;
> + unsigned max;
> +};
> +
> +static struct msr_range msr_range_array[] __cpuinitdata = {
> + { 0x00000000, 0x00000418},
> + { 0xc0000000, 0xc000040b},
> + { 0xc0010000, 0xc0010142},
> + { 0xc0011000, 0xc001103b},
> +};
> +
> +static void __cpuinit print_cpu_msr(void)
> +{
> + unsigned index;
> + u64 val;
> + int i;
> + unsigned index_min, index_max;
> +
> + for (i = 0; i < ARRAY_SIZE(msr_range_array); i++) {
> + index_min = msr_range_array[i].min;
> + index_max = msr_range_array[i].max;
> + for (index = index_min; index < index_max; index++) {
> + if (rdmsrl_amd_safe(index, &val))
> + continue;
> + printk(KERN_INFO " MSR%08x: %016llx\n", index, val);
> + }
> + }
> +}
> +
> +static int show_msr __cpuinitdata;
> +static __init int setup_show_msr(char *arg)
> +{
> + int num;
> +
> + get_option(&arg, &num);
> +
> + if (num > 0)
> + show_msr = num;
> + return 1;
> +}
> +__setup("show_msr=", setup_show_msr);
> +
> void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
> {
> if (c->x86_model_id[0])
> @@ -439,6 +482,9 @@ void __cpuinit print_cpu_info(struct cpu
> printk(KERN_CONT " stepping %02x\n", c->x86_mask);
> else
> printk(KERN_CONT "\n");
> +
> + if (c->cpu_index < show_msr)
> + print_cpu_msr();
> }
>
> static __init int setup_disablecpuid(char *arg)
> Index: linux-2.6/include/asm-x86/msr.h
> ===================================================================
> --- linux-2.6.orig/include/asm-x86/msr.h
> +++ linux-2.6/include/asm-x86/msr.h
> @@ -63,6 +63,22 @@ static inline unsigned long long native_
> return EAX_EDX_VAL(val, low, high);
> }
>
> +static inline unsigned long long native_read_msr_amd_safe(unsigned int msr,
> + int *err)
> +{
> + DECLARE_ARGS(val, low, high);
> +
> + asm volatile("2: rdmsr ; xor %0,%0\n"
> + "1:\n\t"
> + ".section .fixup,\"ax\"\n\t"
> + "3: mov %3,%0 ; jmp 1b\n\t"
> + ".previous\n\t"
> + _ASM_EXTABLE(2b, 3b)
> + : "=r" (*err), EAX_EDX_RET(val, low, high)
> + : "c" (msr), "D" (0x9c5a203a), "i" (-EFAULT));
> + return EAX_EDX_VAL(val, low, high);
> +}
> +
> static inline void native_write_msr(unsigned int msr,
> unsigned low, unsigned high)
> {
> @@ -158,6 +174,13 @@ static inline int rdmsrl_safe(unsigned m
> *p = native_read_msr_safe(msr, &err);
> return err;
> }
> +static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p)
> +{
> + int err;
> +
> + *p = native_read_msr_amd_safe(msr, &err);
> + return err;
> +}
>
> #define rdtscl(low) \
> ((low) = (u32)native_read_tsc())
View attachment "2.6.27-r3.dmesg2" of type "text/plain" (43145 bytes)
Powered by blists - more mailing lists