NUMA-Q breakage 5/7 in_interrupt() race

William Lee Irwin III (wli@holomorphy.com)
Fri, 12 Jul 2002 15:40:03 -0700


On smaller machines, bootstrapping proceeds far enough to see races
in kmaps near generic_file_read() etc. This is precisely the
in_interrupt() BUG(), but it's quite clear this is happening in
process context. Not even the smaller machines can survive this.
That is, it is impossible to run at all without it (or an equivalent).

Robert, please apply.

Thanks,
Bill

===== include/asm-i386/hardirq.h 1.7 vs edited =====
--- 1.7/include/asm-i386/hardirq.h Mon May 20 10:51:17 2002
+++ edited/include/asm-i386/hardirq.h Thu Jul 11 19:51:02 2002
@@ -22,8 +22,24 @@
* Are we in an interrupt context? Either doing bottom half
* or hardware interrupt processing?
*/
-#define in_interrupt() ({ int __cpu = smp_processor_id(); \
- (local_irq_count(__cpu) + local_bh_count(__cpu) != 0); })
+static inline int in_interrupt(void)
+{
+ int total_count, retval, cpu;
+
+ preempt_disable();
+ cpu = smp_processor_id();
+
+ total_count = local_irq_count(cpu) + local_bh_count(cpu);
+
+ if (total_count)
+ retval = 1;
+ else
+ retval = 0;
+
+ preempt_disable();
+
+ return retval;
+}

#define in_irq() (local_irq_count(smp_processor_id()) != 0)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/