Subject: kern/9587: splimp() used way too much in the network code
To: None <gnats-bugs@gnats.netbsd.org>
From: None <thorpej@shagadelic.org>
List: netbsd-bugs
Date: 03/08/2000 20:01:24
>Number: 9587
>Category: kern
>Synopsis: splimp() used way too much in the network code
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: kern-bug-people (Kernel Bug People)
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Mar 8 20:00:01 2000
>Last-Modified:
>Originator: Jason R. Thorpe
>Organization:
>Release: NetBSD 1.4U, March 6 2000
>Environment:
System: NetBSD dr-evil 1.4U NetBSD 1.4U (DR-EVIL) #344: Mon Mar 6 17:36:00 PST 2000 thorpej@dr-evil:/u1/netbsd/src/sys/arch/i386/compile/DR-EVIL i386
>Description:
The networking code uses splimp() way too much. This is partially
an historic artifact of the original BSD spl*() heirarchy, and
partially an artifact of some asycn serial network drivers
passing packets up the stack at higher than IPL_NET level (IPL_TTY,
to be precise).
This means that, in some cases, more interrupts than necessary
are blocked. On some systems, this means that serial interrupts
are blocked while things like network queues or socket buffers
are being manipulated.
>How-To-Repeat:
Inspect the code.
>Fix:
First of all, the "sl" and "strip" drivers should be changed to
defer input of a frame until a software interrupt, much like the
PPP code does.
Secondly, the networking code should be audited to determine
which interrupt level each bits of code should run at. Some
things could perfectly well run at splsoftnet(), other code
must run at splnet().
>Audit-Trail:
>Unformatted: