[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)