Hi Viral, On Wed, Jan 5, 2011 at 2:23 PM, Viral Mehta <Viral.Mehta@xxxxxxxxxxxxxxx> wrote: > > Hi , > > I need your help to solve below confusion. > > 1. I know that spin_lock_irqsave, disables premption and local_irq. > 2. There is some below piece of kernel code running on Quad core Machine. > spin_lock_irqsave(&lock, flags); > some_large_critical_section //sleep of 5 minutes > //I know there should be as small as possible task in critical section > // treat this as an example only Note that you can't sleep while you hold a spinlock. You're not allowed to perform any type of blocking operations. If you're holding the spinlock for any significant length of time, then you're using the wrong design. > spin_lock_irqrestore(); > 3. One of the CPU core tries to execute this code and so acquires the lock. > 4. Now, second core is also goes to execute same piece of code and so will > keep spinning for lock > > Now, the question is > Will EVER second CPU core get chance to execute another task ? Not while it's holding the spinlock or waiting for the spinlock. > Ever if timeslice is over for the current task ? The time tick interrupt is what determines when the timeslice is over. Since you have interrupts disabled, the timer interrupt can't happen. > What if scheduler code is running on CPU core-3 and sees that > timeslice for task running on CPU core-2 has expired ? Each core only considers the timeslices for its own core. > I guess timeslice expire case is not as same as preemption. Or may be I am > terribly wrong. You shouldn't be holding a spinlock for periods of time approaching the length of a timeslice. The timer interrupt is what determines the end of a timeslice. No timer interrupt, no end of a timeslice. Preemption is also triggered by the timer interrupt, or by releasing a resource that a higher priority task is waiting for. Dave Hylands _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies