spin_lock behavior
Prajosh Premdas
premdas.prajosh at gmail.com
Fri Nov 4 02:33:39 EDT 2011
Hi
I am running with preemption on.
Jeff, but when i tried this on x86 machine my kernel just froze. How is
that happening?
On Fri, Nov 4, 2011 at 3:41 AM, Jeff Haran <jharan at bytemobile.com> wrote:
> ** **
>
> ** **
>
> *From:* kernelnewbies-bounces at kernelnewbies.org [mailto:
> kernelnewbies-bounces at kernelnewbies.org] *On Behalf Of *Prajosh Premdas
> *Sent:* Wednesday, November 02, 2011 2:02 AM
> *To:* kernelnewbies at kernelnewbies.org
> *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 = 0; *****
>
> * 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****
>
> ** **
>
--
Regards,
Prajosh Premdas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20111104/9aa540cb/attachment-0001.html
More information about the Kernelnewbies
mailing list