d7cf0edb8f
The per-processor interrupt request register and current processor priority register are only accessed on the current cpu. In fact the hypervisor doesn't even let us choose which cpu's registers to access. The only function to use cpu twice is xics_migrate_irqs_away, not a fast path. But we can cache the result of get_hard_processor_id() instead of calling get_hard_smp_processor_id(cpu) in a loop across the call to rtas. Years ago the irq code passed smp_processor_id into get_irq, I thought we might initialize the CPPR third party at boot as an extra measure of saftey, and it made the code symmetric with the qirr (queued interrupt for software generated interrupts), but now it is just extra and sometimes unneeded work to pass it down. Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
33 lines
955 B
C
33 lines
955 B
C
/*
|
|
* arch/powerpc/platforms/pseries/xics.h
|
|
*
|
|
* Copyright 2000 IBM Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _POWERPC_KERNEL_XICS_H
|
|
#define _POWERPC_KERNEL_XICS_H
|
|
|
|
#include <linux/cache.h>
|
|
|
|
extern void xics_init_IRQ(void);
|
|
extern void xics_setup_cpu(void);
|
|
extern void xics_teardown_cpu(int secondary);
|
|
extern void xics_cause_IPI(int cpu);
|
|
extern void xics_request_IPIs(void);
|
|
extern void xics_migrate_irqs_away(void);
|
|
|
|
struct xics_ipi_struct {
|
|
volatile unsigned long value;
|
|
} ____cacheline_aligned;
|
|
|
|
extern struct xics_ipi_struct xics_ipi_message[NR_CPUS] __cacheline_aligned;
|
|
|
|
struct irq_desc;
|
|
extern void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc);
|
|
|
|
#endif /* _POWERPC_KERNEL_XICS_H */
|