[RFC] locking/rwsem: dont wake up wwaiter in case of lock holder

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

 



In the slowpath of down for write, we bail out in case of signal received and
try to wake up any pending waiter but it makes no sense to wake up a write
waiter given any lock holder, either write or read.

The RFC is do nothing for wwaiter if any lock holder present - they will fill
their duty at lock release time.

Only for thoughts now.

Hillf

--- x/kernel/locking/rwsem.c
+++ y/kernel/locking/rwsem.c
@@ -418,6 +418,8 @@ static void rwsem_mark_wake(struct rw_se
 	waiter = rwsem_first_waiter(sem);
 
 	if (waiter->type == RWSEM_WAITING_FOR_WRITE) {
+		if (RWSEM_LOCK_MASK & atomic_long_read(&sem->count))
+			return;
 		if (wake_type == RWSEM_WAKE_ANY) {
 			/*
 			 * Mark writer at the front of the queue for wakeup.
--




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux