RFR (L, but tedious) 8188220: Remove Atomic::*_ptr() uses and overloads from hotspot
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Wed Oct 11 17:44:34 UTC 2017
On 10/11/17 11:36 AM, Erik Österlund wrote:
> Hi Coleen,
>
> In classLoaderData.cpp:~167:
> There is a cast to Chunk* when loading _head, but _head is already
> Chunk*, so it seems like that should not need a cast. In fact, _head
> should probably be declared as Chunk *volatile as it is accessed
> concurrently.
Yes, you are right. I fixed it and now declare _head as Chunk* volatile
(star goes on type I think).
>
> In parNewGeneration.cpp:~1450:
> Atomic::add(-n, &_num_par_pushes);
> can now use Atomic::sub instead.
Fixed.
>
> g1PageBasedVirtualSpace.cpp:~249:
> Do you really need the (char*) cast for Atomic::add? Seems like it
> already is a char*, unless I missed something.
>
Nope. Missed that one.
> cpCache.hpp:
> Noticed the casts for &_f1 (declared as volatile Metadata*) to
> Metadata *volatile*. It seems to me like _f1 should instead be
> declared as Metaata* volatile, and remove the casts.
>
Fixed. You are right about the declaration for _f1. It should be
Metadata* volatile.
> Also noticed some copyright headers have not been updated, might want
> to have a look at that.
>
I forgot to say that I update the copyrights in my commit script.
> Otherwise, I think this looks good. Thank you again for doing this!
>
Thank you so much for reviewing all of this and making the templates
easy to use.
Coleen
> Thanks,
> /Erik
>
> On 2017-10-11 15:50, coleen.phillimore at oracle.com wrote:
>>
>> Please review version .02 which removes use of replace_if_null, but
>> not the function. A separate RFE can be filed to discuss that.
>>
>> open webrev at http://cr.openjdk.java.net/~coleenp/8188220.02/webrev
>>
>> Thanks,
>> Coleen
>>
>> On 10/11/17 7:07 AM, coleen.phillimore at oracle.com wrote:
>>>
>>>
>>> On 10/11/17 4:12 AM, Robbin Ehn wrote:
>>>> On 10/11/2017 10:09 AM, David Holmes wrote:
>>>>> On 11/10/2017 5:45 PM, Erik Österlund wrote:
>>>>>
>>>>> Removing the operation is a different argument to renaming it.
>>>>> Most of the above argues for removing it. :)
>>>>
>>>> +1 on removing
>>>
>>> Thank you for all your feedback. Erik best described what I was
>>> thinking. I will remove it then. There were not that many
>>> instances and one instance that people thought would be useful,
>>> needed the old return value.
>>>
>>> Coleen
>>>>
>>>> Thanks, Robbin
>>>>
>>>>>
>>>>> Cheers,
>>>>> David
>>>>> -----
>>>>>
>>>>>> I have not reviewed this completely yet - thought I'd wait with
>>>>>> that until we agree about replace_if_null, if that is okay.
>>>>>>
>>>>>> Thanks,
>>>>>> /Erik
>>>>>>
>>>>>> On 2017-10-11 05:55, David Holmes wrote:
>>>>>>> On 11/10/2017 1:43 PM, Kim Barrett wrote:
>>>>>>>>> On Oct 10, 2017, at 6:01 PM, coleen.phillimore at oracle.com wrote:
>>>>>>>>>
>>>>>>>>> Summary: With the new template functions these are unnecessary.
>>>>>>>>>
>>>>>>>>> 2. renamed Atomic::replace_if_null to
>>>>>>>>> Atomic::cmpxchg_if_null. I disliked the first name because
>>>>>>>>> it's not explicit from the callers that there's an underlying
>>>>>>>>> cas. If people want to fight, I'll remove the function and
>>>>>>>>> use cmpxchg because there are only a couple places where this
>>>>>>>>> is a little nicer.
>>>>>>>>
>>>>>>>> I'm still looking at other parts, but I want to respond to this
>>>>>>>> now.
>>>>>>>>
>>>>>>>> I object to this change. I think the proposed new name is
>>>>>>>> confusing,
>>>>>>>> suggesting there are two different comparisons involved.
>>>>>>>>
>>>>>>>> I originally called it something else that I wasn't entirely happy
>>>>>>>> with. When David suggested replace_if_null I quickly adopted
>>>>>>>> that as
>>>>>>>> I think that name exactly describes what it does. In particular, I
>>>>>>>> think "atomic replace if" pretty clearly suggests a test-and-set /
>>>>>>>> compare-and-swap type of operation.
>>>>>>>
>>>>>>> I totally agree. It's an Atomic operation, the implementation
>>>>>>> will involve something atomic, it doesn't matter if it is
>>>>>>> cmpxchg or something else. The name replace_if_null describes
>>>>>>> exactly what the function does - it doesn't have to describe how
>>>>>>> it does it.
>>>>>>>
>>>>>>> David
>>>>>>> -----
>>>>>>>
>>>>>>>> Further, I think any name involving "cmpxchg" is problematic
>>>>>>>> because
>>>>>>>> the result of this operation is intentionally different from
>>>>>>>> cmpxchg,
>>>>>>>> in order to better support the primary use-case, which is lazy
>>>>>>>> initialization.
>>>>>>>>
>>>>>>>> I also object to your alternative suggestion of removing the
>>>>>>>> operation
>>>>>>>> entirely and just using cmpxchg directly instead. I don't
>>>>>>>> recall how
>>>>>>>> many occurrences there presently are, but I suspect more could
>>>>>>>> easily
>>>>>>>> be added; it's part of a lazy initialization pattern similar to
>>>>>>>> DCLP
>>>>>>>> but without the locks.
>>>>>>>>
>>>>>>
>>>
>>
>
More information about the hotspot-dev
mailing list