diff -puN arch/sparc/include/asm/hardirq_32.h~sparc32-convert-to-asm-generic-hardirqh arch/sparc/include/asm/hardirq_32.h
--- a/arch/sparc/include/asm/hardirq_32.h~sparc32-convert-to-asm-generic-hardirqh
+++ a/arch/sparc/include/asm/hardirq_32.h
@@ -7,17 +7,7 @@
 #ifndef __SPARC_HARDIRQ_H
 #define __SPARC_HARDIRQ_H
 
-#include <linux/threads.h>
-#include <linux/spinlock.h>
-#include <linux/cache.h>
-
-/* entry.S is sensitive to the offsets of these fields */ /* XXX P3 Is it? */
-typedef struct {
-	unsigned int __softirq_pending;
-} ____cacheline_aligned irq_cpustat_t;
-
-#include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */
-
 #define HARDIRQ_BITS    8
+#include <asm-generic/hardirq.h>
 
 #endif /* __SPARC_HARDIRQ_H */
diff -puN arch/sparc/include/asm/irq_32.h~sparc32-convert-to-asm-generic-hardirqh arch/sparc/include/asm/irq_32.h
--- a/arch/sparc/include/asm/irq_32.h~sparc32-convert-to-asm-generic-hardirqh
+++ a/arch/sparc/include/asm/irq_32.h
@@ -6,10 +6,10 @@
 #ifndef _SPARC_IRQ_H
 #define _SPARC_IRQ_H
 
-#include <linux/interrupt.h>
-
 #define NR_IRQS    16
 
+#include <linux/interrupt.h>
+
 #define irq_canonicalize(irq)	(irq)
 
 extern void __init init_IRQ(void);
