Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Aug 2005 22:58:30 +0300
From:      Maxim Sobolev <sobomax@portaone.com>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/re if_re.c
Message-ID:  <4304E866.3030405@portaone.com>
In-Reply-To: <200508181538.32988.jhb@FreeBSD.org>
References:  <200508181429.j7IET16d038533@repoman.freebsd.org> <200508181238.05411.jhb@FreeBSD.org> <4304D6B9.8050603@portaone.com> <200508181538.32988.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote:

>>Well, see kern/85005. IMO some generic approach should be worked out and
>>implemented since I think many other network drivers may be affected by
>>the same problem.
> 
> 
> I've still yet to see what the real panic is.  For one thing, if the foo_stop 
> method does its jobs, the ethernet hardware shouldn't be generating 
> interrupts.  The stop method should be shutting the card down (i.e. turning 
> off the receiver and transmitter for example).  Is your ethernet driver 
> sharing an interrupt with another device and the other device is 

Yes, this is the case here. It shares interrupt with IDE controller. 
Panic happens in the re_rxeof() when the driver tries to dereference 
sc->rl_ldata.rl_rx_mbuf[i], which has already been deallocated in the 
re_stop().

> interrupting?  In that case, the ethernet driver would have the same panic if 
> you did an 'ifconfig foo0 down' and then the other device interrupted.  So, I 

No, I don't think it would since 'ifconfig foo0 down' resets IFF_UPP.

> think clearing IFF_UPP in foo_shutdown() is wrong.  foo_stop() should really 
> be sufficient, and foo_intr() should be able to handle a spurious interrupt 
> while the interface is stopped without panicing since it already needs to do 
> so to handle the shared interrupt case.

Apparently it doesn't handle it, which has been probably masked by the 
IFF_UPP check in the re_intr(), so that this problem only happened at 
shutdown, when IFF_UPP isn't cleared after re_stop().

-Maxim



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