Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 May 2012 11:41:25 -0700
From:      David Somayajulu <david.somayajulu@qlogic.com>
To:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, "freebsd-current@freebsd.org (freebsd-current@FreeBSD.org)" <freebsd-current@FreeBSD.org>, "freebsd-drivers@freebsd.org" <freebsd-drivers@freebsd.org>
Cc:        "davidcs@FreeBSD.org" <davidcs@FreeBSD.org>
Subject:   Ethernet Drivers: Question on ifp->if_ioctl invocation for SIOCADDMULTI and SIOCDELMULTI
Message-ID:  <75E1A2A7D185F841A975979B0906BBA67C7A229F49@AVEXMB1.qlogic.org>

next in thread | raw e-mail | index | archive | help
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 ca=
ller 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 =3D in_joingroup_locked(ifp, gina, imf, pinm);
1105         IN_MULTI_UNLOCK();
1106

This is also the case for SIOCDELMULTI, where the function holding  "in_mul=
ti_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 sta=
te.

Question:

1.       If I want to implement any delays - for the above case - in the dr=
iver using DELAY(usec) macro, is there a maximum amount of time that the dr=
iver 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 thre=
ad which can sleep() ?

Thanks
David S.



________________________________
This message and any attached documents contain information from QLogic Cor=
poration 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 n=
otify the sender immediately by reply e-mail and then delete this message.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?75E1A2A7D185F841A975979B0906BBA67C7A229F49>