Ivo Vachkov wrote:
panic: mtx_lock() of spin mutex 'some_strange_chars' ../../../net/route.c:114

ether_demux() at ether_demux+
my_func() at my_func+
rtalloc_ign() at rtalloc_ign+
_mtx_lock_flags() at _mtx_lock_flags+
panic() at panic+

I do not include GIANT_REQUIRED in my code. Can you propose a solution
or a pointer to information where I can make myself familiar with the
networking code locking ... besides 'man 9 locking' and related.

It really isn't as simple as 'read this doc' because the code is subject to change - the code *is* the reference - it is constantly evolving. If you want to contribute docs, please feel free, Robert may have something lying around.

How is ether_demux() calling your function, and does ether_input() appear in this call trace? This is counterintuitive and I don't really have enough data to go on.

Looking at the code, it seems your backtrace hits the RTFREE() call when trying to allocate an rtentry through rtalloc_ign(), are you attempting to cache the results of a previous call which may still be locked?

On a more general note.

I suggest is that you *do not* hold any locks when calling ether_demux() for whatever reason. I wouldn't recommend calling that function directly - the only things outside of the ethernet paths which do this are dummynet and netgraph. tap(4) doesn't - it dispatches through ether_input().

When re-entering the bottom of the stack in this way, you *should not* hold any locks. rtalloc_ign() currently acquires a lock on its rtentry by default, please release it before reentering the bottom half of the network stack.

regards,
BMS
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to