Loading arch/sparc/kernel/sun4d_irq.c +16 −26 Original line number Diff line number Diff line Loading @@ -60,9 +60,7 @@ static struct sun4d_timer_regs __iomem *sun4d_timers; #define MAX_STATIC_ALLOC 4 extern struct irqaction static_irqaction[MAX_STATIC_ALLOC]; extern int static_irq_count; #ifdef CONFIG_SMP static unsigned char sbus_tid[32]; #endif static struct irqaction *irq_action[NR_IRQS]; extern spinlock_t irq_action_lock; Loading @@ -81,9 +79,9 @@ static int sbus_to_pil[] = { }; static int nsbi; #ifdef CONFIG_SMP /* Exported for sun4d_smp.c */ DEFINE_SPINLOCK(sun4d_imsk_lock); #endif int show_sun4d_interrupts(struct seq_file *p, void *v) { Loading Loading @@ -349,36 +347,28 @@ int sun4d_request_irq(unsigned int irq, static void sun4d_disable_irq(unsigned int irq) { #ifdef CONFIG_SMP int tid = sbus_tid[(irq >> 5) - 1]; unsigned long flags; #endif if (irq < NR_IRQS) return; #ifdef CONFIG_SMP if (irq < NR_IRQS) return; spin_lock_irqsave(&sun4d_imsk_lock, flags); cc_set_imsk_other(tid, cc_get_imsk_other(tid) | (1 << sbus_to_pil[(irq >> 2) & 7])); spin_unlock_irqrestore(&sun4d_imsk_lock, flags); #else cc_set_imsk(cc_get_imsk() | (1 << sbus_to_pil[(irq >> 2) & 7])); #endif } static void sun4d_enable_irq(unsigned int irq) { #ifdef CONFIG_SMP int tid = sbus_tid[(irq >> 5) - 1]; unsigned long flags; #endif if (irq < NR_IRQS) return; #ifdef CONFIG_SMP if (irq < NR_IRQS) return; spin_lock_irqsave(&sun4d_imsk_lock, flags); cc_set_imsk_other(tid, cc_get_imsk_other(tid) & ~(1 << sbus_to_pil[(irq >> 2) & 7])); spin_unlock_irqrestore(&sun4d_imsk_lock, flags); #else cc_set_imsk(cc_get_imsk() & ~(1 << sbus_to_pil[(irq >> 2) & 7])); #endif } #ifdef CONFIG_SMP Loading Loading @@ -557,6 +547,11 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn) void __init sun4d_init_sbi_irq(void) { struct device_node *dp; int target_cpu = 0; #ifdef CONFIG_SMP target_cpu = boot_cpu_id; #endif nsbi = 0; for_each_node_by_name(dp, "sbi") Loading @@ -571,14 +566,9 @@ void __init sun4d_init_sbi_irq(void) int board = of_getintprop_default(dp, "board#", 0); unsigned int mask; #ifdef CONFIG_SMP { extern unsigned char boot_cpu_id; set_sbi_tid(devid, target_cpu << 3); sbus_tid[board] = target_cpu; set_sbi_tid(devid, boot_cpu_id << 3); sbus_tid[board] = boot_cpu_id; } #endif /* Get rid of pending irqs from PROM */ mask = acquire_sbi(devid, 0xffffffff); if (mask) { Loading Loading
arch/sparc/kernel/sun4d_irq.c +16 −26 Original line number Diff line number Diff line Loading @@ -60,9 +60,7 @@ static struct sun4d_timer_regs __iomem *sun4d_timers; #define MAX_STATIC_ALLOC 4 extern struct irqaction static_irqaction[MAX_STATIC_ALLOC]; extern int static_irq_count; #ifdef CONFIG_SMP static unsigned char sbus_tid[32]; #endif static struct irqaction *irq_action[NR_IRQS]; extern spinlock_t irq_action_lock; Loading @@ -81,9 +79,9 @@ static int sbus_to_pil[] = { }; static int nsbi; #ifdef CONFIG_SMP /* Exported for sun4d_smp.c */ DEFINE_SPINLOCK(sun4d_imsk_lock); #endif int show_sun4d_interrupts(struct seq_file *p, void *v) { Loading Loading @@ -349,36 +347,28 @@ int sun4d_request_irq(unsigned int irq, static void sun4d_disable_irq(unsigned int irq) { #ifdef CONFIG_SMP int tid = sbus_tid[(irq >> 5) - 1]; unsigned long flags; #endif if (irq < NR_IRQS) return; #ifdef CONFIG_SMP if (irq < NR_IRQS) return; spin_lock_irqsave(&sun4d_imsk_lock, flags); cc_set_imsk_other(tid, cc_get_imsk_other(tid) | (1 << sbus_to_pil[(irq >> 2) & 7])); spin_unlock_irqrestore(&sun4d_imsk_lock, flags); #else cc_set_imsk(cc_get_imsk() | (1 << sbus_to_pil[(irq >> 2) & 7])); #endif } static void sun4d_enable_irq(unsigned int irq) { #ifdef CONFIG_SMP int tid = sbus_tid[(irq >> 5) - 1]; unsigned long flags; #endif if (irq < NR_IRQS) return; #ifdef CONFIG_SMP if (irq < NR_IRQS) return; spin_lock_irqsave(&sun4d_imsk_lock, flags); cc_set_imsk_other(tid, cc_get_imsk_other(tid) & ~(1 << sbus_to_pil[(irq >> 2) & 7])); spin_unlock_irqrestore(&sun4d_imsk_lock, flags); #else cc_set_imsk(cc_get_imsk() & ~(1 << sbus_to_pil[(irq >> 2) & 7])); #endif } #ifdef CONFIG_SMP Loading Loading @@ -557,6 +547,11 @@ static void __init sun4d_init_timers(irq_handler_t counter_fn) void __init sun4d_init_sbi_irq(void) { struct device_node *dp; int target_cpu = 0; #ifdef CONFIG_SMP target_cpu = boot_cpu_id; #endif nsbi = 0; for_each_node_by_name(dp, "sbi") Loading @@ -571,14 +566,9 @@ void __init sun4d_init_sbi_irq(void) int board = of_getintprop_default(dp, "board#", 0); unsigned int mask; #ifdef CONFIG_SMP { extern unsigned char boot_cpu_id; set_sbi_tid(devid, target_cpu << 3); sbus_tid[board] = target_cpu; set_sbi_tid(devid, boot_cpu_id << 3); sbus_tid[board] = boot_cpu_id; } #endif /* Get rid of pending irqs from PROM */ mask = acquire_sbi(devid, 0xffffffff); if (mask) { Loading