Messages in this thread | | | Date | Thu, 06 Oct 2005 17:53:42 +0200 | From | Eric Dumazet <> | Subject | Re: 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/
| |