On Wed, Oct 7, 2009 at 2:20 PM, er krishna <erkris...@gmail.com> wrote:
> > > On Wed, Oct 7, 2009 at 1:57 PM, er krishna <erkris...@gmail.com> wrote: > >> >> >> On Wed, Oct 7, 2009 at 12:45 PM, govind raj nayak < >> govin...@rediffmail.com> wrote: >> >>> Yes, spinlock would automatically disable kernel preemption. >> >> >> >>>>>>I don't think so, otherwise what is the use of spin_lock_irq_save >> api, if spin_lock api does it ?. I mean if spin_lock api >>>>>>is >> disabling the kernel preemption, then can a newly occured interrupt will >> preempt currently executing process which >>>>>>has taken a spin lock by >> spin_lock() api. Just confirm my understanding. >> >> >>>>>>>I don't think all the spinlock api will disable kernel preemption. >> We must check in kernel code, that on which API >>>>>>>preemption is disable >> or if anybody knows, please mention those ones. >> >> >> >>> I was just giving theeoritical overview. As far as I know not all >>> synchronization constructs would disable the kernel preemption >> >> >> >> >>>>>>Yes, agreed. >> >>>>>>Can we say if preemption is disable but interrupts are not, then >> interrupt handler won't be able to preempt the currently executing process. >> >> >>>>>> I am just asking, if we have disable the interrupts on local >> processor by some api, and suddenly if higher priority >>>>>> process/ >> interrupt comes (the first process which is currently executing has >> acquired a spin lock by >>>>>>spin_lock_irq_save() api). I just want to >> know weather the higher priority process/interrupt will preempt the lower >> priority process or it will spin. >> > > > Sorry for this question, we can't apply spin locks in process context and > interrupt won't be able to preempt as it is disabled. > Again sorry, we need to take care weather the process can sleep or not, then only we can decide . Just concentrate on above first query which is as follows : I don't think so, otherwise what is the use of spin_lock_irq_save api, if spin_lock api does it ?. I mean if spin_lock api is disabling the kernel preemption, then can a newly occured interrupt will preempt currently executing process which has taken a spin lock by spin_lock() api. Just confirm my understanding. I don't think all the spinlock api will disable kernel preemption. We must check in kernel code, that on which API preemption is disable or if anybody knows, please mention those ones. > > > > > >> Just clear the confusion. >> >> >> Regards, >> Krishna >> >> >>> automatically (for instance when acquiring a big kernel lock). In >>> addition you could use preempt_enable() and preempt_disable() to explicitly >>> enable or disable kernel preemption. Thanks. >>> >>> -Govindraj >>> >>> On Wed, 07 Oct 2009 11:15:06 +0530 wrote >>> >Rajat San,Just asking (since i didn't see spinlock implementation in >>> kernel src),On Tue, Oct 6, 2009 at 5:52 PM, Rajat Jain wrote: >>> >>> Hello Govind, >>> >>> > What happens when you go for spin locks without >>> > disabling kernel preemption? Suppose you acquire >>> > a spin lock in a system call handler (a service >>> > routine on behalf of a user mode process) with >>> > kernel preemption enabled. >>> >>> This is not possible. Spin lock APIs disable kernel preemption >>> automatically.Spin lock APIs disables kernel preemption in all its api or >>> some specific apis only. Please confirm and elaborate. >>> >>> >>> Thanks, >>> >>> RajatBest regards,Krishna >>> >>> >>> <http://sigads.rediff.com/RealMedia/ads/click_nx.ads/www.rediffmail.com/signatureline....@middle?> >>> >> >> >