mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08:00
caab277b1d
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not see http www gnu org licenses extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 503 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Enrico Weigelt <info@metux.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190602204653.811534538@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) 2012 ARM Ltd.
|
|
*/
|
|
#ifndef __ASM_HARDIRQ_H
|
|
#define __ASM_HARDIRQ_H
|
|
|
|
#include <linux/cache.h>
|
|
#include <linux/percpu.h>
|
|
#include <linux/threads.h>
|
|
#include <asm/barrier.h>
|
|
#include <asm/irq.h>
|
|
#include <asm/kvm_arm.h>
|
|
#include <asm/sysreg.h>
|
|
|
|
#define NR_IPI 7
|
|
|
|
typedef struct {
|
|
unsigned int __softirq_pending;
|
|
unsigned int ipi_irqs[NR_IPI];
|
|
} ____cacheline_aligned irq_cpustat_t;
|
|
|
|
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
|
|
|
|
#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++
|
|
#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member)
|
|
|
|
u64 smp_irq_stat_cpu(unsigned int cpu);
|
|
#define arch_irq_stat_cpu smp_irq_stat_cpu
|
|
|
|
#define __ARCH_IRQ_EXIT_IRQS_DISABLED 1
|
|
|
|
struct nmi_ctx {
|
|
u64 hcr;
|
|
};
|
|
|
|
DECLARE_PER_CPU(struct nmi_ctx, nmi_contexts);
|
|
|
|
#define arch_nmi_enter() \
|
|
do { \
|
|
if (is_kernel_in_hyp_mode()) { \
|
|
struct nmi_ctx *nmi_ctx = this_cpu_ptr(&nmi_contexts); \
|
|
nmi_ctx->hcr = read_sysreg(hcr_el2); \
|
|
if (!(nmi_ctx->hcr & HCR_TGE)) { \
|
|
write_sysreg(nmi_ctx->hcr | HCR_TGE, hcr_el2); \
|
|
isb(); \
|
|
} \
|
|
} \
|
|
} while (0)
|
|
|
|
#define arch_nmi_exit() \
|
|
do { \
|
|
if (is_kernel_in_hyp_mode()) { \
|
|
struct nmi_ctx *nmi_ctx = this_cpu_ptr(&nmi_contexts); \
|
|
if (!(nmi_ctx->hcr & HCR_TGE)) \
|
|
write_sysreg(nmi_ctx->hcr, hcr_el2); \
|
|
} \
|
|
} while (0)
|
|
|
|
static inline void ack_bad_irq(unsigned int irq)
|
|
{
|
|
extern unsigned long irq_err_count;
|
|
irq_err_count++;
|
|
}
|
|
|
|
#endif /* __ASM_HARDIRQ_H */
|