RFR (S): 8026478: -XX:+VerifyAdapterSharing is broken
Christian Thalinger
christian.thalinger at oracle.com
Thu Oct 24 09:24:21 PDT 2013
src/share/vm/runtime/sharedRuntime.cpp:
+ bool contains_all_checks = (StubRoutines::code2() != NULL) || !VerifyAdapterCalls;
Could you move the !VerifyAdapterCalls check to here:
+ if (contains_all_checks) {
And I still don’t know what “checks” means in this context. Anyway, this looks good.
On Oct 24, 2013, at 5:30 AM, Albert Noll <albert.noll at oracle.com> wrote:
> Hi John,
>
> thank you for looking at this. You are right, the changes to free_entry are not correct when -XX:VerifyAdapterSharing is
> specified.
>
> An alternative way to solve the problem is to add entrys only if the entry contains all checks and
> -XX:+VerifyAdapterCalls is specified. With this version, we also do not need the _contains_all_checks
> field in AdapterHandlerEntry.
>
> What do you think about this version?
> http://cr.openjdk.java.net/~anoll/8026478/webrev.04/
> Best,
> Albert
>
>
> On 23.10.2013 18:59, John Rose wrote:
>> I have a question: The amended free_entry function indirectly unlinks the selected 'entry', but may also unlink other entries with the same hash and fingerprint. Isn't this working against the use for free_entry, where a pre-existing shared_entry is to be favored and returned? Won't the shared_entry be unlinked also? That would seem to lead to a storage leak.
>>
>> (Minor style nit: You code the hash comparison and key comparison as nested ifs; they would be just as readable connected by an '&&', and with less nesting.)
>>
>> — John
>>
>> On Oct 23, 2013, at 6:49 AM, Albert Noll <albert.noll at oracle.com> wrote:
>>
>>> Hi,
>>>
>>> unfortunately, the patch was not correct, as revealed by jprt.
>>> The problem was that entries into the hashmap are not removed
>>> correctly.
>>>
>>> This version fixes the problem. The patch is currently in jprt.
>>> So far, everything looks good.
>>>
>>> Many thanks for another round. Here is the updated webrev:
>>> http://cr.openjdk.java.net/~anoll/8026478/webrev.03/
>>>
>>> Best,
>>> Albert
>>>
>>>
>>> On 16.10.2013 19:43, Christian Thalinger wrote:
>>>> It would be nice to have a comment on this guy:
>>>> + bool _contains_all_checks;
>>>> No need for another webrev if you decide to add the comment.
>>>>
>>>> Looks good.
>>>>
>>>> On Oct 15, 2013, at 11:02 PM, Albert Noll <albert.noll at oracle.com> wrote:
>>>>
>>>>> Forgot to adjust the comment. This version should be fine.
>>>>>
>>>>> http://cr.openjdk.java.net/~anoll/8026478/webrev.02/
>>>>>
>>>>> Albert
>>>>>
>>>>> On 15.10.2013 21:03, Vladimir Kozlov wrote:
>>>>>> Albert,
>>>>>>
>>>>>> contains_all_stubs name is incorrect. It should be contains_all_checks. Adapter code does not have stubs in it.
>>>>>>
>>>>>> I think the next check should be:
>>>>>>
>>>>>> bool contains_all_checks = (StubRoutines::code2() != NULL) || !VerifyAdapterCalls;
>>>>>>
>>>>>> because code does not change when VerifyAdapterCalls is false.
>>>>>> Then you don't need to check VerifyAdapterCalls in next condition:
>>>>>>
>>>>>> + if ((VerifyAdapterCalls || VerifyAdapterSharing) && !entry->contains_all_checks()) {
>>>>>>
>>>>>> And we need to regenerate adapter regardless VerifyAdapterSharing because, as you said, VerifyAdapterCalls potentially reports a false error if check for code2 is not generated.
>>>>>>
>>>>>> So the condition should be simple "if (!entry->contains_all_checks())".
>>>>>>
>>>>>> Could you leave next lines unchanged (use 2 lines for arguments)?:
>>>>>> ! buffer.insts()->initialize_shared_locs((relocInfo*)buffer_locs,
>>>>>>
>>>>>> sizeof(buffer_locs)/sizeof(relocInfo));
>>>>>> MacroAssembler _masm(&buffer);
>>>>>>
>>>>>> Cleanup is fine.
>>>>>>
>>>>>> Thanks,
>>>>>> Vladimir
>>>>>>
>>>>>> On 10/15/13 4:14 AM, Albert Noll wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> could I have reviews for this small patch?
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8026478
>>>>>>> webrev: http://cr.openjdk.java.net/~anoll/8026478/webrev.00/
>>>>>>> <http://cr.openjdk.java.net/%7Eanoll/8026478/webrev.00/>
>>>>>>>
>>>>>>> Problem: This flag is broken. The reason is that adapters
>>>>>>> (gen_i2c_adapter()) that are generated during VM startup do not include
>>>>>>> the range for StubRoutines::code2() if -XX:+VerifyAdapterCalls is
>>>>>>> specified. StubRoutines::code2() is only allocated later during startup;
>>>>>>> consequently, code2() is NULL. As a result, the size of the generated
>>>>>>> adapter as well as the code itself does not mactch.
>>>>>>>
>>>>>>> Solution: Defer check (VerifyAdapterSharing) until VM is initialzied.
>>>>>>> Note that this patch also fixes potential issues with
>>>>>>> -XX:+VerifyAdapterCalls, which is a dignostic flag. The patch also
>>>>>>> removes some unused field of VerifyAdapterSharing.
>>>>>>>
>>>>>>>
>>>>>>> Many thanks in advance,
>>>>>>> Albert
>>>>>>> **
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131024/0b0d0823/attachment.html
More information about the hotspot-compiler-dev
mailing list