Subject: kern/9587: splimp() used way too much in the network code
To: None <>
From: None <>
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
>Originator:     Jason R. Thorpe
>Release:        NetBSD 1.4U, March 6 2000
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

	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.

	Inspect the code.

	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().