Author: rwatson
Date: Fri Jun 26 00:36:47 2009
New Revision: 195020
URL: http://svn.freebsd.org/changeset/base/195020
Log:
  Define four wrapper functions for interface address locking,
  if_addr_rlock() and if_addr_runlock() for regular address lists, and
  if_maddr_rlock() and if_maddr_runlock() for multicast address lists.
  
  We will use these in various kernel modules to avoid encoding specific
  type and locking strategy information into modules that currently use
  IF_ADDR_LOCK() and IF_ADDR_UNLOCK() directly.
  
  MFC after:    6 weeks

Modified:
  head/sys/net/if.c
  head/sys/net/if_var.h

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c   Fri Jun 26 00:19:25 2009        (r195019)
+++ head/sys/net/if.c   Fri Jun 26 00:36:47 2009        (r195020)
@@ -1419,6 +1419,40 @@ if_rtdel(struct radix_node *rn, void *ar
 }
 
 /*
+ * Wrapper functions for struct ifnet address list locking macros.  These are
+ * used by kernel modules to avoid encoding programming interface or binary
+ * interface assumptions that may be violated when kernel-internal locking
+ * approaches change.
+ */
+void
+if_addr_rlock(struct ifnet *ifp)
+{
+
+       IF_ADDR_LOCK(ifp);
+}
+
+void
+if_addr_runlock(struct ifnet *ifp)
+{
+
+       IF_ADDR_UNLOCK(ifp);
+}
+
+void
+if_maddr_rlock(struct ifnet *ifp)
+{
+
+       IF_ADDR_LOCK(ifp);
+}
+
+void
+if_maddr_runlock(struct ifnet *ifp)
+{
+
+       IF_ADDR_UNLOCK(ifp);
+}
+
+/*
  * Reference count functions for ifaddrs.
  */
 void

Modified: head/sys/net/if_var.h
==============================================================================
--- head/sys/net/if_var.h       Fri Jun 26 00:19:25 2009        (r195019)
+++ head/sys/net/if_var.h       Fri Jun 26 00:36:47 2009        (r195020)
@@ -253,6 +253,16 @@ typedef void if_init_f_t(void *);
 #define        IF_ADDR_LOCK_ASSERT(if) mtx_assert(&(if)->if_addr_mtx, MA_OWNED)
 
 /*
+ * Function variations on locking macros intended to be used by loadable
+ * kernel modules in order to divorce them from the internals of address list
+ * locking.
+ */
+void   if_addr_rlock(struct ifnet *ifp);       /* if_addrhead */
+void   if_addr_runlock(struct ifnet *ifp);     /* if_addrhead */
+void   if_maddr_rlock(struct ifnet *ifp);      /* if_multiaddrs */
+void   if_maddr_runlock(struct ifnet *ifp);    /* if_multiaddrs */
+
+/*
  * Output queues (ifp->if_snd) and slow device input queues (*ifp->if_slowq)
  * are queues of messages stored on ifqueue structures
  * (defined above).  Entries are added to and deleted from these structures
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to