Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Sep 2006 13:12:38 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/dev/em if_em.c
Message-ID:  <200609291312.k8TDCdsM077350@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
andre       2006-09-29 13:12:38 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/em           if_em.c 
  Log:
  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
  
  Revision  Changes    Path
  1.148     +21 -5     src/sys/dev/em/if_em.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200609291312.k8TDCdsM077350>