Re: [x86] Unify semaphore_32.S and rwlock_64.S

From: H. Peter Anvin
Date: Wed Jan 20 2010 - 19:02:38 EST


On 01/20/2010 03:57 PM, Linus Torvalds wrote:
>
>
> On Wed, 20 Jan 2010, Christoph Lameter wrote:
>>
>> Well 2^32 readers is a bit large anyways. If we are satisifed with 2^30
>> (only a billion) then it works with the same code.
>
> Yes, that's what I would suggest. Make the constants be (for the 64-bit
> case)
>
> #define RWSEM_UNLOCKED_VALUE 0x00000000
> #define RWSEM_ACTIVE_BIAS 0x00000001
> #define RWSEM_ACTIVE_MASK 0x3fffffff
> #define RWSEM_WAITING_BIAS (~RWSEM_ACTIVE_MASK)
> #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
> #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
>
> and now all the constants should be expressable as 32-bit (signed) values.
>
> Side note: it might be interesting to keep the rwsem_count_t be a config
> option on x86-64 too, so this would _not_ necessarily always be a "x86-32"
> vs "x86-64" issue. A raw spinlock is 32-bit, which together with a 32-bit
> rwsem_count would make the resem's smaller. Does it matter? Maybe not. But
> we might at some point decide that it's worth limiting number of threads
> to 32k in certain configurations, so I'd keep my options open.
>
> So make the size of the counter be a CONFIG_RWSEM_LARGE thing, rather than
> a 32-bit vs 64-bit thing. And just start out with making x86-64 select it,
> but leaving the option open to use the 32-bit version on x86-64 too?
>

I'm somewhat unhappy about that notion, mostly because it means Yet
Another Thing To Verify[TM]. I would like to look at the relative code
sizes of 2^31 and 2^30, however, if all it means is that *one*
instruction in *one* asm has to be different, I'd rather leave it at 2^31.

-hpa

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/