All of lore.kernel.org
 help / color / mirror / Atom feed
* NUMA-Q breakage 5/7 in_interrupt() race
@ 2002-07-12 22:40 William Lee Irwin III
  2002-07-12 22:53 ` William Lee Irwin III
  2002-07-13  8:28 ` William Lee Irwin III
  0 siblings, 2 replies; 4+ messages in thread
From: William Lee Irwin III @ 2002-07-12 22:40 UTC (permalink / raw)
  To: linux-kernel; +Cc: rml

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)
 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-07-13  8:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-07-12 22:40 NUMA-Q breakage 5/7 in_interrupt() race William Lee Irwin III
2002-07-12 22:53 ` William Lee Irwin III
2002-07-12 23:02   ` Thunder from the hill
2002-07-13  8:28 ` William Lee Irwin III

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.