lkml.org 
[lkml]   [2005]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: SMP syncronization on AMD processors (broken?)
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 majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-10-06 17:57    [W:0.306 / U:0.128 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site