Re: [rfc] "fair" rw spinlocks

Linus Torvalds
2009-11-30T16:07:18Z

On Mon, 30 Nov 2009, Nick Piggin wrote:
>
> Well the simple thing I tried earlier was a per-cpu array of nesting
> counter there. It's not _too_ expensive, but it does add another cacheline
> access and branch there. It seems to work in solving the livelock though.

So how did you do the nesting counter? Afaik, it needs to be something
like

local_irq_save(flags);
if (!get_cpu_var(tasklist_counter)++)
spin_lock(&tasklist_lock);
local_irq_restore(flags);

on the read_lock side (and the same in reverse on unlock). Which seems
quite a bit more expensive than what we have now. Especially on UP, but I
guess you can make it conditional on CONFIG_SMP (but that won't help
generic kernels).

Linus