summaryrefslogtreecommitdiffstats
path: root/tools/regression/lib/libc/string/test-strerror.c
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-04-05 06:46:07 +0000
committeradrian <adrian@FreeBSD.org>2011-04-05 06:46:07 +0000
commita6f6f69850126214baebdb5ca794556757941881 (patch)
treeead3ac76e090b22932ee08a46908bdf417cc4a64 /tools/regression/lib/libc/string/test-strerror.c
parent326f604f816fadd1fb742de2ad5c76ae1a0e3e98 (diff)
downloadFreeBSD-src-a6f6f69850126214baebdb5ca794556757941881.zip
FreeBSD-src-a6f6f69850126214baebdb5ca794556757941881.tar.gz
if_arge has had a strange bug that only appears during high traffic
levels. TX would hang, RX wouldn't. A bit of digging showed the interface send queue was full, but IFF_DRV_OACTIVE was clear and the hardware TX queue was empty. It turns out that there wasn't a check to drain the interface send queue once hardware TX had completed, so if the interface send queue had filled up in the meantime, subsequent packets would be dropped by the higher layers and if_start (and thus arge_start()) would never be called. The fix is simple - call arge_start_locked() in the software interrupt handler after the hardware TX queue has been handled or a TX underrun occured. This way the interface send queue gets drained.
Diffstat (limited to 'tools/regression/lib/libc/string/test-strerror.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud