[RFR]: 8186578: Zero fails to build on linux-sparc due to sparc-specific code
Andrew Haley
aph at redhat.com
Mon Aug 28 10:18:39 UTC 2017
On 28/08/17 11:09, John Paul Adrian Glaubitz wrote:
> On 08/28/2017 11:54 AM, Andrew Haley wrote:
>> It certainly looks like this is wrong. The execution of memset with concurrent
>> readers while the memory is being zeroed is UB, so we need some kind of special
>> handling in the general case.
>
> Oh, I'm not saying it's wrong at all.
No, but I am.
> I was just wondering whether it's actually required for performance
> reasons or whether there are other, more fundamental problems
> underlying.
>
> After talking to Oracle's toolchain guy for Linux SPARC, I now know
> that we cannot glibc's memset in this case, especially not on newer
> SPARC CPUs.
Right, and we may have similar problems on other targets.
> I'm pretty sure this would work:
>>
>> inline void memset_with_concurrent_readers(void* to, int value, size_t size) {
>> volatile char *dest = to;
>> for (int i = 0; i < count; i++)
>> *dest++ = value;
>> }
>>
>> but its performance would be awful.
>
> My suggestion would be to move
> memset_with_concurrent_readers_sparc.cpp into a generic place in the
> source tree where it can be used for both the server and the zero
> builds on Linux SPARC.
Do you really have to move it, though? Can't you #include it from
zero? It very much is machine-dependent code.
--
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the hotspot-dev
mailing list