Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Oct 1998 04:19:18 +0800
From:      Peter Wemm <peter@netplex.com.au>
To:        Guy Helmer <ghelmer@scl.ameslab.gov>
Cc:        Bruce Evans <bde@zeta.org.au>, freebsd-current@FreeBSD.ORG
Subject:   Re: Kernel backtrace for recurring page fault panic 
Message-ID:  <199810092019.EAA11356@spinner.netplex.com.au>
In-Reply-To: Your message of "Fri, 09 Oct 1998 14:06:51 EST." <Pine.SGI.3.96.981009135422.5543A-100000@demios.scl.ameslab.gov> 

next in thread | previous in thread | raw e-mail | index | archive | help
Guy Helmer wrote:
> On Fri, 9 Oct 1998, Bruce Evans wrote:
> 
> > >I finally have a backtrace for a page fault panic that has been bothering
> > >me under -current for months (it only happens when I use cvsup); this
> > >kernel was built from current sources on October 2.  It appears that there
> > >are two page faults, the first occuring in tulip_txput and the second in
> > >tsleep.  Is this of value to the kernel gurus? 
> > 
> > I think this panic was reported by someone else.  tulip_txput() calls
> > vtophys() on an invalid address for some unknown reason.  The pagefault in
> > tsleep() is not interesting (sync() can not be called from an interrupt
> > handler).
> 
> Thanks for the help, Bruce.  I see something in if_de.c:tulip_txput() that
> doesn't seem correct; perhaps it is related to the problem?
> 
> In tulip_txput, m0 is set to point at m at line 4267, but if "segcnt >
> TULIP_MAX_TXSEG" at line 4363, it looks like the original mbuf chain is
> freed in tulip_mbuf_compress() after a new chain is constructed.  m0
> is not reset to point to the new mbuf chain, but m0 is used in the do loop
> at line 4350 -- is this OK?

I've been running this diff locally for a while:

Index: if_de.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/if_de.c,v
retrieving revision 1.86
diff -u -r1.86 if_de.c
--- if_de.c	1998/09/24 13:31:01	1.86
+++ if_de.c	1998/10/09 20:41:34
@@ -4264,8 +4264,8 @@
      * latter case we have to recopy.
      */
 #if !defined(TULIP_BUS_DMA) || defined(TULIP_BUS_DMA_NOTX)
-    m0 = m;
   again:
+    m0 = m;
 #endif
     d_status = 0;
     eop = nextout = ri->ri_nextout;

This change is specific to the non-bus-dma version of the driver.  It's a
backout of one of Matt's changes some time ago that I wasn't sure about.

I suspect this may be related to your problem.

There are some other bugfixes that Matt has made to the if_de driver in 
NetBSD that we should pick up, but I wasn't game to fiddle with the driver 
this late.  I've got a pair of cards for testing, but they are both the 
same chip revision - it works for me, but there's no telling what it'll do 
on the rest.  It looks like it'll fix a few things though.

> Thanks again,
> Guy

Cheers,
-Peter




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810092019.EAA11356>