Skip to contentSkip to conversation

a question about __down() in Linux/arch/i386/kernel/semaphore.c

DISCUSSION Edward Shao \(邵治國\) 2 participants 3 messages Aug 5, 2002

lore
Share & tools
lore
#0 lore raw

Hi,

I have a question about __down() in kernel 2.4.18
(Linux/arch/i386/kernel/semaphore.c)
I found the last line of __down() is
wake_up(&sem->wait);
but in kernel 2.5.28, i didn't see this line..
is this line necessary in kernel 2.4.18?
why?

Thank you very much.

Best Regard!!!

-Edward Shao-

#1 lore raw

sorry, i found it!
wake_up_locked(&sem->wait);
but why do we need to wake up the sleepers again?
Thank you very much.

-Edward Shao-

----- Original Message -----
From: "Edward Shao (邵治國)" <[email protected]>
To: <[email protected]>
Sent: Monday, August 05, 2002 10:33 PM
Subject: a question about __down() in Linux/arch/i386/kernel/semaphore.c

Quoted 24 lines

Hi,

I have a question about __down() in kernel 2.4.18
(Linux/arch/i386/kernel/semaphore.c)
I found the last line of __down() is
wake_up(&sem->wait);
but in kernel 2.5.28, i didn't see this line..
is this line necessary in kernel 2.4.18?
why?

Thank you very much.

Best Regard!!!

(quoted diff) +0 -2
-Edward Shao-
 
 
-

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

#2 lore raw
Quoted 5 lines · Edward Shao \(ªòªv°ê\)

sorry, i found it!
wake_up_locked(&sem->wait);
but why do we need to wake up the sleepers again?
Thank you very much.

Quoted 26 lines

-Edward Shao-

----- Original Message -----
From: "Edward Shao (ªòªv°ê)" <[email protected]>
To: <[email protected]>
Sent: Monday, August 05, 2002 10:33 PM
Subject: a question about __down() in Linux/arch/i386/kernel/semaphore.c

Quoted 17 lines

Hi,

I have a question about __down() in kernel 2.4.18
(Linux/arch/i386/kernel/semaphore.c)
I found the last line of __down() is
wake_up(&sem->wait);
but in kernel 2.5.28, i didn't see this line..
is this line necessary in kernel 2.4.18?
why?

Thank you very much.

Best Regard!!!

-Edward Shao-

The quick answer: so we don't miss waking someone up. But, seriously, the semaphore code is very subtle.

This semaphore implementation allows more than one process to be in the critical section at a time (a.k.a. a counting semaphore). In order to support those semantics, more than one wakeup may occur before a process is pulled off the wake_q and changed to running. Because the process that is waiting to run (in the __down() code) is responsible for pulling itself off the wait_q, if the 2 __up()s happen before the __down() can finish, the 2 __up()s will wakeup the same process twice. So, the __down() code needs to protect agaist this.

Signature · 2 lines
Bob Miller					Email: [email protected]
Open Source Development Lab			Phone: 503.626.2455 Ext. 17