I'd like to change the netmap global lock from a mutex into a sleepable
shared/exclusive lock.  This will allow a driver's nm_register hook
(which is called with the global lock held) to sleep if it has to.  I've
casually used pkt-gen after this conversion (patch attached) and the
witness hasn't complained about it.

Thoughts?

Regards,
Navdeep


diff -r 0300d80260f4 sys/dev/netmap/netmap_kern.h
--- a/sys/dev/netmap/netmap_kern.h      Fri May 23 19:00:56 2014 -0700
+++ b/sys/dev/netmap/netmap_kern.h      Sat May 24 12:49:15 2014 -0700
@@ -43,13 +43,13 @@
 #define unlikely(x)    __builtin_expect((long)!!(x), 0L)

 #define        NM_LOCK_T       struct mtx
-#define        NMG_LOCK_T      struct mtx
-#define NMG_LOCK_INIT()        mtx_init(&netmap_global_lock, \
-                               "netmap global lock", NULL, MTX_DEF)
-#define NMG_LOCK_DESTROY()     mtx_destroy(&netmap_global_lock)
-#define NMG_LOCK()     mtx_lock(&netmap_global_lock)
-#define NMG_UNLOCK()   mtx_unlock(&netmap_global_lock)
-#define NMG_LOCK_ASSERT()      mtx_assert(&netmap_global_lock, MA_OWNED)
+#define        NMG_LOCK_T      struct sx
+#define NMG_LOCK_INIT()        sx_init(&netmap_global_lock, \
+                               "netmap global lock")
+#define NMG_LOCK_DESTROY()     sx_destroy(&netmap_global_lock)
+#define NMG_LOCK()     sx_xlock(&netmap_global_lock)
+#define NMG_UNLOCK()   sx_xunlock(&netmap_global_lock)
+#define NMG_LOCK_ASSERT()      sx_assert(&netmap_global_lock, SA_XLOCKED)

 #define        NM_SELINFO_T    struct selinfo
 #define        MBUF_LEN(m)     ((m)->m_pkthdr.len)
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to