diff options
Diffstat (limited to 'arch/x86/kernel')
| -rw-r--r-- | arch/x86/kernel/idt.c | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/irq.c | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c index 8d4fd7509523..2d68768f74dc 100644 --- a/arch/x86/kernel/idt.c +++ b/arch/x86/kernel/idt.c @@ -150,6 +150,7 @@ static const __initconst struct idt_data apic_idts[] = { #ifdef CONFIG_X86_USER_INTERRUPTS INTG(UINTR_NOTIFICATION_VECTOR, asm_sysvec_uintr_spurious_interrupt), INTG(UINTR_KERNEL_VECTOR, asm_sysvec_uintr_kernel_notification), + INTG(UINTR_EVENT_VECTOR, asm_sysvec_uintr_event_notification), #endif # ifdef CONFIG_IRQ_WORK INTG(IRQ_WORK_VECTOR, asm_sysvec_irq_work), diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 22349f5c301b..cb38c8737602 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -193,6 +193,11 @@ int arch_show_interrupts(struct seq_file *p, int prec) for_each_online_cpu(j) seq_printf(p, "%10u ", irq_stats(j)->uintr_kernel_notifications); seq_puts(p, " User-interrupt kernel notification event\n"); + + seq_printf(p, "%*s: ", prec, "UKN"); + for_each_online_cpu(j) + seq_printf(p, "%10u ", irq_stats(j)->uintr_event_notifications); + seq_puts(p, " User-interrupt event notification\n"); #endif return 0; } @@ -374,6 +379,17 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_uintr_kernel_notification) uintr_wake_up_process(); } +/* + * Handler for UINTR_EVENT_VECTOR. + */ +DEFINE_IDTENTRY_SYSVEC(sysvec_uintr_event_notification) +{ + /* TODO: Add entry-exit tracepoints */ + ack_APIC_irq(); + inc_irq_stat(uintr_event_notifications); + + /* do event things */ +} #endif |
