Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/kernel/dbell.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* Author: Kumar Gala <[email protected]>
4
*
5
* Copyright 2009 Freescale Semiconductor Inc.
6
*/
7
8
#include <linux/stddef.h>
9
#include <linux/kernel.h>
10
#include <linux/smp.h>
11
#include <linux/threads.h>
12
#include <linux/hardirq.h>
13
14
#include <asm/dbell.h>
15
#include <asm/interrupt.h>
16
#include <asm/irq_regs.h>
17
#include <asm/kvm_ppc.h>
18
#include <asm/trace.h>
19
20
#ifdef CONFIG_SMP
21
22
DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
23
{
24
struct pt_regs *old_regs = set_irq_regs(regs);
25
26
trace_doorbell_entry(regs);
27
28
ppc_msgsync();
29
30
if (should_hard_irq_enable(regs))
31
do_hard_irq_enable();
32
33
kvmppc_clear_host_ipi(smp_processor_id());
34
__this_cpu_inc(irq_stat.doorbell_irqs);
35
36
smp_ipi_demux_relaxed(); /* already performed the barrier */
37
38
trace_doorbell_exit(regs);
39
40
set_irq_regs(old_regs);
41
}
42
#else /* CONFIG_SMP */
43
DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
44
{
45
printk(KERN_WARNING "Received doorbell on non-smp system\n");
46
}
47
#endif /* CONFIG_SMP */
48
49