• S
    x86: fix 64-bit asm NOPS for CONFIG_GENERIC_CPU · 871de939
    Suresh Siddha 提交于
    ASM_NOP's for 64-bit kernel with CONFIG_GENERIC_CPU is broken
    with the recent x86 nops merge. They were using GENERIC_NOPS
    which will truncate the upper 32bits of %rsi, because of the missing
    64bit rex prefix.
    
    For now, fall back ASM NOPS for generic cpu to K8 NOPS, similar
    to the code before the wrong x86 nop merge.
    
    This should resolve the crash seen by Ingo on a test-system:
    
    BUG: unable to handle kernel paging request at 00000000d80d8ee8
    IP: [<ffffffff802121af>] save_i387_ia32+0x61/0xd8
    PGD b8e0067 PUD 51490067 PMD 0
    Oops: 0000 [1] SMP
    CPU 2
    Modules linked in:
    Pid: 3871, comm: distcc Not tainted 2.6.25-rc7-sched-devel.git-x86-latest.git #359
    RIP: 0010:[<ffffffff802121af>]  [<ffffffff802121af>] save_i387_ia32+0x61/0xd8
    RSP: 0000:ffff81003abd3cb8  EFLAGS: 00010246
    RAX: ffff810082e93400 RBX: 00000000ffc37f84 RCX: ffff8100d80d8ee0
    RDX: 0000000000000000 RSI: 00000000d80d8ee0 RDI: ffff810082e93400
    RBP: 00000000ffc37fdc R08: 00000000ffc37f88 R09: 0000000000000008
    R10: ffff81003abd2000 R11: 0000000000000000 R12: ffff810082e93400
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    FS:  0000000000000000(0000) GS:ffff81011fb12dc0(0063) knlGS:00000000f7f1a6c0
    CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
    CR2: 00000000d80d8ee8 CR3: 0000000076922000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process distcc (pid: 3871, threadinfo ffff81003abd2000, task ffff8100d80d8ee0)
    Stack:  ffff8100bb670380 ffffffff8026de50 0000000000000118 0000000000000002
     0000000000000002 ffff81003abd3e68 ffff81003abd3ed8 ffff81003abd3de8
     ffff81003abd3d18 ffffffff80229785 ffff8100d80d8ee0 ffff810001041280
    Call Trace:
     [<ffffffff8026de50>] ? __generic_file_aio_write_nolock+0x343/0x377
     [<ffffffff80229785>] ? update_curr+0x54/0x64
     [<ffffffff80227cd3>] ? ia32_setup_sigcontext+0x125/0x1d2
     [<ffffffff8022839f>] ? ia32_setup_frame+0x73/0x1a5
     [<ffffffff8020b2a5>] ? do_notify_resume+0x1aa/0x7db
     [<ffffffff8024ae8c>] ? getnstimeofday+0x31/0x85
     [<ffffffff80249858>] ? ktime_get_ts+0x17/0x48
     [<ffffffff80249933>] ? ktime_get+0xc/0x41
     [<ffffffff8024973e>] ? hrtimer_nanosleep+0x75/0xd5
     [<ffffffff80249261>] ? hrtimer_wakeup+0x0/0x21
     [<ffffffff8020bfbc>] ? int_signal+0x12/0x17
     [<ffffffff8030e6b3>] ? dummy_file_free_security+0x0/0x1
    
    Code: a6 08 05 00 00 f6 40 14 01 74 34 4c 89 e7 48 0f ae 07 48 8b 86 08 05 00 00 80 78 02 00 79 02 db e2 90 8d b4 26 00 00 00 00 89 f6 <48> 8b 46 08 83 60 14 fe 0f 20 c0 48 83 c8 08 0f 22 c0 eb 07 c6 
    Signed-off-by: NSuresh Siddha <suresh.b.siddha@intel.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    871de939
nops.h 3.1 KB