The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* Questions on semaphores
@ 2002-09-04 21:29 Juan M. de la Torre
  2002-09-04 22:21 ` Bob Miller
  0 siblings, 1 reply; 2+ messages in thread
From: Juan M. de la Torre @ 2002-09-04 21:29 UTC (permalink / raw)
  To: linux-kernel


 Hi people, I have two question regarding the i386 semaphore implementation
 in kernel 2.4.19. 
 
 Please dont blame me if they are too obvius; i'm a newbie in kernel hacking
 :)

 The functions __down, __down_interruptible and __down_trylock (defined
 in arch/i386/kernel/semaphore.c) use the global spinlock
 'semaphore_lock' to access some fields of the semaphore they are
 working on:
 
 1) Is there any reason to do this?
 2) Wouldn't it be more scalable to use a per-semaphore lock instead a
    global spinlock?

 The function __down_trylock try to get the spinlock using
 spin_lock_irqsave, instead of using spin_lock_irq:

 1) why? :)

 Thanks in advance,
 Juanma

-- 
/jm


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Questions on semaphores
  2002-09-04 21:29 Questions on semaphores Juan M. de la Torre
@ 2002-09-04 22:21 ` Bob Miller
  0 siblings, 0 replies; 2+ messages in thread
From: Bob Miller @ 2002-09-04 22:21 UTC (permalink / raw)
  To: Juan M. de la Torre; +Cc: linux-kernel

On Wed, Sep 04, 2002 at 11:29:31PM +0200, Juan M. de la Torre wrote:
> 
>  Hi people, I have two question regarding the i386 semaphore implementation
>  in kernel 2.4.19. 
>  
>  Please dont blame me if they are too obvius; i'm a newbie in kernel hacking
>  :)
> 
>  The functions __down, __down_interruptible and __down_trylock (defined
>  in arch/i386/kernel/semaphore.c) use the global spinlock
>  'semaphore_lock' to access some fields of the semaphore they are
>  working on:
>  
>  1) Is there any reason to do this?

It was easy to do.

>  2) Wouldn't it be more scalable to use a per-semaphore lock instead a
>     global spinlock?
> 

Yes it would be more scalable, but not as much as you would think.
The __down, __down_interruptible and __down_trylock code only gets
invoked when the semaphore is contended  for.

>  The function __down_trylock try to get the spinlock using
>  spin_lock_irqsave, instead of using spin_lock_irq:
> 
>  1) why? :)
> 

The __down_trylock() code can be called with another lock held.  The
spin_lock_irqsave()/spin_lock_irqrestore() interface is used to restore
the irq value for the lock that may already be held.

>  Thanks in advance,
>  Juanma
> 
The code in the 2.5 tree was changed a while back to use the spinlock in
the wait_queue_head_t to replace the global semaphore spin lock.  So, this
has been "FIXED" in 2.5.

-- 
Bob Miller					Email: rem@osdl.org
Open Source Development Lab			Phone: 503.626.2455 Ext. 17

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-09-04 22:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-09-04 21:29 Questions on semaphores Juan M. de la Torre
2002-09-04 22:21 ` Bob Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox