Update of /cvsroot/linux-vax/kernel-2.4/arch/vax/kernel
In directory usw-pr-cvs1:/tmp/cvs-serv15809
Modified Files:
interrupt.c
Log Message:
DA: align with what other archs seem to look like ..
thought this might fix the missing signal... it doesn't
Index: interrupt.c
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/arch/vax/kernel/interrupt.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- interrupt.c 2001/11/09 23:48:40 1.22
+++ interrupt.c 2001/12/15 12:23:58 1.23
@@ -396,6 +396,7 @@
vec_num = handler - stray_handlers;
+
if (autoprobing && vec_num >= FIRST_ADAPTER_VECTOR) {
stray_handlers[vec_num].flags |= STRAY_EXCEPTION_FIRED;
return 0;
@@ -458,13 +459,14 @@
status = dispatch_irq(regs, vec);
irq_exit(cpu);
- if (status) {
- if (softirq_active(cpu)&softirq_mask(cpu)) {
- do_softirq();
- }
- }
restore_flags(flags);
+ // if (status) {
+ if (softirq_active(cpu)&softirq_mask(cpu)) {
+ do_softirq();
+ // }
+ }
+
}
static inline void do_exception(struct pt_regs *regs, struct irqvector *vec, void *excep_info)
@@ -484,7 +486,7 @@
void do_irq_excep(struct pt_regs *regs, void *inside_vec, void *excep_info)
{
struct irqvector *vec;
-
+ int cpu;
vec = (struct irqvector *)(inside_vec -
offsetof(struct irqvector, excep_info_size));
@@ -505,15 +507,17 @@
}
ret_from_sys_call:
- if (in_softirq()) {
- do_softirq();
+ cpu=smp_processor_id();
+ if (softirq_active(cpu)&softirq_mask(cpu)) {
+ do_softirq();
goto ret_from_intr;
}
goto ret_with_reschedule;
ret_from_exception:
- if (in_softirq()) {
- do_softirq();
+ cpu=smp_processor_id();
+ if (softirq_active(cpu)&softirq_mask(cpu)) {
+ do_softirq();
}
ret_from_intr:
@@ -535,6 +539,7 @@
/* FIXME: oldset? */
do_signal(0,regs);
}
+
// printk("syscall: out of c code\n");
done:
}
|