Re: QUESTION: Network hangs with BP6 and 2.4.x kernels, hardware

Zdenek Kabelac
2001-01-15T16:15:42Z

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/ kabi@i.am {debian.org; fi.muni.cz}