[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-kernel
Subject:    Re: [patch] killed tqueue_lock spinlock, Re: [patch] race-fix for bottom-half-functions [Re: Subtle
From:       Andrea Arcangeli <andrea () e-mind ! com>
Date:       1999-01-31 22:40:59
[Download RAW message or body]

On Sun, 31 Jan 1999 yodaiken@chelm.cs.nmt.edu wrote:

> Actually, the code as rewritten will work from rt space, but shouldn't
> it do a save_flags/restore_flags

Woops, this incremental patch is needed:

Index: include/linux/tqueue.h
===================================================================
RCS file: /var/cvs/linux/include/linux/tqueue.h,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 tqueue.h
--- tqueue.h	1999/01/31 02:36:23	1.1.2.2
+++ tqueue.h	1999/01/31 20:33:55
@@ -77,17 +77,20 @@
 			   task_queue *bh_list)
 {
 	if (!test_and_set_bit(0,&bh_pointer->sync)) {
+		unsigned long flags;
+
 		bh_pointer->sync |= 2;
 		wmb();
 		 /*
 		  * Disable local interrupt to avoid the CPU to run a nested
 		  * run_task_queue() while bit1 is set. -arca
 		  */
+		__save_flags(flags);
 		__cli();
 		bh_pointer->next = xchg(bh_list,bh_pointer);
 		clear_bit(1,&bh_pointer->sync); /* see run_task */
 		wmb();
-		__sti();
+		__restore_flags(flags);
 	}
 }
 

Thanks ;).

Andrea Arcangeli


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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic