On Saturday 29 April 2006 04:08, John Baldwin wrote:
> jhb         2006-04-28 20:08:16 UTC
>
>   FreeBSD src repository
>
>   Modified files:
>     sys/dev/nve          if_nve.c
>   Log:
>   The nvidia binary blob sometimes defers tx completion notification to the
>   OS dependent layer.  Thus, the watchdog timer can go off when the tx
>   engine is working fine but the OS dependent layer just hasn't been called
>   to cleanup finished tx transactions.  To workaround this, when the
> watchdog fires, poke the binary blob to force it to flush any pending tx
>   completions.  If this drops the pending tx count to zero then just return
>   without logging a message or resetting the chip.
>
>   This reportedly fixes the 'device timeout()' errors with at least several
>   NF4 nve(4) parts.
>
>   Submitted by:   Nathan Alexander Whitehorn <[EMAIL PROTECTED]> (code)
>   Submitted by:   dg (inspiration for comment and explanation)
>   MFC after:      1 week
>
>   Revision  Changes    Path
>   1.21      +19 -1     src/sys/dev/nve/if_nve.c
no change here, I still got the same timeout error,  it is NForce 3 Ultra,
when watchdog was triggered, the machine froze. I turned on 'force async
mode', than the freezing went away, though timeout still occured. 
Only after changing TX_RING_SIZE to 251, the timeout problem completey
went away even under heavy load, I got the number  251 from
pfnQueryWriteSlots(), I think the default TX_RING_SIZE is too small for me.

Index: if_nve.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/nve/if_nve.c,v
retrieving revision 1.21
diff -u -r1.21 if_nve.c
--- if_nve.c    28 Apr 2006 20:08:16 -0000      1.21
+++ if_nve.c    29 Apr 2006 22:36:58 -0000
@@ -650,7 +650,7 @@
            0, /* force speed */ 
            0, /* force full duplex */
            0, /* force mode */
-           0, /* force async mode */
+           1, /* force async mode */
            &sc->linkup);
 
        if (error) {
Index: if_nvereg.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/nve/if_nvereg.h,v
retrieving revision 1.7
diff -u -r1.7 if_nvereg.h
--- if_nvereg.h 7 Dec 2005 17:38:03 -0000       1.7
+++ if_nvereg.h 29 Apr 2006 22:36:58 -0000
@@ -51,7 +51,7 @@
 
 #define        NV_RID          0x10
 
-#define        TX_RING_SIZE    64
+#define        TX_RING_SIZE    251
 #define        RX_RING_SIZE    64
 #define        NV_MAX_FRAGS    32      // match 
adapter.h:ADAPTER_WRITE_DATA.sElement[]
 

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to