d6d048192b
The current sparc32 SMP IPI generation is implemented the cross call function. The cross call function uses IRQ15 the NMI, this is has the effect that IPIs will interrupt IRQ critical areas and hang the system. Typically on/after spin_lock_irqsave calls can be aborted. The cross call functionality must still exist to flush cache/TLBS. This patch provides CPU models a custom way to implement generation of IPIs on the generic code's request. The typical approach is to generate an IRQ for each IPI case. After this patch each sparc32 SMP CPU model needs to implement IPIs in order to function properly. Signed-off-by: Daniel Hellstrom <daniel@gaisler.com> Signed-off-by: David S. Miller <davem@davemloft.net>
33 lines
713 B
C
33 lines
713 B
C
/* cpudata.h: Per-cpu parameters.
|
|
*
|
|
* Copyright (C) 2004 Keith M Wesolowski (wesolows@foobazco.org)
|
|
*
|
|
* Based on include/asm/cpudata.h and Linux 2.4 smp.h
|
|
* both (C) David S. Miller.
|
|
*/
|
|
|
|
#ifndef _SPARC_CPUDATA_H
|
|
#define _SPARC_CPUDATA_H
|
|
|
|
#include <linux/percpu.h>
|
|
|
|
typedef struct {
|
|
unsigned long udelay_val;
|
|
unsigned long clock_tick;
|
|
unsigned int multiplier;
|
|
unsigned int counter;
|
|
#ifdef CONFIG_SMP
|
|
unsigned int irq_resched_count;
|
|
unsigned int irq_call_count;
|
|
#endif
|
|
int prom_node;
|
|
int mid;
|
|
int next;
|
|
} cpuinfo_sparc;
|
|
|
|
DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data);
|
|
#define cpu_data(__cpu) per_cpu(__cpu_data, (__cpu))
|
|
#define local_cpu_data() __get_cpu_var(__cpu_data)
|
|
|
|
#endif /* _SPARC_CPUDATA_H */
|