freebsd with flexible iflib nic queues
Go to file
Bill Paul a0067d7b89 Attempt to fix a problem with receiving packets on USB ethernet interfaces.
Packets are received inside USB bulk transfer callbacks, which run at
splusb() (actually splbio()). The packet input queues are meant to be
manipulated at splimp(). However the locking apparently breaks down under
certain circumstances and the input queues can get trampled.

There's a similar problem with if_ppp, which is driven by hardware/tty
interrupts from the serial driver, but which must also manipulate the
packet input queues at splimp(). The fix there is to use a netisr, and
that's the fix I used here. (I can hear you groaning back there. Hush up.)

The usb_ethersubr module maintains a single queue of its own. When a
packet is received in the USB callback routine, it's placed on this
queue with usb_ether_input(). This routine also schedules a soft net
interrupt with schednetisr(). The ISR routine then runs later, at
splnet, outside of the USB callback/interrupt context, and passes the
packet to ether_input(), hopefully in a safe manner.

The reason this is implemented as a separate module is that there are
a limited number of NETISRs that we can use, and snarfing one up for
each driver that needs it is wasteful (there will be three once I get
the CATC driver done). It also reduces code duplication to a certain
small extent. Unfortunately, it also needs to be linked in with the
usb.ko module in order for the USB ethernet drivers to share it.

Also removed some uneeded includes from if_aue.c and if_kue.c

Fix suggested by: peter
Not rejected as a hairbrained idea by: n_hibma
2000-01-10 23:12:54 +00:00
bin Add `.Nm red' to NAME section. 2000-01-10 12:20:30 +00:00
contrib 10 X's in mkstemp(). 2000-01-10 09:17:46 +00:00
crypto Zap NO_IDEA 2000-01-10 06:28:04 +00:00
etc Add an entry for dhclient and the USB ethernet adapters. 2000-01-10 22:34:36 +00:00
games Backout rev1.7, as it broke adventure(6) (const'ing a non-r/o variable). 1999-12-25 03:50:42 +00:00
gnu Install contents of the TESTS subdirectory to /usr/share/examples/libdialog 2000-01-10 12:04:18 +00:00
include Make sched_param parameter a const to comply with POSIX and SUSv2 specs. 2000-01-10 04:14:08 +00:00
kerberos5 Bring in SRA for telnet. 1999-10-07 18:59:55 +00:00
kerberosIV Update for KTH Kerberos (eBones) v1.0 2000-01-09 08:59:39 +00:00
lib Install html files to /usr/share/doc/ncurses/ 2000-01-10 12:12:51 +00:00
libexec Revamp the mechanism for enumerating and calling shared objects' 2000-01-09 21:13:48 +00:00
release Use GENERIC for both pccard and non-pccard disks now that GENERIC is 2000-01-10 16:27:32 +00:00
sbin Fix the use of an uninitialized variable in the previous commit. 2000-01-10 14:20:53 +00:00
secure Really really remove SHA-1 support. 2000-01-09 21:22:48 +00:00
share Removed NOEXTRADEPEND hack. This was only for an old version of makeworld. 2000-01-09 15:40:32 +00:00
sys Attempt to fix a problem with receiving packets on USB ethernet interfaces. 2000-01-10 23:12:54 +00:00
tools Don't use -C internally. Use -c. For some reason files are not copied 1999-12-15 18:08:56 +00:00
usr.bin malloc more space for temp file name 2000-01-10 20:26:24 +00:00
usr.sbin Don't fail if less then MAXDEV /dev/usb\d+ entries exist. 2000-01-10 22:35:33 +00:00
COPYRIGHT Update to add the July 22, 1999 addendum. 1999-09-05 21:33:47 +00:00
Makefile Add the buildkernel and installkernel targets. 2000-01-09 18:17:48 +00:00
Makefile.inc1 Add a buildkernel and an installkernel target. With these targets 2000-01-09 17:56:40 +00:00
Makefile.upgrade $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
README $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
UPDATING Spell chown right. 2000-01-09 05:12:25 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel and the contents of /etc.  Please see the top of the Makefile
in this directory for more information on the standard build targets
and compile-time flags.

Building a kernel with config(8) is a somewhat more involved process,
documentation for which can be found at:
   http://www.freebsd.org/handbook/kernelconfig.html
And in the config(8) man page.

The sample kernel configuration files reside in the sys/i386/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file LINT contains entries for all possible devices, not
just those commonly used, and is meant more as a general reference
than an actual kernel configuration file (a kernel built from it
wouldn't even run).


Source Roadmap:
---------------
bin		System/User commands.

contrib		Packages contributed by 3rd parties.

crypto		Export controlled stuff (see crypto/README).

etc		Template files for /etc

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberosIV	Kerberos package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		DES and DES-related utilities - NOT FOR EXPORT!

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/handbook/synching.html