cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dbell.c (1002B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Author: Kumar Gala <galak@kernel.crashing.org>
      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
     22DEFINE_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())
     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 */
     43DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
     44{
     45	printk(KERN_WARNING "Received doorbell on non-smp system\n");
     46}
     47#endif /* CONFIG_SMP */