[glebius@FreeBSD.org: cvs commit: src/sys/dev/em if_em.c]
Gleb Smirnoff
glebius at FreeBSD.org
Fri Oct 14 04:05:50 PDT 2005
Colleagues,
since there were a lot of em(4) related discussions on list, I
decided to forward this commit mail here.
This change should fix a big problem in if_em(), that you may
have experienced. If you experience long wedges in receive part,
for about minute or more, than you should try this patch, test it
and please report to list.
The more reports we get, the faster the change will enter
RELENG_6_0.
Thanks in advance!
----- Forwarded message from Gleb Smirnoff <glebius at FreeBSD.org> -----
From: Gleb Smirnoff <glebius at FreeBSD.org>
To: src-committers at FreeBSD.org, cvs-src at FreeBSD.org, cvs-all at FreeBSD.org
Subject: cvs commit: src/sys/dev/em if_em.c
Date: Fri, 14 Oct 2005 11:00:16 +0000 (UTC)
Delivered-To: glebius at freebsd.org
Delivered-To: src-committers at FreeBSD.org
Precedence: bulk
glebius 2005-10-14 11:00:16 UTC
FreeBSD src repository
Modified files:
sys/dev/em if_em.c
Log:
From the PR:
The receive function em_process_receive_interrupts() unlocks the
adapter while ether_input() processes the packet, and then locks
it back. In the meantime, em_init() may be called, either from
em_watchdog() from softclock interrupt or from the ifconfig(8)
program. The em_init() resets the card, in particular it sets
adapter->next_rx_desc_to_check to 0 and resets hardware RX Head
and Tail descriptor pointers. The loop in
em_process_receive_interrupts() does not expect these things to
change, and a mess may result.
This fixes long wedges of em(4) interfaces receive part under high
load and IP fastforwarding enabled.
PR: kern/87418
Submitted by: Dmitrij Tejblum <tejblum yandex-team.ru>
Revision Changes Path
1.77 +14 -14 src/sys/dev/em/if_em.c
----- End forwarded message -----
--
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE
More information about the freebsd-net
mailing list