RE: spin_lock behavior

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

 



 

 

From: kernelnewbies-bounces@xxxxxxxxxxxxxxxxx [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Prajosh Premdas
Sent: Wednesday, November 02, 2011 2:02 AM
To: kernelnewbies@xxxxxxxxxxxxxxxxx
Subject: spin_lock behavior

 

Hi 

 

I wrote a sample module which looked like this and i expected the module to hang as i have used 2 spin_lock simultaneously. But i find the print after the second spin_lock being printed and the module works perfectly fine. Can any body please help me in understanding this? I got this problem from a driver i wrote and had a typo "spin_lock" instead of "spin_unlock" the driver worked fine and i caught the mistake only during a review 

 

#include <linux/module.h>

#include <linux/spinlock.h>

 

struct sp_q {

spinlock_t spinlock;

uint8_t data;

};

 

static int __init sp_lck_init(void)

{

 

   struct sp_q test;

   

   /* Spin lock Init */

 

   spin_lock_init(&test.spinlock);

    

   printk("<1>Test start\n");

   

   spin_lock(&test.spinlock);

   test.data = ""   

   spin_lock(&test.spinlock);   

   

   printk("<1>How come???\n");

   return 0;

 

}

 

static void __exit sp_lck_exit(void)

{

 

}

 

module_init(sp_lck_init);

module_exit(sp_lck_exit);

MODULE_LICENSE("GPL");

 

--
Regards,

Prajosh Premdas

 

On single processor systems, spin_lock() doesn’t actually spin on anything.

 

The term spin_lock() is a bit of a misnomer in my opinion as it implies that some sort of spinning will go on if the lock has already been taken.

 

It really means, sort of, “disable preemption, then serialize access on this variable among other threads on other CPUs, and I promise not to try to take this lock in any top or bottom half context on this CPU.”

 

Of course, that would make for an unwieldy function name, so its call spin_lock().

 

Jeff Haran

 

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://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