From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752226AbbHaCiE (ORCPT ); Sun, 30 Aug 2015 22:38:04 -0400 Received: from mail-ig0-f173.google.com ([209.85.213.173]:33205 "EHLO mail-ig0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751883AbbHaCiB (ORCPT ); Sun, 30 Aug 2015 22:38:01 -0400 Date: Sun, 30 Aug 2015 22:37:57 -0400 From: Chuck Ebbert To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" Subject: [BUG 4.2-rc8] Interrupt occurs while apply_alternatives() is patching the handler Message-ID: <20150830223757.6e4c5c02@as> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is from https://bugzilla.redhat.com/show_bug.cgi?id=1258223 [ 0.036000] BUG: unable to handle kernel paging request at 55501e06 [ 0.036000] IP: [] common_interrupt+0xb/0x38 [ 0.036000] *pde = 00000000 [ 0.036000] Oops: 0000 [#1] SMP [ 0.036000] Modules linked in: [ 0.036000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.2.0-0.rc8.git3.1.fc24.i686 #1 [ 0.036000] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.8.2-20150714_191134- 04/01/2014 [ 0.036000] task: c0d49ac0 ti: c0d42000 task.ti: c0d42000 [ 0.036000] EIP: 0060:[] EFLAGS: 00200046 CPU: 0 [ 0.036000] EIP is at common_interrupt+0xb/0x38 [ 0.036000] EAX: c0aae480 EBX: 0000008d ECX: c0ab1c83 EDX: e4af6810 [ 0.036000] ESI: 029a7802 EDI: 00000003 EBP: c0d43e68 ESP: c0d43e44 [ 0.036000] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 [ 0.036000] CR0: 8005003b CR2: 55501e06 CR3: 00ebd000 CR4: 00000690 [ 0.036000] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000 [ 0.036000] DR6: 00000000 DR7: 00000000 [ 0.036000] Stack: [ 0.036000] 0000004f c0409c80 00000060 00200202 00200046 c0d43e60 c0ea150c 029a7802 [ 0.036000] 00000000 c0d43fb8 c040a054 c07f1cf0 6c0a1000 ffff0006 00200046 00000043 [ 0.036000] c0ed0bc0 00000000 c0d43e98 c071a6fc c0d43ea8 c0d43ec4 c0ea4c73 c0ea4c7f [ 0.036000] Call Trace: [ 0.036000] [] ? add_nops+0x90/0xa0 [ 0.036000] [] apply_alternatives+0x274/0x630 [ 0.036000] [] ? wait_for_xmitr+0xa0/0xa0 [ 0.036000] [] ? sprintf+0x1c/0x20 [ 0.036000] [] ? irq_entries_start+0x698/0x698 [ 0.036000] [] ? memcpy+0xb/0x30 [ 0.036000] [] ? serial8250_set_termios+0x20/0x20 [ 0.036000] [] ? _raw_write_unlock_irqrestore+0x13/0x20 [ 0.036000] [] ? _raw_write_unlock_irqrestore+0x13/0x20 [ 0.036000] [] ? _raw_spin_unlock_irqrestore+0xd/0x10 [ 0.036000] [] ? console_unlock+0x2e9/0x610 [ 0.036000] [] ? log_store+0x1cd/0x210 [ 0.036000] [] ? vprintk_emit+0x29e/0x570 [ 0.036000] [] ? vprintk_default+0x41/0x60 [ 0.036000] [] ? printk+0x17/0x19 [ 0.036000] [] ? identify_boot_cpu+0x7b/0x80 [ 0.036000] [] alternative_instructions+0x17/0xc1 [ 0.036000] [] check_bugs+0x32/0x39 [ 0.036000] [] start_kernel+0x3ca/0x40a [ 0.036000] [] i386_start_kernel+0x91/0x95 [ 0.036000] Code: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 8d 90 90 83 04 24 80 fc 0f a8 0f 06 1e 50 55 57 56 52 51 53 ba 7b 00 00 00 8e da 8e c2 ba d8 0: 8d 90 90 83 04 24 lea 0x24048390(%eax),%edx 6: 80 fc 0f cmp $0xf,%ah 9: a8 0f test $0xf,%al >> b: a0 06 1e 50 55 mov 0x55501e06,%al 10: 57 push %edi 11: 56 push %esi Interrupt 0x30 occurred while the alternatives code was replacing the initial 0x90,0x90,0x90 NOPs (from the ASM_CLAC macro) with the optimized version, 0x8d,0x76,0x00. Only the first byte has been replaced so far, and it makes a mess out of the insn decoding. I have no clue how to fix this.