Skip to contentSkip to conversation

irq consolidation, new attempt (alpha part)

PATCH New Andrey Panin 1 participant 1 message Jun 30, 2003 Alpha port

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 irq consolidation, new attempt (alpha part)

Hi all,

alpha specific part of irq handling code consolidation patchset. Patch is against 2.5.73. Compiles, but untested.

Best regards.

Signature · 2 lines
Andrey Panin		| Linux and UNIX system administrator
[email protected]		| PGP key: wwwkeys.pgp.net
arch/alpha/Kconfig +4 -0
diff --minimal -urN -X /usr/share/dontdiff linux-2.5.73.vanilla/arch/alpha/Kconfig linux-2.5.73/arch/alpha/Kconfig
@@ -15,6 +15,10 @@
 	bool
 	default y
 
+config GENERIC_IRQ
+	bool
+	default y
+
 config UID16
 	bool
 
arch/alpha/kernel/irq_alpha.c +2 -2
diff --minimal -urN -X /usr/share/dontdiff linux-2.5.73.vanilla/arch/alpha/kernel/irq_alpha.c linux-2.5.73/arch/alpha/kernel/irq_alpha.c
@@ -26,7 +26,7 @@
 static void
 dummy_perf(unsigned long vector, struct pt_regs *regs)
 {
-	irq_err_count++;
+	atomic_inc(&irq_err_count);
 	printk(KERN_CRIT "Performance counter interrupt!\n");
 }
 
@@ -46,7 +46,7 @@
 		handle_ipi(regs);
 		return;
 #else
-		irq_err_count++;
+		atomic_inc(&irq_err_count);
 		printk(KERN_CRIT "Interprocessor interrupt? "
 		       "You must be kidding!\n");
 #endif
arch/alpha/kernel/irq.c +18 -642

725 lines not on this page · raw message

include/asm-alpha/hw_irq.h +35 -1
diff --minimal -urN -X /usr/share/dontdiff linux-2.5.73.vanilla/include/asm-alpha/hw_irq.h linux-2.5.73/include/asm-alpha/hw_irq.h
@@ -2,10 +2,15 @@
 #define _ALPHA_HW_IRQ_H
 
 #include <linux/config.h>
+#include <asm/machvec.h>
 
 static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i) {}
 
-extern volatile unsigned long irq_err_count;
+extern atomic_t irq_err_count;
+
+extern void select_smp_affinity(int irq);
+
+extern irq_desc_t irq_desc[NR_IRQS];
 
 #ifdef CONFIG_ALPHA_GENERIC
 #define ACTUAL_NR_IRQS	alpha_mv.nr_irqs
@@ -13,4 +18,33 @@
 #define ACTUAL_NR_IRQS	NR_IRQS
 #endif
 
+#define arch_ack_bad_irq(irq) do { } while (0)
+
+/* Return a pointer to the irq descriptor for IRQ.  */
+#define irq_desc(irq) (irq_desc + (irq))
+
+/* Check irq number */
+#define irq_valid(irq) ((irq) < ACTUAL_NR_IRQS)
+
+#define for_each_irq(i) for (i = 0; i < NR_IRQS; i++) \
+	if (!irq_valid(i)) \
+		continue; \
+	else
+
+/* Arch specific hook for setup_irq() */
+#ifdef CONFIG_SMP
+#define arch_setup_irq(irq, desc, irqaction) select_smp_affinity(irq)
+#else
+#define arch_setup_irq(irq, desc, irqaction) do { } while (0)
+#endif
+
+/* Used in setup_irq() */
+#define ARCH_NONSHARED_IRQ_MASK ~IRQ_DISABLED
+
+#define ARCH_AFFINITY_WIDTH	16
+
+#define ARCH_DEFAULT_IRQ_AFFINITY	~0UL
+
+#define arch_can_create_irq_proc() (ACTUAL_NR_IRQS < (PROC_NDYNAMIC / 4))
+
 #endif