Make all network interrupt service routines MPSAFE part 1/3.
[dragonfly.git] / sys / netproto / atalk / ddp_output.c
index d647ea1..8ca2793 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 /* $FreeBSD: src/sys/netatalk/ddp_output.c,v 1.13.6.1 2000/06/02 22:39:07 archie Exp $ */
-/* $DragonFly: src/sys/netproto/atalk/ddp_output.c,v 1.5 2004/01/06 03:17:28 dillon Exp $ */
+/* $DragonFly: src/sys/netproto/atalk/ddp_output.c,v 1.8 2005/11/28 17:13:46 dillon Exp $ */
 
 #include <sys/param.h>
 #include <sys/systm.h>
 int    ddp_cksum = 1;
 
 int
-ddp_output( struct mbuf *m, struct socket *so)
+ddp_output(struct mbuf *m, struct socket *so, ...)
 {
     struct ddpehdr     *deh;
     struct ddpcb *ddp = sotoddpcb( so );
 
-    M_PREPEND( m, sizeof( struct ddpehdr ), M_WAIT );
+    M_PREPEND( m, sizeof( struct ddpehdr ), MB_WAIT );
     if (m == NULL)
            return (ENOBUFS);
 
@@ -121,6 +121,7 @@ ddp_route( struct mbuf *m, struct route *ro)
     struct at_ifaddr   *aa = NULL;
     struct ifnet       *ifp = NULL;
     u_short            net;
+    int        error;
 
 #if 0
     /* Check for net zero, node zero ("myself") */
@@ -192,7 +193,7 @@ ddp_route( struct mbuf *m, struct route *ro)
      * packets end up poorly aligned due to the three byte elap header.
      */
     if ( !(aa->aa_flags & AFA_PHASE2) ) {
-       MGET( m0, M_WAIT, MT_HEADER );
+       MGET( m0, MB_WAIT, MT_HEADER );
        if ( m0 == 0 ) {
            m_freem( m );
            printf("ddp_route: no buffers\n");
@@ -228,6 +229,9 @@ ddp_route( struct mbuf *m, struct route *ro)
        return (if_simloop(ifp, m, gate.sat_family, 0));
     }
 
-    return((*ifp->if_output)( ifp,
-       m, (struct sockaddr *)&gate, NULL)); /* XXX */
+    /* XXX */
+    lwkt_serialize_enter(ifp->if_serializer);
+    error = (*ifp->if_output)( ifp, m, (struct sockaddr *)&gate, NULL);
+    lwkt_serialize_exit(ifp->if_serializer);
+    return (error);
 }