doubt about interrupts and spinlocks

Dave Tian dave.jing.tian at gmail.com
Fri Oct 24 12:00:12 EDT 2014


If you are talking about the same spin_lock, once it is locked, it is locked. Others (even from other CPUs) have to ‘spin' util the lock is freed.

-daveti


> On Oct 24, 2014, at 11:04 PM, Oscar Salvador <osalvador.vilardaga at gmail.com> wrote:
> 
> Hi!
> 
> I have a doubt about interrupts and spin locks.
> I'm not sure if I'm in the good way:
> 
> When an interrupt is raised, the kernel (through do_IRQ and etc) acknowledges the interrupt and locks this IRQ taking a spin lock, so any other cpu can not handle this interrupt, and then the kernel executes the handler, if there is a handler available for that interrupt.
> 
> When we are on the handler interrupt , maybe we need to lock the cpu till we finish( if we are in a network driver, may we need to process some TX/RX packets ), 
> so if we have to lock the code we can do a spin_lock().
> But with a spin_lock, even other CPU's can execute part of your code(code that is not part of the handler interrupt). 
> For example:
> 
> (this is an example in a network device driver)
> The system has to transmit a packet, so network subsystem calls ndo_start_xmit. Inside this function we take a lock disabling the interrupts(spin_lock_irqsave) because we have to do some private things, but suddenly an interrupt is raised and we go to the interrupt handler, we take a spin_lock, we do some work (processing some RX/TX packets), and exites from the interrupt handler, and then we come back to the ndo_start_xmit when we were.
> 
> As far I could understand( I have read http://www.makelinux.net/ldd3/chp-5-sect-5 <http://www.makelinux.net/ldd3/chp-5-sect-5> ), spin_lock_irqsave only disables the interrupts for the local cpu(where the code is executed), 
> so I think that another cpu took the handler interrupt.
> The problem is if I'm working with irq disabled, because I have to handle a private structure and suddenly interrupts is taking place, the interrupt can manipulate the code that I'm trying to keep safe.
> Is there any advice? Maybe that is happened because the code within my critical section on ndo_start_xmit has to be atomic? Otherwise it can go to sleep and I can lose my lock?
> 
> Thank you very much
> Oscar Salvador
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20141025/0d8ee412/attachment.html 


More information about the Kernelnewbies mailing list