cvs commit: src/sys/contrib/altq/altq if_altq.h

Max Laier mlaier at FreeBSD.org
Sat Jun 12 18:48:02 GMT 2004


mlaier      2004-06-12 18:47:25 UTC

  FreeBSD src repository

  Modified files:
    sys/contrib/altq/altq if_altq.h 
  Log:
  Add an additional queue which will be "owned by the driver". This allows to
  rig a PREPEND macro for ALTQ as the POLL/DEQUEUE semantic is very bad in
  terms of locking. We make this a full functional queue to allow "bulk
  dequeue" which will further reduce the locking overhead (for non-altq
  enabled devices). Drivers will access this via the following macros, which
  will show up in <net/if_var.h> once we expose ALTQ to the build:
  
  IFQ_DRV_DEQUEUE(ifq, m) - takes a mbuf off the queue (driver queue first)
  IFQ_DRV_PREPEND(ifq, m) - pushes a mbuf back to the driver queue
  IFQ_DRV_PURGE(ifq)      - drops all packets in both queues
  IFQ_DRV_IS_EMPTY(ifq)   - checks for pending mbufs in either queue
  
  One has to make sure that the first three are protected by a driver mutex.
  At the moment most network drivers still require Giant, so this is not an
  issue. Even those that have thier own mutex usually hold it in if_start and
  the like, so this requirement is almost always satisfied.
  
  This evolved from a discussion with Andrew Gallatin.
  
  Revision  Changes    Path
  1.2       +7 -0      src/sys/contrib/altq/altq/if_altq.h


More information about the cvs-src mailing list