cvs commit: src/sys/dev/ti if_ti.c if_tireg.h

Pyun YongHyeon yongari at FreeBSD.org
Mon Jan 2 22:14:15 PST 2006


yongari     2006-01-03 06:14:07 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/ti           if_ti.c if_tireg.h 
  Log:
  - Tx side bus_dmamap_load_mbuf_sg(9) support. This reduces bookkeeping
    requiried to keep consistent softc state before/after callback function
    invocation and supposed to be sligntly faster than previous one as it
    wouldn't incur callback overhead. With this change callback function
    was gone.
  - Decrease TI_MAXTXSEGS to 32 from 128. It seems that most mbuf chain
    length is less than 32 and it would be re-packed with m_defrag(9) if
    its chain length is larger than TI_MAXTXSEGS. This would protect ti(4)
    against possible kernel stack overflow when txsegs[] is put on stack.
    Alternatively, we can embed the txsegs[] into softc. However, that
    would waste memory and make Tx/Rx speration hard when we want to
    sperate Tx/Rx handlers to optimize locking.
  - Fix dma map tracking used in Tx path. Previously it used the dma map
    of the last mbuf chain in ti_txeof() which was incorrect as ti(4)
    used dma map of the first mbuf chain when it loads a mbuf chain with
    bus_dmamap_load_mbuf(9). Correct the bug by introducing queues that
    keep track of active/inactive dma maps/mbuf chain.
  - Use ti_txcnt to check whether driver need to set watchdog timer instead
    of blidnly clearing the timer in ti_txeof().
  - Remove the 3rd arg. of ti_encap(). Since ti(4) now caches the last
    descriptor index(ti_tx_saved_prodidx) used in Tx there is no need to
    pass it as a fuction arg.
  - Change data type of producer/consumer index to int from u_int16_t in
    order to remove implicit type conversions in Tx/Rx handlers.
  - Check interface queue before getting a mbuf chain to reduce locking
    overhead.
  - Check number of available Tx descriptores to be 16 or higher in
    ti_start(). This wouldn't protect Tx descriptor shortage but it would
    reduce number of bus_dmamap_unload(9) calls in ti_encap() when we are
    about to running out of Tx descriptors.
  - Command NIC to send packets ony when the driver really has packets
    enqueued. Previously it always set TI_MB_SENDPROD_IDX which would
    command NIC to DMA Tx descriptors into NIC local memory regardless
    of Tx descriptor changes.
  
  Reviewed by:    scottl
  
  Revision  Changes    Path
  1.122     +137 -157  src/sys/dev/ti/if_ti.c
  1.37      +20 -11    src/sys/dev/ti/if_tireg.h


More information about the cvs-src mailing list