Hugh Dickins a écrit :
On Thu, 6 Oct 2005, Linus Torvalds wrote:
If you want to notify another CPU that you want the spinlock, then you
need to set the "flag" variable _outside_ of the spinlock.
Spinlocks are not fair, not by a long shot. They never have been, and they
never will. Fairness would be extremely expensive indeed.
That reminds me: ought cond_resched_lock to be doing something more?
int cond_resched_lock(spinlock_t *lock)
{
int ret = 0;
if (need_lockbreak(lock)) {
spin_unlock(lock);
cpu_relax();
ret = 1;
spin_lock(lock);
}
-
Isnt it funny that some bugs can spot other bugs ? :)
break_lock should be declared atomic_t and used like that :
void __lockfunc _##op##_lock(locktype##_t *lock)
{
preempt_disable();
for (;;) {
if (likely(_raw_##op##_trylock(lock)))
break;
preempt_enable();
atomic_inc(&(lock)->break_lock);
while (!op##_can_lock(lock))
cpu_relax();
preempt_disable();
atomic_dec(&(lock)->break_lock);
}
}
Eric
-
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/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]