kernel/5155: sis(4) rx disabling itself

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

kernel/5155: sis(4) rx disabling itself

Stuart Henderson-3
>Number:         5155
>Category:       kernel
>Synopsis:       sis(4) rx disabling itself
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    bugs
>State:          open
>Quarter:        
>Keywords:      
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 13 14:30:01 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Stuart Henderson
>Release:        HEAD
>Organization:
net
>Environment:
       
        System      : OpenBSD 3.9
        Architecture: OpenBSD.i386 etc
        Machine     : i386 etc
>Description:
       
Posters at soekris-tech have reported problems with sis(4) bridged to
ral(4) where after some amount of traffic has passed, sis(4) stops
passing traffic until 'ifconfig sisX up' is issued.

Some posts linked below, but basically manualling
re-enabling the receiver at the end of interrupt processing
as done by the included diff (adapted from one for freebsd
posted to soekris-tech by peter at alastria dot net) is
reported to avoid the problem.

http://marc.theaimsgroup.com/?t=115014974500002&r=1&w=2
http://marc.theaimsgroup.com/?t=114962068400001&r=1&w=2

especially

http://marc.theaimsgroup.com/?l=soekris-tech&m=114996467022967&w=2
http://marc.theaimsgroup.com/?l=soekris-tech&m=115014970015647&w=2

>How-To-Repeat:
       
I haven't been able to reproduce this myself while I've been
specifically looking for it, though I have had symptoms in the
past which could be due to this.

People seeing the problem have reported that by simply passing some
amount of traffic through a host where sis and ral devices are connected
(either routed or bridged) the problem occurs.

>Fix:
       
This is reported to fix the issue (but doesn't really explain why
it's happening). Linux driver does something similar.

Index: sys/dev/pci/if_sis.c
===================================================================
RCS file: /data/cvsroot/OpenBSD/src/sys/dev/pci/if_sis.c,v
retrieving revision 1.71
diff -u -r1.71 if_sis.c
--- sys/dev/pci/if_sis.c 28 May 2006 00:04:24 -0000 1.71
+++ sys/dev/pci/if_sis.c 12 Jun 2006 23:03:18 -0000
@@ -1518,6 +1518,8 @@
  if (!IFQ_IS_EMPTY(&ifp->if_snd))
  sis_start(ifp);
 
+ /* Force a RX engine reenable every interrupt (copying linux's behaviour). */
+ SIS_SETBIT(sc, SIS_CSR, SIS_CSR_RX_ENABLE);
  return (claimed);
 }


>Release-Note:
>Audit-Trail:
>Unformatted: