~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/include/asm/hardirq.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _ASM_X86_HARDIRQ_H
  3 #define _ASM_X86_HARDIRQ_H
  4 
  5 #include <linux/threads.h>
  6 #include <asm/current.h>
  7 
  8 typedef struct {
  9 #if IS_ENABLED(CONFIG_KVM_INTEL)
 10         u8           kvm_cpu_l1tf_flush_l1d;
 11 #endif
 12         unsigned int __nmi_count;       /* arch dependent */
 13 #ifdef CONFIG_X86_LOCAL_APIC
 14         unsigned int apic_timer_irqs;   /* arch dependent */
 15         unsigned int irq_spurious_count;
 16         unsigned int icr_read_retry_count;
 17 #endif
 18 #if IS_ENABLED(CONFIG_KVM)
 19         unsigned int kvm_posted_intr_ipis;
 20         unsigned int kvm_posted_intr_wakeup_ipis;
 21         unsigned int kvm_posted_intr_nested_ipis;
 22 #endif
 23         unsigned int x86_platform_ipis; /* arch dependent */
 24         unsigned int apic_perf_irqs;
 25         unsigned int apic_irq_work_irqs;
 26 #ifdef CONFIG_SMP
 27         unsigned int irq_resched_count;
 28         unsigned int irq_call_count;
 29 #endif
 30         unsigned int irq_tlb_count;
 31 #ifdef CONFIG_X86_THERMAL_VECTOR
 32         unsigned int irq_thermal_count;
 33 #endif
 34 #ifdef CONFIG_X86_MCE_THRESHOLD
 35         unsigned int irq_threshold_count;
 36 #endif
 37 #ifdef CONFIG_X86_MCE_AMD
 38         unsigned int irq_deferred_error_count;
 39 #endif
 40 #ifdef CONFIG_X86_HV_CALLBACK_VECTOR
 41         unsigned int irq_hv_callback_count;
 42 #endif
 43 #if IS_ENABLED(CONFIG_HYPERV)
 44         unsigned int irq_hv_reenlightenment_count;
 45         unsigned int hyperv_stimer0_count;
 46 #endif
 47 #ifdef CONFIG_X86_POSTED_MSI
 48         unsigned int posted_msi_notification_count;
 49 #endif
 50 } ____cacheline_aligned irq_cpustat_t;
 51 
 52 DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
 53 
 54 #ifdef CONFIG_X86_POSTED_MSI
 55 DECLARE_PER_CPU_ALIGNED(struct pi_desc, posted_msi_pi_desc);
 56 #endif
 57 #define __ARCH_IRQ_STAT
 58 
 59 #define inc_irq_stat(member)    this_cpu_inc(irq_stat.member)
 60 
 61 extern void ack_bad_irq(unsigned int irq);
 62 
 63 extern u64 arch_irq_stat_cpu(unsigned int cpu);
 64 #define arch_irq_stat_cpu       arch_irq_stat_cpu
 65 
 66 extern u64 arch_irq_stat(void);
 67 #define arch_irq_stat           arch_irq_stat
 68 
 69 #define local_softirq_pending_ref       pcpu_hot.softirq_pending
 70 
 71 #if IS_ENABLED(CONFIG_KVM_INTEL)
 72 /*
 73  * This function is called from noinstr interrupt contexts
 74  * and must be inlined to not get instrumentation.
 75  */
 76 static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void)
 77 {
 78         __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 1);
 79 }
 80 
 81 static __always_inline void kvm_clear_cpu_l1tf_flush_l1d(void)
 82 {
 83         __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 0);
 84 }
 85 
 86 static __always_inline bool kvm_get_cpu_l1tf_flush_l1d(void)
 87 {
 88         return __this_cpu_read(irq_stat.kvm_cpu_l1tf_flush_l1d);
 89 }
 90 #else /* !IS_ENABLED(CONFIG_KVM_INTEL) */
 91 static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void) { }
 92 #endif /* IS_ENABLED(CONFIG_KVM_INTEL) */
 93 
 94 #endif /* _ASM_X86_HARDIRQ_H */
 95 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php