Hi All,
When ifp->if_ioctl() is invoked for the ioctl cmd SIOCADDMULTI,


IN_MULTI_LOCK() is called in one of the functions in_joingroup()  in the caller 
stack.



>From netinet/in_var.h, line 357 :  #define IN_MULTI_LOCK()         
>mtx_lock(&in_multi_mtx)



>From netinet/in_mcast.c
1098 in_joingroup(struct ifnet *ifp, const struct in_addr *gina,
1099     /*const*/ struct in_mfilter *imf, struct in_multi **pinm)
1100 {
1101         int error;
1102
 1103         IN_MULTI_LOCK();
1104         error = in_joingroup_locked(ifp, gina, imf, pinm);
1105         IN_MULTI_UNLOCK();
1106

This is also the case for SIOCDELMULTI, where the function holding  
"in_multi_mtx" lock is in_leavegroup()

This poses a problem in the driver in that the hardware dependent function 
performing it,  is not allowed to sleep() in case it needs to poll some state.

Question:

1.       If I want to implement any delays - for the above case - in the driver 
using DELAY(usec) macro, is there a maximum amount of time that the driver is 
allowed to complete this function? I am concerned that if it takes to too long 
I might run into a soft_lockup() situation.

2.       Is it o.k to defer the processing in a separate in a separate thread 
which can sleep() ?

Thanks
David S.



________________________________
This message and any attached documents contain information from QLogic 
Corporation or its wholly-owned subsidiaries that may be confidential. If you 
are not the intended recipient, you may not read, copy, distribute, or use this 
information. If you have received this transmission in error, please notify the 
sender immediately by reply e-mail and then delete this message.
_______________________________________________
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