On Thu, Sep 17, 2009 at 11:45 PM, Pei Lin <[email protected]> wrote:
> 2009/9/18 Leonidas . <[email protected]>: > > > > > > On Thu, Sep 17, 2009 at 9:43 PM, Michael Blizek > > <[email protected]> wrote: > >> > >> Hi! > >> > >> On 17:20 Thu 17 Sep , Leonidas . wrote: > >> > Hi List, > >> > > >> > I am aware of the fact that in interrupt context one should not use > >> > mutexes/semaphore > >> > and should stick to spinlocks. > >> > >> Yes, exactly. > >> > >> > I am developing a module which exposes interfaces which could be > called > >> > from > >> > any/all > >> > contexts. And I manipulate complex data structures in my functions. > >> > Being on > >> > safer side > >> > I should stick to spinlocks. But in most of the cases it would not be > >> > needed, meaning my > >> > functions would get called mostly from process contexts, so spinlocks > >> > sounds > >> > wasteful > >> > since my critical sections are long and painful. > >> > >> Is there any way to view your code? > >> > >> 1) Executing long functions in interrupt context is bad, because this > >> introduces latencies into the system. Try to put at least the big > >> functions > >> into a workqueue. > >> > >> 2) You can try to remove the locking outside of this module and make it > >> the > >> responsibility of the module user. > >> > >> -Michi > >> -- > >> programing a layer 3+4 network protocol for mesh networks > >> see http://michaelblizek.twilightparadox.com > >> > > > > Michi, > > > > Actually, I have not written any code yet, just pondering over design as > of > > now. > > Would start writing only once some of these rough edges are sorted out. > > > > Yes, I should ideally move out the big functions outside ISRs, but issue > > with my > > module is, I would not know from where I am getting called. My module > will > > just > > export apis which modules can call from whereever they want, and I cant > put > > it > > as a constraint that they should not call from ISRs, my module is going > to > > be bit > > like profiling module so a user might actually want to call it from ISR > to > > profile it. > > > > > > Can I do following? > > > As soon as I enter my functions, I check whether I am running in interupt > > context > > or process context and spwan a tasklet/workqueue if I am in interrupt > > context or proceed in the > > same function if I am in process context. This would make more sense > right? > > > This problem is so weird i think. why u need do this check. And you > design your functions and why not know > the code run in which level ? linux is totally opensouce and > transparent for programmers. > > > But above point does not solve the locking issue? Does it? And I can't > move > > locking outside > > my module and ask user to do so since that might not be possible. I want > my > > module to be > > as reentrant as possible without making user do too many things. > > > > > > -Leo. > > > > > > > > > > > > -- > Best Regards > Lin > Lin, I am not sure I understand what you mean. I know I might not need to check for in_interrupt or not. But I still don't understand the you complete statement. -Leo.
