diff options
author | andre <andre@FreeBSD.org> | 2006-09-29 13:12:38 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2006-09-29 13:12:38 +0000 |
commit | d066071e5efd02a0f61eba87a164fdc18b623b00 (patch) | |
tree | f6fe2edf88ae4bbda04cc10d81a615205d4e1da2 /sys/dev/pdq | |
parent | 8405ff182feb5e479edb4b36b3345b5e9c1c0d84 (diff) | |
download | FreeBSD-src-d066071e5efd02a0f61eba87a164fdc18b623b00.zip FreeBSD-src-d066071e5efd02a0f61eba87a164fdc18b623b00.tar.gz |
Handle all error cases from bus_dmamap_load_mbuf_sg(). Those are:
- EFBIG means the mbuf chain was too long and bus_dma ran out of segments.
Defragment the mbuf chain and try again. (Already existed, not changed.)
- ENOMEM means bus_dma could not obtain enough bounce buffers at this point
in time. Defer sending and try again later.
- All other errors, in particular EINVAL, are fatal and prevent the mbuf
chain from ever going through. Drop it and report error.
- Checking (nsegs == 0) is unnecessary as bus_dmamap_load_mbuf_sg() always
reports an error if it is < 1.
This prevents broken packets from clogging the interface queue indefinately.
Discussed with: scottl
Reviewed by: jfv
Diffstat (limited to 'sys/dev/pdq')
0 files changed, 0 insertions, 0 deletions