]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
22da7b3d BG |
2 | #ifndef _ASM_X86_HARDIRQ_H |
3 | #define _ASM_X86_HARDIRQ_H | |
4 | ||
5 | #include <linux/threads.h> | |
22da7b3d BG |
6 | |
7 | typedef struct { | |
9aee5f8a | 8 | u16 __softirq_pending; |
45b575c0 NS |
9 | #if IS_ENABLED(CONFIG_KVM_INTEL) |
10 | u8 kvm_cpu_l1tf_flush_l1d; | |
11 | #endif | |
22da7b3d | 12 | unsigned int __nmi_count; /* arch dependent */ |
2de3a5f7 BG |
13 | #ifdef CONFIG_X86_LOCAL_APIC |
14 | unsigned int apic_timer_irqs; /* arch dependent */ | |
15 | unsigned int irq_spurious_count; | |
b49d7d87 | 16 | unsigned int icr_read_retry_count; |
d78f2664 YZ |
17 | #endif |
18 | #ifdef CONFIG_HAVE_KVM | |
19 | unsigned int kvm_posted_intr_ipis; | |
f6b3c72c | 20 | unsigned int kvm_posted_intr_wakeup_ipis; |
210f84b0 | 21 | unsigned int kvm_posted_intr_nested_ipis; |
2de3a5f7 | 22 | #endif |
4a4de9c7 | 23 | unsigned int x86_platform_ipis; /* arch dependent */ |
bfe2a3c3 | 24 | unsigned int apic_perf_irqs; |
e360adbe | 25 | unsigned int apic_irq_work_irqs; |
2de3a5f7 | 26 | #ifdef CONFIG_SMP |
22da7b3d BG |
27 | unsigned int irq_resched_count; |
28 | unsigned int irq_call_count; | |
2de3a5f7 | 29 | #endif |
ce4a4e56 | 30 | unsigned int irq_tlb_count; |
0444c9bd | 31 | #ifdef CONFIG_X86_THERMAL_VECTOR |
22da7b3d | 32 | unsigned int irq_thermal_count; |
0444c9bd JB |
33 | #endif |
34 | #ifdef CONFIG_X86_MCE_THRESHOLD | |
22da7b3d | 35 | unsigned int irq_threshold_count; |
2de3a5f7 | 36 | #endif |
24fd78a8 AG |
37 | #ifdef CONFIG_X86_MCE_AMD |
38 | unsigned int irq_deferred_error_count; | |
39 | #endif | |
ecca2502 | 40 | #ifdef CONFIG_X86_HV_CALLBACK_VECTOR |
929320e4 TG |
41 | unsigned int irq_hv_callback_count; |
42 | #endif | |
51d4e5da VK |
43 | #if IS_ENABLED(CONFIG_HYPERV) |
44 | unsigned int irq_hv_reenlightenment_count; | |
248e742a | 45 | unsigned int hyperv_stimer0_count; |
51d4e5da | 46 | #endif |
22da7b3d BG |
47 | } ____cacheline_aligned irq_cpustat_t; |
48 | ||
9b8de747 | 49 | DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); |
22da7b3d | 50 | |
22da7b3d BG |
51 | #define __ARCH_IRQ_STAT |
52 | ||
c6ae41e7 | 53 | #define inc_irq_stat(member) this_cpu_inc(irq_stat.member) |
22da7b3d | 54 | |
22da7b3d | 55 | extern void ack_bad_irq(unsigned int irq); |
a2eddfa9 JB |
56 | |
57 | extern u64 arch_irq_stat_cpu(unsigned int cpu); | |
58 | #define arch_irq_stat_cpu arch_irq_stat_cpu | |
59 | ||
60 | extern u64 arch_irq_stat(void); | |
61 | #define arch_irq_stat arch_irq_stat | |
22da7b3d | 62 | |
45b575c0 NS |
63 | |
64 | #if IS_ENABLED(CONFIG_KVM_INTEL) | |
65 | static inline void kvm_set_cpu_l1tf_flush_l1d(void) | |
66 | { | |
67 | __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 1); | |
68 | } | |
69 | ||
3ebccdf3 | 70 | static __always_inline void kvm_clear_cpu_l1tf_flush_l1d(void) |
45b575c0 NS |
71 | { |
72 | __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 0); | |
73 | } | |
74 | ||
3ebccdf3 | 75 | static __always_inline bool kvm_get_cpu_l1tf_flush_l1d(void) |
45b575c0 NS |
76 | { |
77 | return __this_cpu_read(irq_stat.kvm_cpu_l1tf_flush_l1d); | |
78 | } | |
79 | #else /* !IS_ENABLED(CONFIG_KVM_INTEL) */ | |
80 | static inline void kvm_set_cpu_l1tf_flush_l1d(void) { } | |
81 | #endif /* IS_ENABLED(CONFIG_KVM_INTEL) */ | |
82 | ||
22da7b3d | 83 | #endif /* _ASM_X86_HARDIRQ_H */ |