[parisc-linux-cvs] proper fix for calling do_softirq

John Marvin jsm@udlkern.fc.hp.com
Fri, 6 Jul 2001 18:25:47 -0600 (MDT)


--- arch/parisc/kernel/time.c.old	Fri Jul  6 17:28:50 2001
+++ arch/parisc/kernel/time.c	Fri Jul  6 17:29:07 2001
@@ -75,9 +75,6 @@ void timer_interrupt(int irq, void *dev_
 #ifdef CONFIG_CHASSIS_LCD_LED
 	led_interrupt_func();
 #endif
-
-	if (softirq_pending(smp_processor_id()))
-		do_softirq();
 }
 
 /*** converted from ia64 ***/
--- arch/parisc/kernel/irq.c.old	Fri Jul  6 17:29:14 2001
+++ arch/parisc/kernel/irq.c	Fri Jul  6 17:29:34 2001
@@ -383,9 +383,6 @@ void do_irq(struct irqaction *action, in
 	}
 
 	irq_exit(cpu, irq);
-
-	if (softirq_pending(cpu))
-		do_softirq();
 }
 
 
--- arch/parisc/kernel/entry.S.old	Fri Jul  6 17:54:20 2001
+++ arch/parisc/kernel/entry.S	Fri Jul  6 18:14:05 2001
@@ -683,7 +683,7 @@ intr_return:
 	/* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) amount
 	** irq_stat[] is defined using ____cacheline_aligned.
 	*/
-#if __LP64__
+#ifdef __LP64__
 	shld	%r1, 6, %r20
 #else
 	shlw	%r1, 5, %r20
@@ -691,9 +691,7 @@ intr_return:
 	add     %r19,%r20,%r19	/* now have &irq_stat[smp_processor_id()] */
 #endif /* CONFIG_SMP */
 
-	ldw     IRQSTAT_SI_ACTIVE(%r19),%r20	/* hardirq.h: unsigned int */
-	ldw     IRQSTAT_SI_MASK(%r19),%r19	/* hardirq.h: unsigned int */
-	and     %r19,%r20,%r20
+	LDREG   IRQSTAT_SIRQ_PEND(%r19),%r20    /* hardirq.h: unsigned long */
 	cmpib,<>,n 0,%r20,intr_do_softirq /* forward */
 
 intr_check_resched:
@@ -2075,16 +2073,15 @@ syscall_check_bh:
 	ldw     TASK_PROCESSOR-TASK_SZ_ALGN-FRAME_SIZE(%r30),%r26 /* cpu # */
 
 	/* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) bits */
-#if __LP64__
+#ifdef __LP64__
 	shld	%r26, 6, %r20
 #else
 	shlw	%r26, 5, %r20
 #endif
 	add     %r19,%r20,%r19	/* now have &irq_stat[smp_processor_id()] */
 #endif /* CONFIG_SMP */
-	ldw     IRQSTAT_SI_ACTIVE(%r19),%r20	/* hardirq.h: unsigned int */
-	ldw     IRQSTAT_SI_MASK(%r19),%r19	/* hardirq.h: unsigned int */
-	and     %r19,%r20,%r20
+
+	LDREG   IRQSTAT_SIRQ_PEND(%r19),%r20    /* hardirq.h: unsigned long */
 	cmpib,<>,n 0,%r20,syscall_do_softirq /* forward */
 
 syscall_check_resched:
--- arch/parisc/tools/offset.c.old	Fri Jul  6 17:30:01 2001
+++ arch/parisc/tools/offset.c	Fri Jul  6 17:31:20 2001
@@ -248,8 +248,7 @@ void output_task_defines(void)
 void output_irq_stat_defines(void)
 {
 	text("/* PARISC irq_cpustat_t offsets. */");
-	offset("#define IRQSTAT_SI_ACTIVE  ", irq_cpustat_t, __softirq_active);
-	offset("#define IRQSTAT_SI_MASK    ", irq_cpustat_t, __softirq_mask);
+	offset("#define IRQSTAT_SIRQ_PEND  ", irq_cpustat_t, __softirq_pending);
 	size  ("#define IRQSTAT_SZ         ", irq_cpustat_t);
 	linefeed;
 }
--- include/asm-parisc/hardirq.h.old	Fri Jul  6 17:32:05 2001
+++ include/asm-parisc/hardirq.h	Fri Jul  6 17:36:29 2001
@@ -20,8 +20,6 @@
 
 typedef struct {
 	unsigned long __softirq_pending; /* set_bit is used on this */
-	unsigned int __softirq_active;
-	unsigned int __softirq_mask;
 	unsigned int __local_irq_count;
 	unsigned int __local_bh_count;
 	unsigned int __syscall_count;
--- Makefile.old	Fri Jul  6 17:33:27 2001
+++ Makefile	Fri Jul  6 17:33:35 2001
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 6
-EXTRAVERSION = -pa2
+EXTRAVERSION = -pa3
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)