Linus Torvalds wrote:
> 
> On Sat, 13 Jan 2001, Frank de Lange wrote:
> 
> IDE is not my favourite example of a "known stable driver". Also, in many
> cases IDE is for historical reasons connected to an EDGE io-apic pin (ie
> it's still considered an ISA interrupt). Which probably wouldn't show this
> problem anyway.

I've been having similar problem with my network card 3c59x. My BP6 was
hanging with 
50% probablity while running netscape from nfs mounted /usr partition).

For 2.2 kernel I've created this patch which has solved this problem
(so I don't have any problems until recentely I've started to use UDMA4
with ATA66
- but this seems to be related to BX chipset problem and as far as I
know Andre
is working on this issue)

While using this patch - I've got many messages about irq_enter in my
kernel log,
but the system was stable and running quite happy.

With the latest 2.4 kernels I do not have same problems (at least it
looks so far)
(So I assume the problem was hidden somewhere inside NFS).
However with 2.4.0 & ac patches I'm seeing some problem when one CPU is
locked
and the computer becomes unusable without any reason - there is no
network trafick
no ide intensive actions - all I can do is to move mouse within Xfree
(so maybe
its xfree bug - but its hard to recognize this - all I could say is that
I'm not seeing
such problems with -test12 kernels)


Here the patch for 2.2 I've been using:


--- linux.orig/arch/i386/kernel/irq.h   Wed May 31 11:21:04
2000                
+++ linux/arch/i386/kernel/irq.h        Wed May 31 11:21:47
2000                
@@ -138,8 +138,22
@@                                                            
 static inline void irq_enter(int cpu, unsigned int
irq)                        

{                                                                              
       
hardirq_enter(cpu);                                                     
-       while (test_bit(0,&global_irq_lock))
{                                  
-               /* nothing
*/;                                                  
+       if (global_irq_holder == cpu && test_bit(0, &global_irq_lock))
{        
+                printk(KERN_WARNING "irq_enter - CPU:%d already holder
(count:%
+                       cpu, global_irq_count,
local_irq_count[cpu]);           
+                /* avoid deadlock bellow
*/                                    
+               
clear_bit(0,&global_irq_lock);                                 
+        } else
{                                                               
+            unsigned long i =
1000000;                                         
+            while (test_bit(0,&global_irq_lock) && i)
{                        
+               
i--;                                                           
+                /* nothing
*/;                                                 
+           
}                                                                  
+            if (!i)
{                                                          
+               
clear_bit(0,&global_irq_lock);                                 
+                printk(KERN_WARNING "irq_enter - loop timeout CPU:%d 
Holder:%d!
+                       cpu,
global_irq_holder);                                
+           
}                                                                  
       
}                                                                       

}                                                                              
               printk(KERN_WARNING "irq_enter - loop timeout CPU:%d 
Holder:%d!

-- 
             There are three types of people in the world:
               those who can count, and those who can't.
  Zdenek Kabelac  http://i.am/kabi/ [EMAIL PROTECTED] {debian.org; fi.muni.cz}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to