x86: fix 64-bit asm NOPS for CONFIG_GENERIC_CPU
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: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>