cvs commit: src/sys/net netisr.h src/sys/net/bridge if_bridge.c

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Sat Jun 16 08:28:22 PDT 2007


sephe       2007/06/16 08:27:27 PDT

DragonFly src repository

  Modified files:
    sys/net              netisr.h 
    sys/net/bridge       if_bridge.c 
  Log:
  - In bridge_enqueue(), dispatch the mbuf to the current cpu's netisr, instead
    of calling member iface's handoff directly, so we don't need to release
    bridge's serializer to avoid possible bridge/member iface serializer dead
    lock.  Add bridge_handoff(), which calls member iface's handoff directly.
  - Add bridge_pfil_enqueue(), which dispatches the mbuf to the current cpu's
    netisr.  Its netisr handler runs pfil on destination before calling member
    iface's handoff.  With the help of this fucntion, bridge's serializer no
    longer needs to be released during bridge_broadcast()'s member iface
    iteration.  Originally the serializer was released mainly to:
    o  Avoid possible bridge/member iface serializer dead lock
    o  Avoid possible recursion introduced by pfil
    These are no longer applicable to the new code.
  - Factor out bridge_enqueue_internal(), which dispatches the mbuf to the
    current cpu's netisr and strips MT_TAG mbufs before the dispatching.  It
    is used by bridge_{enqueue,pfil_enqueue}()
  - In bridge_forward(), reorganize pfil code to minimize bridge's temporary
    serializer releasing period:
    o  For broadcast or multicast packets, push bridge_pfil(bifp, src_if) down
       into bridge_broadcast().
    o  For unicast packets, delay bridge_pfil(bifp, src_if) until we have made
       sure that the destination interface is in working state.
  - In bridge_input(), if the input iface is not changed, don't go through
    the upper half of ether_input() again.
  - Declare netisr_apanic_port in netisr.h, since netmsg is embedded in mbuf,
    this declaration probably will become more useful than netisr_afree_port.
  
  Reviewed-by: dillon@
  Tested-by: dillon@
  
  Revision  Changes    Path
  1.27      +1 -0      src/sys/net/netisr.h
  1.25      +167 -74   src/sys/net/bridge/if_bridge.c


http://www.dragonflybsd.org/cvsweb/src/sys/net/netisr.h.diff?r1=1.26&r2=1.27&f=u
http://www.dragonflybsd.org/cvsweb/src/sys/net/bridge/if_bridge.c.diff?r1=1.24&r2=1.25&f=u





More information about the Commits mailing list