Re: preemptible spinlock?

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

 



Thank you so much for kindly explaining the problem!
as Wonhyuk Yang and Max Filippov said, I didn't consider the case that
interrupt handler holds same lock.

there can be deadlock as you said.

2021년 4월 23일 (금) 오후 3:45, Max Filippov <jcmvbkbc@xxxxxxxxx>님이 작성:
>
> On Thu, Apr 22, 2021 at 11:28 PM Wonhyuk Yang <vvghjk1234@xxxxxxxxx> wrote:
> > > I think the main idea spinlock disables preemption is,
> >
> > > the other process that's spinning on the lock can acquire lock.
> >
> > > but in some implementations of spinlock, like qspinlock in x86 (or mcs lock),
> > > I think there's no need to disable preemption. because processes
> > > waiting for lock cannot acquire the lock before the lock holder hand
> > > over to other process.
> >
> > Are you talking about disabling local irq(ex. spin_lock_irqsave)?
> >
> > If so, think about the situation that a process holding the lock is preempted
> > by interrupt. And that interrupt handler tries to grab the spinlock.
> > It will lead to deadlock.
>
> Usually the word "preemption" is used when a task switch occurs and one task
> preempts another task. Interrupts and tasklets are not usually described with
> this word.
>
> Now if an interrupt handler may need to acquire a lock that may also be
> acquired by a task then the task must use spin_lock_irq or
> spin_lock_irqsave to avoid the possibility of a deadlock. This is documented
> in Documentation/kernel-hacking/locking.rst
>
> Going back to the original question:
>
> > > but in some implementations of spinlock, like qspinlock in x86 (or mcs lock),
> > > I think there's no need to disable preemption. because processes
> > > waiting for lock cannot acquire the lock before the lock holder hand
> > > over to other process.
>
> Imagine what happens if a task acquires a spinlock, gets interrupted,
> task switch happens in the interrupt (remember, preemption is enabled),
> and the new task tries to acquire the same spinlock on the same CPU?
>
> --
> Thanks.
> -- Max

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[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