Re: Re: locking and interrupts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 7, 2009 at 1:57 PM, er krishna <erkrishna@xxxxxxxxx> wrote:
>
>
> On Wed, Oct 7, 2009 at 12:45 PM, govind raj nayak <govind02@xxxxxxxxxxxxxx> 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.
>
>
> 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
>>
>
Krishna, you seem to be getting confused between kernel getting
preempted and kernel getting interrupted.
Any spin lock will disable kernel preemption.
If you use spin_lock() then it will just disable kernel preemption but
if you get any interrupt then its handler will get executed.
But if you use spin_lock_irqsave() then it will disable preemption
plus it will disable local interrupts.

I suggest you should read "Kernel Synchronization Methods" chapter
from Linux Kernel Development by Robert Love.


-Vinit

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux