Thiru,
Earlier, you commented that this was problematic:
mutex_enter(&ill->ill_lock);
for (ipif = ill->ill_ipif; ipif != NULL; ipif = ipif->ipif_next)
if (ipif->ipif_flags & IPIF_UP)
ip_rts_newaddrmsg(cmd, 0, ipif, RTSQ_NONIPMP);
mutex_exit(&ill->ill_lock);
... and I agree. I *think* the fix is to simply remove the ill_lock calls
since the function in question is writer on the ill. However, before I do
that, I want to verify that being writer is indeed sufficient to walk all
of the ipifs. Inspecting the code, this appears to be the case, but some
seem to grab ill_lock in addition to being writer. Also, the
synchronization notes in ip.h say that only *ill_g_lock* is sufficient:
* Table of ipif_t members and their protection
*
* ipif_next ill_g_lock ill_g_lock
* ...
Thanks,
--
meem