Date: Sat, 17 Mar 2007 15:11:37 -0700 From: John Polstra <jdp@polstra.com> To: Aniruddha Bohra <bohra@cs.rutgers.edu> Cc: freebsd-net@freebsd.org Subject: Re: ether_input question Message-ID: <45FC6799.2030101@polstra.com> In-Reply-To: <45FA98DD.3080205@cs.rutgers.edu> References: <45FA98DD.3080205@cs.rutgers.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Aniruddha Bohra wrote: > Hi, > In two drivers, fxp and em, the assumptions about entering the > ether_input routine are different. > From em_rxeof: > > #ifdef DEVICE_POLLING > EM_UNLOCK() > (*ifp->if_input)() > EM_UNLOCK() > #else > (*ifp->if_input)() > #endif > > While in fxp: > > FXP_UNLOCK() > (*ifp->if_input)() > FXP_LOCK() > > > My question is : > Does ether_input() assume it is the only thread executing the code? If > it is the case, what is the > reason for dropping the lock in the DEVICE_POLLING case? There is actually no difference between these cases. In the !DEVICE_POLLING case, the em driver does not hold its driver lock when it calls em_rxeof. The call is made from em_handle_rxtx, where you'll see that the driver has not acquired a lock when it calls em_rxeof. Thus, in all cases the if_input function is called without holding the driver lock. John
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45FC6799.2030101>