--- /dev/null
+From 4d66e5e9b6d720d8463e11d027bd4ad91c8b1318 Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Wed, 10 Jun 2015 23:47:14 -0400
+Subject: block: fix ext_dev_lock lockdep report
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 4d66e5e9b6d720d8463e11d027bd4ad91c8b1318 upstream.
+
+ =================================
+ [ INFO: inconsistent lock state ]
+ 4.1.0-rc7+ #217 Tainted: G O
+ ---------------------------------
+ inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
+ swapper/6/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
+ (ext_devt_lock){+.?...}, at: [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70
+ {SOFTIRQ-ON-W} state was registered at:
+ [<ffffffff810bf6b1>] __lock_acquire+0x461/0x1e70
+ [<ffffffff810c1947>] lock_acquire+0xb7/0x290
+ [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
+ [<ffffffff8143a07d>] blk_alloc_devt+0x6d/0xd0 <-- take the lock in process context
+[..]
+ [<ffffffff810bf64e>] __lock_acquire+0x3fe/0x1e70
+ [<ffffffff810c00ad>] ? __lock_acquire+0xe5d/0x1e70
+ [<ffffffff810c1947>] lock_acquire+0xb7/0x290
+ [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
+ [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
+ [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
+ [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70 <-- take the lock in softirq
+ [<ffffffff8143bfec>] part_release+0x1c/0x50
+ [<ffffffff8158edf6>] device_release+0x36/0xb0
+ [<ffffffff8145ac2b>] kobject_cleanup+0x7b/0x1a0
+ [<ffffffff8145aad0>] kobject_put+0x30/0x70
+ [<ffffffff8158f147>] put_device+0x17/0x20
+ [<ffffffff8143c29c>] delete_partition_rcu_cb+0x16c/0x180
+ [<ffffffff8143c130>] ? read_dev_sector+0xa0/0xa0
+ [<ffffffff810e0e0f>] rcu_process_callbacks+0x2ff/0xa90
+ [<ffffffff810e0dcf>] ? rcu_process_callbacks+0x2bf/0xa90
+ [<ffffffff81067e2e>] __do_softirq+0xde/0x600
+
+Neil sees this in his tests and it also triggers on pmem driver unbind
+for the libnvdimm tests. This fix is on top of an initial fix by Keith
+for incorrect usage of mutex_lock() in this path: 2da78092dda1 "block:
+Fix dev_t minor allocation lifetime". Both this and 2da78092dda1 are
+candidates for -stable.
+
+Fixes: 2da78092dda1 ("block: Fix dev_t minor allocation lifetime")
+Cc: Keith Busch <keith.busch@intel.com>
+Reported-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Jens Axboe <axboe@fb.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ block/genhd.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/block/genhd.c
++++ b/block/genhd.c
+@@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *par
+ /* allocate ext devt */
+ idr_preload(GFP_KERNEL);
+
+- spin_lock(&ext_devt_lock);
++ spin_lock_bh(&ext_devt_lock);
+ idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT);
+- spin_unlock(&ext_devt_lock);
++ spin_unlock_bh(&ext_devt_lock);
+
+ idr_preload_end();
+ if (idx < 0)
+@@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt)
+ return;
+
+ if (MAJOR(devt) == BLOCK_EXT_MAJOR) {
+- spin_lock(&ext_devt_lock);
++ spin_lock_bh(&ext_devt_lock);
+ idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
+- spin_unlock(&ext_devt_lock);
++ spin_unlock_bh(&ext_devt_lock);
+ }
+ }
+
+@@ -691,13 +691,13 @@ struct gendisk *get_gendisk(dev_t devt,
+ } else {
+ struct hd_struct *part;
+
+- spin_lock(&ext_devt_lock);
++ spin_lock_bh(&ext_devt_lock);
+ part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
+ if (part && get_disk(part_to_disk(part))) {
+ *partno = part->partno;
+ disk = part_to_disk(part);
+ }
+- spin_unlock(&ext_devt_lock);
++ spin_unlock_bh(&ext_devt_lock);
+ }
+
+ return disk;
--- /dev/null
+From 5f0ee9d17aae628b22be86966471db65be21f262 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Tue, 2 Jun 2015 10:40:50 -0700
+Subject: Input: elantech - fix detection of touchpads where the revision matches a known rate
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit 5f0ee9d17aae628b22be86966471db65be21f262 upstream.
+
+Make the check to skip the rate check more lax, so that it applies
+to all hw_version 4 models.
+
+This fixes the touchpad not being detected properly on Asus PU551LA
+laptops.
+
+Reported-and-tested-by: David Zafra Gómez <dezeta@klo.es>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/mouse/elantech.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -1271,10 +1271,11 @@ static bool elantech_is_signature_valid(
+ return true;
+
+ /*
+- * Some models have a revision higher then 20. Meaning param[2] may
+- * be 10 or 20, skip the rates check for these.
++ * Some hw_version >= 4 models have a revision higher then 20. Meaning
++ * that param[2] may be 10 or 20, skip the rates check for these.
+ */
+- if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
++ if ((param[0] & 0x0f) >= 0x06 && (param[1] & 0xaf) == 0x0f &&
++ param[2] < 40)
+ return true;
+
+ for (i = 0; i < ARRAY_SIZE(rates); i++)
--- /dev/null
+From 7f2ca8b55aeff1fe51ed3570200ef88a96060917 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon, 8 Jun 2015 10:17:32 -0700
+Subject: Input: synaptics - add min/max quirk for Lenovo S540
+
+From: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 7f2ca8b55aeff1fe51ed3570200ef88a96060917 upstream.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1223051#c2
+
+Tested-by: tommy.gagnes@gmail.com
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/mouse/synaptics.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -138,6 +138,11 @@ static const struct min_max_quirk min_ma
+ 1024, 5112, 2024, 4832
+ },
+ {
++ (const char * const []){"LEN2000", NULL},
++ {ANY_BOARD_ID, ANY_BOARD_ID},
++ 1024, 5113, 2021, 4832
++ },
++ {
+ (const char * const []){"LEN2001", NULL},
+ 1024, 5022, 2508, 4832
+ },
+@@ -173,7 +178,7 @@ static const char * const topbuttonpad_p
+ "LEN0047",
+ "LEN0048",
+ "LEN0049",
+- "LEN2000",
++ "LEN2000", /* S540 */
+ "LEN2001", /* Edge E431 */
+ "LEN2002", /* Edge E531 */
+ "LEN2003",
alsa-hda-realtek-add-a-fixup-for-another-acer-aspire-9420.patch
alsa-usb-audio-add-mic-volume-fix-quirk-for-logitech-quickcam-fusion.patch
alsa-usb-audio-add-maya44-usb-mixer-control-names.patch
+input-synaptics-add-min-max-quirk-for-lenovo-s540.patch
+input-elantech-fix-detection-of-touchpads-where-the-revision-matches-a-known-rate.patch
+block-fix-ext_dev_lock-lockdep-report.patch
+usb-cp210x-add-id-for-hubz-dual-zigbee-and-z-wave-dongle.patch
+usb-serial-ftdi_sio-add-support-for-a-motion-tracker-development-board.patch
+x86-asm-irq-stop-relying-on-magic-jmp-behavior-for-early_idt_handlers.patch
--- /dev/null
+From df72d588c54dad57dabb3cc8a87475d8ed66d806 Mon Sep 17 00:00:00 2001
+From: "John D. Blair" <johnb@candicontrols.com>
+Date: Thu, 4 Jun 2015 13:18:19 -0700
+Subject: USB: cp210x: add ID for HubZ dual ZigBee and Z-Wave dongle
+
+From: "John D. Blair" <johnb@candicontrols.com>
+
+commit df72d588c54dad57dabb3cc8a87475d8ed66d806 upstream.
+
+Added the USB serial device ID for the HubZ dual ZigBee
+and Z-Wave radio dongle.
+
+Signed-off-by: John D. Blair <johnb@candicontrols.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/cp210x.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/cp210x.c
++++ b/drivers/usb/serial/cp210x.c
+@@ -128,6 +128,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
+ { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
+ { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
++ { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
+ { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
+ { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
+ { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
--- /dev/null
+From 1df5b888f54070a373a73b34488cc78c2365b7b4 Mon Sep 17 00:00:00 2001
+From: Patrick Riphagen <patrick.riphagen@xsens.com>
+Date: Tue, 19 May 2015 10:03:01 +0200
+Subject: USB: serial: ftdi_sio: Add support for a Motion Tracker Development Board
+
+From: Patrick Riphagen <patrick.riphagen@xsens.com>
+
+commit 1df5b888f54070a373a73b34488cc78c2365b7b4 upstream.
+
+This adds support for new Xsens device, Motion Tracker Development Board,
+using Xsens' own Vendor ID
+
+Signed-off-by: Patrick Riphagen <patrick.riphagen@xsens.com>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 1 +
+ drivers/usb/serial/ftdi_sio_ids.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -712,6 +712,7 @@ static const struct usb_device_id id_tab
+ { USB_DEVICE(XSENS_VID, XSENS_AWINDA_DONGLE_PID) },
+ { USB_DEVICE(XSENS_VID, XSENS_AWINDA_STATION_PID) },
+ { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) },
++ { USB_DEVICE(XSENS_VID, XSENS_MTDEVBOARD_PID) },
+ { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
+ { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -155,6 +155,7 @@
+ #define XSENS_AWINDA_STATION_PID 0x0101
+ #define XSENS_AWINDA_DONGLE_PID 0x0102
+ #define XSENS_MTW_PID 0x0200 /* Xsens MTw */
++#define XSENS_MTDEVBOARD_PID 0x0300 /* Motion Tracker Development Board */
+ #define XSENS_CONVERTER_PID 0xD00D /* Xsens USB-serial converter */
+
+ /* Xsens devices using FTDI VID */
--- /dev/null
+From 425be5679fd292a3c36cb1fe423086708a99f11a Mon Sep 17 00:00:00 2001
+From: Andy Lutomirski <luto@kernel.org>
+Date: Fri, 22 May 2015 16:15:47 -0700
+Subject: x86/asm/irq: Stop relying on magic JMP behavior for early_idt_handlers
+
+From: Andy Lutomirski <luto@kernel.org>
+
+commit 425be5679fd292a3c36cb1fe423086708a99f11a upstream.
+
+The early_idt_handlers asm code generates an array of entry
+points spaced nine bytes apart. It's not really clear from that
+code or from the places that reference it what's going on, and
+the code only works in the first place because GAS never
+generates two-byte JMP instructions when jumping to global
+labels.
+
+Clean up the code to generate the correct array stride (member size)
+explicitly. This should be considerably more robust against
+screw-ups, as GAS will warn if a .fill directive has a negative
+count. Using '. =' to advance would have been even more robust
+(it would generate an actual error if it tried to move
+backwards), but it would pad with nulls, confusing anyone who
+tries to disassemble the code. The new scheme should be much
+clearer to future readers.
+
+While we're at it, improve the comments and rename the array and
+common code.
+
+Binutils may start relaxing jumps to non-weak labels. If so,
+this change will fix our build, and we may need to backport this
+change.
+
+Before, on x86_64:
+
+ 0000000000000000 <early_idt_handlers>:
+ 0: 6a 00 pushq $0x0
+ 2: 6a 00 pushq $0x0
+ 4: e9 00 00 00 00 jmpq 9 <early_idt_handlers+0x9>
+ 5: R_X86_64_PC32 early_idt_handler-0x4
+ ...
+ 48: 66 90 xchg %ax,%ax
+ 4a: 6a 08 pushq $0x8
+ 4c: e9 00 00 00 00 jmpq 51 <early_idt_handlers+0x51>
+ 4d: R_X86_64_PC32 early_idt_handler-0x4
+ ...
+ 117: 6a 00 pushq $0x0
+ 119: 6a 1f pushq $0x1f
+ 11b: e9 00 00 00 00 jmpq 120 <early_idt_handler>
+ 11c: R_X86_64_PC32 early_idt_handler-0x4
+
+After:
+
+ 0000000000000000 <early_idt_handler_array>:
+ 0: 6a 00 pushq $0x0
+ 2: 6a 00 pushq $0x0
+ 4: e9 14 01 00 00 jmpq 11d <early_idt_handler_common>
+ ...
+ 48: 6a 08 pushq $0x8
+ 4a: e9 d1 00 00 00 jmpq 120 <early_idt_handler_common>
+ 4f: cc int3
+ 50: cc int3
+ ...
+ 117: 6a 00 pushq $0x0
+ 119: 6a 1f pushq $0x1f
+ 11b: eb 03 jmp 120 <early_idt_handler_common>
+ 11d: cc int3
+ 11e: cc int3
+ 11f: cc int3
+
+Signed-off-by: Andy Lutomirski <luto@kernel.org>
+Acked-by: H. Peter Anvin <hpa@linux.intel.com>
+Cc: Binutils <binutils@sourceware.org>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: H.J. Lu <hjl.tools@gmail.com>
+Cc: Jan Beulich <JBeulich@suse.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Link: http://lkml.kernel.org/r/ac027962af343b0c599cbfcf50b945ad2ef3d7a8.1432336324.git.luto@kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/segment.h | 15 +++++++++++++--
+ arch/x86/kernel/head64.c | 2 +-
+ arch/x86/kernel/head_32.S | 33 ++++++++++++++++++---------------
+ arch/x86/kernel/head_64.S | 20 +++++++++++---------
+ 4 files changed, 43 insertions(+), 27 deletions(-)
+
+--- a/arch/x86/include/asm/segment.h
++++ b/arch/x86/include/asm/segment.h
+@@ -212,10 +212,21 @@
+ #define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8)
+
+ #ifdef __KERNEL__
++
++/*
++ * early_idt_handler_array is an array of entry points referenced in the
++ * early IDT. For simplicity, it's a real array with one entry point
++ * every nine bytes. That leaves room for an optional 'push $0' if the
++ * vector has no error code (two bytes), a 'push $vector_number' (two
++ * bytes), and a jump to the common entry code (up to five bytes).
++ */
++#define EARLY_IDT_HANDLER_SIZE 9
++
+ #ifndef __ASSEMBLY__
+-extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][2+2+5];
++
++extern const char early_idt_handler_array[NUM_EXCEPTION_VECTORS][EARLY_IDT_HANDLER_SIZE];
+ #ifdef CONFIG_TRACING
+-#define trace_early_idt_handlers early_idt_handlers
++# define trace_early_idt_handler_array early_idt_handler_array
+ #endif
+
+ /*
+--- a/arch/x86/kernel/head64.c
++++ b/arch/x86/kernel/head64.c
+@@ -162,7 +162,7 @@ asmlinkage void __init x86_64_start_kern
+ clear_bss();
+
+ for (i = 0; i < NUM_EXCEPTION_VECTORS; i++)
+- set_intr_gate(i, early_idt_handlers[i]);
++ set_intr_gate(i, early_idt_handler_array[i]);
+ load_idt((const struct desc_ptr *)&idt_descr);
+
+ copy_bootdata(__va(real_mode_data));
+--- a/arch/x86/kernel/head_32.S
++++ b/arch/x86/kernel/head_32.S
+@@ -477,21 +477,22 @@ is486:
+ __INIT
+ setup_once:
+ /*
+- * Set up a idt with 256 entries pointing to ignore_int,
+- * interrupt gates. It doesn't actually load idt - that needs
+- * to be done on each CPU. Interrupts are enabled elsewhere,
+- * when we can be relatively sure everything is ok.
++ * Set up a idt with 256 interrupt gates that push zero if there
++ * is no error code and then jump to early_idt_handler_common.
++ * It doesn't actually load the idt - that needs to be done on
++ * each CPU. Interrupts are enabled elsewhere, when we can be
++ * relatively sure everything is ok.
+ */
+
+ movl $idt_table,%edi
+- movl $early_idt_handlers,%eax
++ movl $early_idt_handler_array,%eax
+ movl $NUM_EXCEPTION_VECTORS,%ecx
+ 1:
+ movl %eax,(%edi)
+ movl %eax,4(%edi)
+ /* interrupt gate, dpl=0, present */
+ movl $(0x8E000000 + __KERNEL_CS),2(%edi)
+- addl $9,%eax
++ addl $EARLY_IDT_HANDLER_SIZE,%eax
+ addl $8,%edi
+ loop 1b
+
+@@ -523,26 +524,28 @@ setup_once:
+ andl $0,setup_once_ref /* Once is enough, thanks */
+ ret
+
+-ENTRY(early_idt_handlers)
++ENTRY(early_idt_handler_array)
+ # 36(%esp) %eflags
+ # 32(%esp) %cs
+ # 28(%esp) %eip
+ # 24(%rsp) error code
+ i = 0
+ .rept NUM_EXCEPTION_VECTORS
+- .if (EXCEPTION_ERRCODE_MASK >> i) & 1
+- ASM_NOP2
+- .else
++ .ifeq (EXCEPTION_ERRCODE_MASK >> i) & 1
+ pushl $0 # Dummy error code, to make stack frame uniform
+ .endif
+ pushl $i # 20(%esp) Vector number
+- jmp early_idt_handler
++ jmp early_idt_handler_common
+ i = i + 1
++ .fill early_idt_handler_array + i*EARLY_IDT_HANDLER_SIZE - ., 1, 0xcc
+ .endr
+-ENDPROC(early_idt_handlers)
++ENDPROC(early_idt_handler_array)
+
+- /* This is global to keep gas from relaxing the jumps */
+-ENTRY(early_idt_handler)
++early_idt_handler_common:
++ /*
++ * The stack is the hardware frame, an error code or zero, and the
++ * vector number.
++ */
+ cld
+
+ cmpl $2,(%esp) # X86_TRAP_NMI
+@@ -602,7 +605,7 @@ ex_entry:
+ is_nmi:
+ addl $8,%esp /* drop vector number and error code */
+ iret
+-ENDPROC(early_idt_handler)
++ENDPROC(early_idt_handler_common)
+
+ /* This is the default interrupt "handler" :-) */
+ ALIGN
+--- a/arch/x86/kernel/head_64.S
++++ b/arch/x86/kernel/head_64.S
+@@ -321,26 +321,28 @@ bad_address:
+ jmp bad_address
+
+ __INIT
+- .globl early_idt_handlers
+-early_idt_handlers:
++ENTRY(early_idt_handler_array)
+ # 104(%rsp) %rflags
+ # 96(%rsp) %cs
+ # 88(%rsp) %rip
+ # 80(%rsp) error code
+ i = 0
+ .rept NUM_EXCEPTION_VECTORS
+- .if (EXCEPTION_ERRCODE_MASK >> i) & 1
+- ASM_NOP2
+- .else
++ .ifeq (EXCEPTION_ERRCODE_MASK >> i) & 1
+ pushq $0 # Dummy error code, to make stack frame uniform
+ .endif
+ pushq $i # 72(%rsp) Vector number
+- jmp early_idt_handler
++ jmp early_idt_handler_common
+ i = i + 1
++ .fill early_idt_handler_array + i*EARLY_IDT_HANDLER_SIZE - ., 1, 0xcc
+ .endr
++ENDPROC(early_idt_handler_array)
+
+-/* This is global to keep gas from relaxing the jumps */
+-ENTRY(early_idt_handler)
++early_idt_handler_common:
++ /*
++ * The stack is the hardware frame, an error code or zero, and the
++ * vector number.
++ */
+ cld
+
+ cmpl $2,(%rsp) # X86_TRAP_NMI
+@@ -412,7 +414,7 @@ ENTRY(early_idt_handler)
+ is_nmi:
+ addq $16,%rsp # drop vector number and error code
+ INTERRUPT_RETURN
+-ENDPROC(early_idt_handler)
++ENDPROC(early_idt_handler_common)
+
+ __INITDATA
+