Hi Slawa,

I think WITNESS is seeing a false positive, since those two are always different mutexes.

The actual deadlock you experience should be caused by something else. I have not been able to reproduce it locally (I have not tried that hard, to be honest). I am pretty sure that there is a lock inversion - one that may cause real deadlocks - when you use netmap pipes+kqueue and you don't pass NETMAP_NO_TX_POLL at NIOCREGIF time. The attached patch should solve this particular problem, but there may be others. May you please try it?

Cheers,
Giuseppe

Il 11/02/2016 14:34, Slawa Olhovchenkov ha scritto:
On Thu, Feb 11, 2016 at 10:11:59AM +0100, Giuseppe Lettieri wrote:

Il 10/02/2016 14:53, Slawa Olhovchenkov ha scritto:
On Wed, Feb 10, 2016 at 02:33:20PM +0100, Giuseppe Lettieri wrote:

Il 10/02/2016 12:59, Slawa Olhovchenkov ha scritto:
Can you look also on second issue?

PS: What need from me? May be open PR?

May you provide some example code that triggers the issue?

This is about 700 lines of code (not very clear), may be I can describe it?

I just need some code to trigger the problem locally. Don't worry about
the clarity and the line count, unless you cannot share the code for
other reasons.

I am attach source.
run as "prog if1 if2"
Got `acquiring duplicate lock of same type: "nm_kn_lock"` immediatly
after start.
Dead locking may be occur immediatly after start or may be need
traffic flooding.



--
Dr. Ing. Giuseppe Lettieri
Dipartimento di Ingegneria della Informazione
Universita' di Pisa
Largo Lucio Lazzarino 1, 56122 Pisa - Italy
Ph. : (+39) 050-2217.649 (direct) .599 (switch)
Fax : (+39) 050-2217.600
e-mail: g.letti...@iet.unipi.it
Index: dev/netmap/netmap.c
===================================================================
--- dev/netmap/netmap.c	(revision 287671)
+++ dev/netmap/netmap.c	(working copy)
@@ -2378,7 +2378,7 @@
 	 * XXX should also check cur != hwcur on the tx rings.
 	 * Fortunately, normal tx mode has np_txpoll set.
 	 */
-	if (priv->np_txpoll || want_tx) {
+	if ((priv->np_txpoll && !is_kevent) || want_tx) {
 		/*
 		 * The first round checks if anyone is ready, if not
 		 * do a selrecord and another round to handle races.
_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to