| .. | .. |
|---|
| 4 | 4 | */ |
|---|
| 5 | 5 | #include <linux/cpu.h> |
|---|
| 6 | 6 | #include <linux/interrupt.h> |
|---|
| 7 | +#include <linux/irq_pipeline.h> |
|---|
| 7 | 8 | #include <linux/kernel_stat.h> |
|---|
| 8 | 9 | #include <linux/of.h> |
|---|
| 9 | 10 | #include <linux/seq_file.h> |
|---|
| .. | .. |
|---|
| 48 | 49 | * completely. |
|---|
| 49 | 50 | * But only ack when the APIC is enabled -AK |
|---|
| 50 | 51 | */ |
|---|
| 51 | | - ack_APIC_irq(); |
|---|
| 52 | + __ack_APIC_irq(); |
|---|
| 52 | 53 | } |
|---|
| 53 | 54 | |
|---|
| 54 | 55 | #define irq_stats(x) (&per_cpu(irq_stat, x)) |
|---|
| .. | .. |
|---|
| 235 | 236 | /* |
|---|
| 236 | 237 | * common_interrupt() handles all normal device IRQ's (the special SMP |
|---|
| 237 | 238 | * cross-CPU interrupts have their own entry points). |
|---|
| 239 | + * |
|---|
| 240 | + * Compiled out if CONFIG_IRQ_PIPELINE is enabled, replaced by |
|---|
| 241 | + * arch_handle_irq(). |
|---|
| 238 | 242 | */ |
|---|
| 239 | | -DEFINE_IDTENTRY_IRQ(common_interrupt) |
|---|
| 243 | +DEFINE_IDTENTRY_IRQ_PIPELINED(common_interrupt) |
|---|
| 240 | 244 | { |
|---|
| 241 | 245 | struct pt_regs *old_regs = set_irq_regs(regs); |
|---|
| 242 | 246 | struct irq_desc *desc; |
|---|
| .. | .. |
|---|
| 268 | 272 | /* |
|---|
| 269 | 273 | * Handler for X86_PLATFORM_IPI_VECTOR. |
|---|
| 270 | 274 | */ |
|---|
| 271 | | -DEFINE_IDTENTRY_SYSVEC(sysvec_x86_platform_ipi) |
|---|
| 275 | +DEFINE_IDTENTRY_SYSVEC_PIPELINED(X86_PLATFORM_IPI_VECTOR, |
|---|
| 276 | + sysvec_x86_platform_ipi) |
|---|
| 272 | 277 | { |
|---|
| 273 | 278 | struct pt_regs *old_regs = set_irq_regs(regs); |
|---|
| 274 | 279 | |
|---|
| .. | .. |
|---|
| 300 | 305 | /* |
|---|
| 301 | 306 | * Handler for POSTED_INTERRUPT_VECTOR. |
|---|
| 302 | 307 | */ |
|---|
| 303 | | -DEFINE_IDTENTRY_SYSVEC_SIMPLE(sysvec_kvm_posted_intr_ipi) |
|---|
| 308 | +DEFINE_IDTENTRY_SYSVEC_SIMPLE_PIPELINED(POSTED_INTR_VECTOR, |
|---|
| 309 | + sysvec_kvm_posted_intr_ipi) |
|---|
| 304 | 310 | { |
|---|
| 305 | 311 | ack_APIC_irq(); |
|---|
| 306 | 312 | inc_irq_stat(kvm_posted_intr_ipis); |
|---|
| .. | .. |
|---|
| 309 | 315 | /* |
|---|
| 310 | 316 | * Handler for POSTED_INTERRUPT_WAKEUP_VECTOR. |
|---|
| 311 | 317 | */ |
|---|
| 312 | | -DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_posted_intr_wakeup_ipi) |
|---|
| 318 | +DEFINE_IDTENTRY_SYSVEC_PIPELINED(POSTED_INTR_WAKEUP_VECTOR, |
|---|
| 319 | + sysvec_kvm_posted_intr_wakeup_ipi) |
|---|
| 313 | 320 | { |
|---|
| 314 | 321 | ack_APIC_irq(); |
|---|
| 315 | 322 | inc_irq_stat(kvm_posted_intr_wakeup_ipis); |
|---|
| .. | .. |
|---|
| 319 | 326 | /* |
|---|
| 320 | 327 | * Handler for POSTED_INTERRUPT_NESTED_VECTOR. |
|---|
| 321 | 328 | */ |
|---|
| 322 | | -DEFINE_IDTENTRY_SYSVEC_SIMPLE(sysvec_kvm_posted_intr_nested_ipi) |
|---|
| 329 | +DEFINE_IDTENTRY_SYSVEC_SIMPLE_PIPELINED(POSTED_INTR_NESTED_VECTOR, |
|---|
| 330 | + sysvec_kvm_posted_intr_nested_ipi) |
|---|
| 323 | 331 | { |
|---|
| 324 | 332 | ack_APIC_irq(); |
|---|
| 325 | 333 | inc_irq_stat(kvm_posted_intr_nested_ipis); |
|---|