Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752831AbbG2Fmb (ORCPT ); Wed, 29 Jul 2015 01:42:31 -0400 Received: from mail-yk0-f176.google.com ([209.85.160.176]:36586 "EHLO mail-yk0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752635AbbG2Flj (ORCPT ); Wed, 29 Jul 2015 01:41:39 -0400 From: Brian Gerst To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Ingo Molnar , "H. Peter Anvin" , Denys Vlasenko , Andy Lutomirski , Linus Torvalds Subject: [PATCH 5/8] x86/vm86: Add a separate config option for hardware IRQ handling Date: Wed, 29 Jul 2015 01:41:20 -0400 Message-Id: <1438148483-11932-6-git-send-email-brgerst@gmail.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1438148483-11932-1-git-send-email-brgerst@gmail.com> References: <1438148483-11932-1-git-send-email-brgerst@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3708 Lines: 136 Allow disabling hardware interrupt support for vm86. Signed-off-by: Brian Gerst --- arch/x86/Kconfig | 8 ++++++++ arch/x86/include/asm/irq_vectors.h | 10 ---------- arch/x86/include/asm/vm86.h | 20 ++++++++++++++++++-- arch/x86/kernel/vm86_32.c | 12 ++++++++++-- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index cbd2d62..7c7ec31 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1067,6 +1067,14 @@ config VM86 bool default X86_LEGACY_VM86 +config VM86_INTERRUPTS + bool "Enable VM86 interrupt support" + default y + depends on VM86 + ---help--- + This option allows VM86 programs to request interrupts for + real mode hardware drivers. + config X86_16BIT bool "Enable support for 16-bit segments" if EXPERT default y diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index 4c2d2eb..6ca9fd6 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h @@ -117,16 +117,6 @@ #define FPU_IRQ 13 -#define FIRST_VM86_IRQ 3 -#define LAST_VM86_IRQ 15 - -#ifndef __ASSEMBLY__ -static inline int invalid_vm86_irq(int irq) -{ - return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ; -} -#endif - /* * Size the maximum number of interrupts. * diff --git a/arch/x86/include/asm/vm86.h b/arch/x86/include/asm/vm86.h index dd45aa1..05f6394 100644 --- a/arch/x86/include/asm/vm86.h +++ b/arch/x86/include/asm/vm86.h @@ -49,7 +49,6 @@ int handle_vm86_trap(struct kernel_vm86_regs *, long, int); void save_v86_state(struct kernel_vm86_regs *, int); struct task_struct; -void release_vm86_irqs(struct task_struct *); #define free_vm86(t) do { \ struct thread_struct *__t = (t); \ @@ -62,7 +61,6 @@ void release_vm86_irqs(struct task_struct *); #else #define handle_vm86_fault(a, b) -#define release_vm86_irqs(a) static inline int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c) { @@ -75,4 +73,22 @@ static inline void save_v86_state(struct kernel_vm86_regs *, int) { } #endif /* CONFIG_VM86 */ +#ifdef CONFIG_VM86_INTERRUPTS + +#define FIRST_VM86_IRQ 3 +#define LAST_VM86_IRQ 15 + +static inline int invalid_vm86_irq(int irq) +{ + return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ; +} + +void release_vm86_irqs(struct task_struct *); + +#else /* CONFIG_VM86_INTERRUPTS */ + +static inline void release_vm86_irqs(struct task_struct *tsk) { } + +#endif /* CONFIG_VM86_INTERRUPTS */ + #endif /* _ASM_X86_VM86_H */ diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c index ffe98ec..9cdd33c 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c @@ -189,8 +189,15 @@ out: } - +#ifdef CONFIG_VM86_INTERRUPTS static int do_vm86_irq_handling(int subfunction, int irqnumber); +#else +static inline int do_vm86_irq_handling(int subfunction, int irqnumber) +{ + return -EINVAL; +} +#endif + static long do_sys_vm86(struct vm86plus_struct __user *v86, bool plus); SYSCALL_DEFINE1(vm86old, struct vm86_struct __user *, v86) @@ -713,6 +720,7 @@ simulate_sigsegv: save_v86_state(regs, VM86_UNKNOWN); } +#ifdef CONFIG_VM86_INTERRUPTS /* ---------------- vm86 special IRQ passing stuff ----------------- */ #define VM86_IRQNAME "vm86irq" @@ -828,4 +836,4 @@ static int do_vm86_irq_handling(int subfunction, int irqnumber) } return -EINVAL; } - +#endif -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/