On Tue, 2006-01-03 at 01:03 +0100, Francois Romieu wrote:

> Can you try and report two things:
> - apply the patch below with your current config and carefully install/test;
> - if it does not work better, enable CONFIG_SMP with/without CONFIG_PREEMPT.

Francois:

Sorry it took me a while to get back to this, but I've now had a chance
to test this against (now-released) 2.6.15 (final).  Unfortunately, the
bug seems to recur on all 12 combinations of patched & stock 2.6.15,
SMP/no-SMP, and all three PREEMPT settings (yes, no, and
CONFIG_PREEMPT_VOLUNTARY).  (Just to remind everyone, this is a GA511
PCMCIA NIC that consistently gives a soft hang during bootup, without an
ethernet cable inserted.)

Since that generated quite a bit of testing output, I'm not attaching it
here.  Instead, I've made the entire matrix of information available at
http://www.steinthal.us/r8169-testing.  There I've included uname -a
output, kernel config file, dmesg output, syslog output, and the
r8169.ko for each configuration (as you requested last time).  In case
it helps anyone, I've also made available the home-built .deb packages I
used for testing.

If nothing else, all of this compiling put my dual Xeon server to good
use building test packages. :)

Thanks again for the help --- if you have any other ideas or things
you'd like me to test, let me know.

-Russell

> diff --git a/include/linux/spinlock_api_up.h b/include/linux/spinlock_api_up.h
> index cd81cee..94e243f 100644
> --- a/include/linux/spinlock_api_up.h
> +++ b/include/linux/spinlock_api_up.h
> @@ -37,16 +37,16 @@
>    do { local_irq_save(flags); __LOCK(lock); } while (0)
>  
>  #define __UNLOCK(lock) \
> -  do { preempt_enable(); __release(lock); (void)(lock); } while (0)
> +  do { __release(lock); preempt_enable(); (void)(lock); } while (0)
>  
>  #define __UNLOCK_BH(lock) \
>    do { preempt_enable_no_resched(); local_bh_enable(); __release(lock); 
> (void)(lock); } while (0)
>  
>  #define __UNLOCK_IRQ(lock) \
> -  do { local_irq_enable(); __UNLOCK(lock); } while (0)
> +  do { __UNLOCK(lock); local_irq_enable(); } while (0)
>  
>  #define __UNLOCK_IRQRESTORE(lock, flags) \
> -  do { local_irq_restore(flags); __UNLOCK(lock); } while (0)
> +  do { __UNLOCK(lock); local_irq_restore(flags); } while (0)
>  
>  #define _spin_lock(lock)                     __LOCK(lock)
>  #define _read_lock(lock)                     __LOCK(lock)
> 
-- 
Russell Steinthal <[EMAIL PROTECTED]>

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to