Question regarding spinlock

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

 



Hello to the list,

I got a question about spinlocks. Here is some pseudo-code:

my_external_int_handler(...)
{
   spin_lock(&my_lock);
   // do things...
   spin_unlock(&my_lock);
}

my_ioctl_handler(ioctl_value)
{
   switch(ioctl_value)
   {
      case xy:
            spin_lock_irqsave(&my_lock, flags);
               // do stuff
            spin_unlock_irqsave(&my_lock, flags);
      break;
   }
}

I just wan't to ensure that the interrupt is finished before I handle the IOCTL request, so that I'm not running into a race condition that would a affect an ring buffer. But what happens when an interrupt signal is triggered at the external interrupt pin, does spin_lock_irqsave que the interrupt? Or does it dismiss the interrupt? Does spinlock_irqsave mean I would miss an interrupt? If so, spinlock won't be the right thing to do...

What I need is something like:
while(interrupt_working){ sleep(); }

How to do right?

Kind regards,
Ole

--
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