Re: [PATCH v0] add nano semaphore in kernel

Hillf Danton
2011-01-04T14:18:52Z

On Tue, Jan 4, 2011 at 10:03 PM, Pavel Machek <pavel@ucw.cz> wrote:
> Hi!
>
>> +/*
>> + * nano_semaphore_down - acquire the nano semaphore
>> + * @s: the nano semaphore to be acquired
>> + * @nano_secs: the nano seconds to wait if necessary,
>> + *           could be zero if want to wait as long as possible.
>> + *
>> + * Returns >0 if acquired successfully, <=0 otherwise.
>> + *
>> + * Note unlike down() in semaphore, nano_semaphore_down is not looping until
>> + * the nano semaphore is hold, but simply reports the result. And the callers
>> + * could, if they like, loop in simple manner, for instance,
>> + *   while (1 != nano_semaphore_down(s, 800));
>> + *   do_home_work();
>> + *   nano_semaphore_up(s);
>
> But thats spinlock, not semaphore, right?
>

Though spin lock involved, the caller has to sleep 800ns per loop.

> Also, your example does not use the API right -- according to
> description, 42 is correct 'semaphore acquired' reply...
>

As I understand, the example, though could be totally removed, does
not show the recommended usage of nano semaphore, but expresses the
difference from semaphore. The recommended however looks

nano_semaphore_down(s, 0);
do_home_work();
nano_semaphore_up(s);

if you like to wait as long as possible.

Cheers
Hillf