Sorry for the delayed reply. This is something I referred to when I was looking into the CPUID stuff recently.
http://support.amd.com/TechDocs/25481.pdf Gabe On Fri, Feb 20, 2015 at 3:17 PM, Joel Hestness via gem5-dev < [email protected]> wrote: > Hi guys, > I think I figure some of this out. The Wikipedia page on CPUID ( > http://en.wikipedia.org/wiki/CPUID) indicates that xsave is bit 26 of ECX. > Unsetting this bit allowed me to successfully boot these older versions of > Linux. For anyone running into the same issue, here is the patch for that > change: > > ------------------------------------------------------------------ > diff --git a/src/arch/x86/cpuid.cc b/src/arch/x86/cpuid.cc > --- a/src/arch/x86/cpuid.cc > +++ b/src/arch/x86/cpuid.cc > @@ -154,7 +154,7 @@ > break; > case FamilyModelStepping: > result = CpuidResult(0x00020f51, 0x00000805, > - 0xe7dbfbff, 0x04000209); > + 0xe7dbfbff, 0x00000209); > break; > default: > warn("x86 cpuid: unimplemented function %u", funcNum); > ------------------------------------------------------------------ > > I also discovered that the reason Linux falls into this kernel panic is > that it executes a CPUID operation that is not currently implemented in > gem5 (src/arch/x86/cpuid.cc). Specifically, the cpuid_count function call > (here: > http://lxr.free-electrons.com/source/arch/x86/kernel/xsave.c?v=2.6.32#L319 > ) > tries to execute CPUID function EAX=0xd (13), EAX=0x0. gem5 prints a > warning saying that this function is unimplemented, and does not update any > registers, causing the resulting EAX to be incorrect. > > It looks like more recent Linux versions contain more checks, and so may > not reach this cpuid_count call: > http://lxr.free-electrons.com/source/arch/x86/kernel/xsave.c#L618 > > > Joel > > > > > On Fri, Feb 20, 2015 at 2:17 PM, Joel Hestness <[email protected]> > wrote: > > > Hey Gabe, > > When I try to boot older versions of Linux (2.6.28.4, 2.6.22.9), I'm > > running into a kernel panic related to xsave ( > > > http://lxr.free-electrons.com/source/arch/x86/kernel/xsave.c?v=2.6.32#L323 > > ): > > > > *FP/SSE not shown under xsave features 0xd* > > ------------[ cut here ]------------ > > kernel BUG at arch/x86/kernel/xsave.c:323! > > invalid opcode: 0000 [#1] SMP > > last sysfs file: > > CPU 0 > > Modules linked in: > > Pid: 0, comm: swapper Tainted: G W 2.6.28-rc4-dirty #5 > > RIP: 0010:[<ffffffff808d69e7>] [<ffffffff808d69e7>] > > xsave_cntxt_init+0x35/0x130 > > RSP: 0018:ffffffff808c3f18 EFLAGS: 000000b8 > > RAX: 000000000000002d RBX: ffffffff808c3f48 RCX: 00000000ffffffff > > RDX: ffffffff807c3c38 RSI: 0000000000000074 RDI: ffffffff8094a5f4 > > RBP: 0000000000000000 R08: 00000000ffffffff R09: 00000000000003fd > > R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff807a8340 > > R13: 0000000000000005 R14: 00000000ffff8800 R15: ffff88000101f000 > > FS: 0000000000000000(0000) GS:ffffffff808bd980(0000) > > knlGS:0000000000000000 > > CS: 0010 DS: 0018 ES: 0018 CR0: 0000000080050033 > > CR2: 0000000000000000 CR3: 0000000000201000 CR4: 00000000000006a0 > > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > > DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000000 > > Process swapper (pid: 0, threadinfo ffffffff808c2000, task > > ffffffff807a8340) > > Stack: > > ffffffff808c3f48 ffffffff8060e2b1 0000000000000010 ffffffff8060fa3f > > 0000000000000020 fffffff000000000 0100890239802087 00000000ffff8800 > > ffffffff808c3f88 ffffffffffffffff 0000000000000040 ffffffff808f7700 > > Call Trace: > > [<ffffffff8060e2b1>] fpu_init+0x4a/0x97 > > [<ffffffff8060fa3f>] cpu_init+0x319/0x33f > > [<ffffffff808cdab5>] start_kernel+0x1b2/0x321 > > [<ffffffff808cd405>] x86_64_start_kernel+0xd9/0xdd > > Code: 48 c1 e2 20 89 c0 48 8d 34 02 48 89 f0 48 89 35 90 96 05 00 83 e0 > 03 > > 48 83 f8 03 74 12 48 c7 c7 10 82 71 80 31 c0 e8 4d e6 d3 ff <0f> 0b eb fe > > f6 05 b5 70 fe ff 04 48 c7 05 63 96 05 00 03 00 00 > > RIP [<ffffffff808d69e7>] xsave_cntxt_init+0x35/0x130 > > RSP <ffffffff808c3f18> > > ---[ end trace 4eaa2a86a8e2da22 ]--- > > Kernel panic - not syncing: Attempted to kill the idle task! > > ------------[ cut here ]------------ > > WARNING: at kernel/smp.c:333 smp_call_function_mask+0x1de/0x250() > > Modules linked in: > > Pid: 0, comm: swapper Tainted: G D W 2.6.28-rc4-dirty #5 > > Call Trace: > > [<ffffffff8023af92>] warn_on_slowpath+0x62/0xa0 > > [<ffffffff803a4159>] vsnprintf+0x449/0x6b0 > > [<ffffffff803a3a84>] string+0x34/0xf0 > > [<ffffffff803a4118>] vsnprintf+0x408/0x6b0 > > [<ffffffff802547dd>] up+0xd/0x40 > > [<ffffffff8023b6de>] release_console_sem+0x1ae/0x200 > > [<ffffffff8021ef40>] stop_this_cpu+0x0/0x30 > > [<ffffffff8025db9e>] smp_call_function_mask+0x1de/0x250 > > [<ffffffff803a3f78>] vsnprintf+0x268/0x6b0 > > [<ffffffff80615074>] printk+0x40/0x45 > > [<ffffffff8021ef30>] native_smp_send_stop+0x20/0x30 > > [<ffffffff80614f8d>] panic+0x82/0x129 > > [<ffffffff8023ecae>] do_exit+0x7de/0x890 > > [<ffffffff80615074>] printk+0x40/0x45 > > [<ffffffff806184ba>] oops_end+0x7a/0xc0 > > [<ffffffff8020d3d4>] do_invalid_op+0x84/0xa0 > > [<ffffffff808d69e7>] xsave_cntxt_init+0x35/0x130 > > [<ffffffff8023b6de>] release_console_sem+0x1ae/0x200 > > [<ffffffff802547dd>] up+0xd/0x40 > > [<ffffffff806178e9>] error_exit+0x0/0x51 > > [<ffffffff808d69e7>] xsave_cntxt_init+0x35/0x130 > > [<ffffffff808d69e7>] xsave_cntxt_init+0x35/0x130 > > [<ffffffff8060e2b1>] fpu_init+0x4a/0x97 > > [<ffffffff8060fa3f>] cpu_init+0x319/0x33f > > [<ffffffff808cdab5>] start_kernel+0x1b2/0x321 > > [<ffffffff808cd405>] x86_64_start_kernel+0xd9/0xdd > > ---[ end trace 4eaa2a86a8e2da22 ]--- > > > > Based on the commit message, it looks like this patch might have > enabled > > Linux boot features through the xsave setting. Can you please let me know > > which of the bits in the CpuidResult vector I should disable to test if > > xsave is the problem? > > > > Thanks! > > Joel > > > > > > > > On Wed, Jan 7, 2015 at 12:06 AM, Gabe Black via gem5-dev < > > [email protected]> wrote: > > > >> changeset 5d119a460f15 in /z/repo/gem5 > >> details: http://repo.gem5.org/gem5?cmd=changeset;node=5d119a460f15 > >> description: > >> x86: Enable three bits in the FamilyModelStepping ECX CPUID > >> bitfield. > >> > >> These are for the monitor/mwait instructions, SSSE3, and XSAVE. > >> > >> diffstat: > >> > >> src/arch/x86/cpuid.cc | 2 +- > >> 1 files changed, 1 insertions(+), 1 deletions(-) > >> > >> diffs (12 lines): > >> > >> diff -r e9bc4cde5d8e -r 5d119a460f15 src/arch/x86/cpuid.cc > >> --- a/src/arch/x86/cpuid.cc Tue Jan 06 22:13:56 2015 -0800 > >> +++ b/src/arch/x86/cpuid.cc Tue Jan 06 22:15:00 2015 -0800 > >> @@ -154,7 +154,7 @@ > >> break; > >> case FamilyModelStepping: > >> result = CpuidResult(0x00020f51, 0x00000805, > >> - 0xe7dbfbff, 0x00000001); > >> + 0xe7dbfbff, 0x04000209); > >> break; > >> default: > >> warn("x86 cpuid: unimplemented function %u", funcNum); > >> _______________________________________________ > >> gem5-dev mailing list > >> [email protected] > >> http://m5sim.org/mailman/listinfo/gem5-dev > >> > > > > > > > > -- > > Joel Hestness > > PhD Candidate, Computer Architecture > > Dept. of Computer Science, University of Wisconsin - Madison > > http://pages.cs.wisc.edu/~hestness/ > > > > > > -- > Joel Hestness > PhD Candidate, Computer Architecture > Dept. of Computer Science, University of Wisconsin - Madison > http://pages.cs.wisc.edu/~hestness/ > _______________________________________________ > gem5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/gem5-dev > _______________________________________________ gem5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/gem5-dev
