Skip to content

Commit b8b2e0e

Browse files
A few more fixes regarding code style and uninterruptible.
1 parent 45c07bb commit b8b2e0e

File tree

7 files changed

+31
-60
lines changed

7 files changed

+31
-60
lines changed

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/GCImpl.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.graalvm.word.WordFactory;
4545

4646
import com.oracle.svm.core.AlwaysInline;
47-
import com.oracle.svm.core.MemoryWalker;
4847
import com.oracle.svm.core.NeverInline;
4948
import com.oracle.svm.core.RuntimeAssertionsSupport;
5049
import com.oracle.svm.core.SubstrateGCOptions;
@@ -100,7 +99,6 @@
10099
public final class GCImpl implements GC {
101100
private final GreyToBlackObjRefVisitor greyToBlackObjRefVisitor = new GreyToBlackObjRefVisitor();
102101
private final GreyToBlackObjectVisitor greyToBlackObjectVisitor = new GreyToBlackObjectVisitor(greyToBlackObjRefVisitor);
103-
private final BlackenImageHeapRootsVisitor blackenImageHeapRootsVisitor = new BlackenImageHeapRootsVisitor();
104102
private final RuntimeCodeCacheWalker runtimeCodeCacheWalker = new RuntimeCodeCacheWalker(greyToBlackObjRefVisitor);
105103
private final RuntimeCodeCacheCleaner runtimeCodeCacheCleaner = new RuntimeCodeCacheCleaner();
106104

@@ -1024,21 +1022,22 @@ private void blackenImageHeapRoots() {
10241022

10251023
Timer blackenImageHeapRootsTimer = timers.blackenImageHeapRoots.open();
10261024
try {
1027-
HeapImpl.getHeapImpl().walkNativeImageHeapRegions(blackenImageHeapRootsVisitor);
1025+
blackenImageHeapRoots(HeapImpl.getImageHeapInfo());
1026+
if (AuxiliaryImageHeap.isPresent()) {
1027+
ImageHeapInfo auxImageHeapInfo = AuxiliaryImageHeap.singleton().getImageHeapInfo();
1028+
if (auxImageHeapInfo != null) {
1029+
blackenImageHeapRoots(auxImageHeapInfo);
1030+
}
1031+
}
10281032
} finally {
10291033
blackenImageHeapRootsTimer.close();
10301034
}
10311035
}
10321036

1033-
private class BlackenImageHeapRootsVisitor implements MemoryWalker.ImageHeapRegionVisitor {
1034-
@Override
1035-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
1036-
public <T> boolean visitNativeImageHeapRegion(T region, MemoryWalker.NativeImageHeapRegionAccess<T> access) {
1037-
if (access.containsReferences(region) && access.isWritable(region)) {
1038-
access.visitObjects(region, greyToBlackObjectVisitor);
1039-
}
1040-
return true;
1041-
}
1037+
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
1038+
private void blackenImageHeapRoots(ImageHeapInfo imageHeapInfo) {
1039+
ImageHeapWalker.walkPartitionInline(imageHeapInfo.firstWritableReferenceObject, imageHeapInfo.lastWritableReferenceObject, greyToBlackObjectVisitor, true);
1040+
ImageHeapWalker.walkPartitionInline(imageHeapInfo.firstWritableHugeObject, imageHeapInfo.lastWritableHugeObject, greyToBlackObjectVisitor, false);
10421041
}
10431042

10441043
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/HeapImpl.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,6 @@ public boolean walkObjects(ObjectVisitor visitor) {
191191
return walkImageHeapObjects(visitor) && walkCollectedHeapObjects(visitor);
192192
}
193193

194-
/** Walk the regions of the heap. */
195-
boolean walkMemory(MemoryWalker.Visitor visitor) {
196-
VMOperation.guaranteeInProgressAtSafepoint("must only be executed at a safepoint");
197-
return walkNativeImageHeapRegions(visitor) && getYoungGeneration().walkHeapChunks(visitor) && getOldGeneration().walkHeapChunks(visitor) && getChunkProvider().walkHeapChunks(visitor);
198-
}
199-
200194
/** Tear down the heap and release its memory. */
201195
@Override
202196
@Uninterruptible(reason = "Tear-down in progress.")
@@ -470,12 +464,6 @@ public boolean walkCollectedHeapObjects(ObjectVisitor visitor) {
470464
return getYoungGeneration().walkObjects(visitor) && getOldGeneration().walkObjects(visitor);
471465
}
472466

473-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
474-
boolean walkNativeImageHeapRegions(MemoryWalker.ImageHeapRegionVisitor visitor) {
475-
return ImageHeapWalker.walkRegions(imageHeapInfo, visitor) &&
476-
(!AuxiliaryImageHeap.isPresent() || AuxiliaryImageHeap.singleton().walkRegions(visitor));
477-
}
478-
479467
@Override
480468
public void doReferenceHandling() {
481469
if (ReferenceHandler.isExecutedManually()) {

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/ImageHeapWalker.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ public final class ImageHeapWalker {
5151
private ImageHeapWalker() {
5252
}
5353

54-
@Uninterruptible(reason = "Bridge between uninterruptible and potentially interruptible code.", mayBeInlined = true, calleeMustBe = false)
5554
public static boolean walkRegions(ImageHeapInfo heapInfo, MemoryWalker.ImageHeapRegionVisitor visitor) {
5655
return visitor.visitNativeImageHeapRegion(heapInfo, READ_ONLY_PRIMITIVE_WALKER) &&
5756
visitor.visitNativeImageHeapRegion(heapInfo, READ_ONLY_REFERENCE_WALKER) &&
@@ -181,29 +180,24 @@ public String getRegionName(ImageHeapInfo region) {
181180
}
182181

183182
@Override
184-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
185183
public boolean containsReferences(ImageHeapInfo region) {
186184
return containsReferences;
187185
}
188186

189187
@Override
190-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
191188
public boolean isWritable(ImageHeapInfo region) {
192189
return isWritable;
193190
}
194191

195192
@Override
196193
@AlwaysInline("GC performance")
197-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
198194
public final boolean visitObjects(ImageHeapInfo region, ObjectVisitor visitor) {
199195
boolean alignedChunks = !hasHugeObjects;
200196
return ImageHeapWalker.walkPartitionInline(getFirstObject(region), getLastObject(region), visitor, alignedChunks);
201197
}
202198

203-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
204199
protected abstract Object getFirstObject(ImageHeapInfo info);
205200

206-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
207201
protected abstract Object getLastObject(ImageHeapInfo info);
208202
}
209203

@@ -214,13 +208,11 @@ final class ReadOnlyPrimitiveMemoryWalkerAccess extends MemoryWalkerAccessBase {
214208
}
215209

216210
@Override
217-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
218211
public Object getFirstObject(ImageHeapInfo info) {
219212
return info.firstReadOnlyPrimitiveObject;
220213
}
221214

222215
@Override
223-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
224216
public Object getLastObject(ImageHeapInfo info) {
225217
return info.lastReadOnlyPrimitiveObject;
226218
}
@@ -233,13 +225,11 @@ final class ReadOnlyReferenceMemoryWalkerAccess extends MemoryWalkerAccessBase {
233225
}
234226

235227
@Override
236-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
237228
public Object getFirstObject(ImageHeapInfo info) {
238229
return info.firstReadOnlyReferenceObject;
239230
}
240231

241232
@Override
242-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
243233
public Object getLastObject(ImageHeapInfo info) {
244234
return info.lastReadOnlyReferenceObject;
245235
}
@@ -252,13 +242,11 @@ final class ReadOnlyRelocatableMemoryWalkerAccess extends MemoryWalkerAccessBase
252242
}
253243

254244
@Override
255-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
256245
public Object getFirstObject(ImageHeapInfo info) {
257246
return info.firstReadOnlyRelocatableObject;
258247
}
259248

260249
@Override
261-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
262250
public Object getLastObject(ImageHeapInfo info) {
263251
return info.lastReadOnlyRelocatableObject;
264252
}
@@ -271,13 +259,11 @@ final class WritablePrimitiveMemoryWalkerAccess extends MemoryWalkerAccessBase {
271259
}
272260

273261
@Override
274-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
275262
public Object getFirstObject(ImageHeapInfo info) {
276263
return info.firstWritablePrimitiveObject;
277264
}
278265

279266
@Override
280-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
281267
public Object getLastObject(ImageHeapInfo info) {
282268
return info.lastWritablePrimitiveObject;
283269
}
@@ -290,13 +276,11 @@ final class WritableReferenceMemoryWalkerAccess extends MemoryWalkerAccessBase {
290276
}
291277

292278
@Override
293-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
294279
public Object getFirstObject(ImageHeapInfo info) {
295280
return info.firstWritableReferenceObject;
296281
}
297282

298283
@Override
299-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
300284
public Object getLastObject(ImageHeapInfo info) {
301285
return info.lastWritableReferenceObject;
302286
}
@@ -309,13 +293,11 @@ final class WritableHugeMemoryWalkerAccess extends MemoryWalkerAccessBase {
309293
}
310294

311295
@Override
312-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
313296
public Object getFirstObject(ImageHeapInfo info) {
314297
return info.firstWritableHugeObject;
315298
}
316299

317300
@Override
318-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
319301
public Object getLastObject(ImageHeapInfo info) {
320302
return info.lastWritableHugeObject;
321303
}
@@ -328,13 +310,11 @@ final class ReadOnlyHugeMemoryWalkerAccess extends MemoryWalkerAccessBase {
328310
}
329311

330312
@Override
331-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
332313
public Object getFirstObject(ImageHeapInfo info) {
333314
return info.firstReadOnlyHugeObject;
334315
}
335316

336317
@Override
337-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
338318
public Object getLastObject(ImageHeapInfo info) {
339319
return info.lastReadOnlyHugeObject;
340320
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/MemoryWalker.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,10 @@ public interface NativeImageHeapRegionAccess<T> {
6464

6565
String getRegionName(T region);
6666

67-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
6867
boolean containsReferences(T region);
6968

70-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
7169
boolean isWritable(T region);
7270

73-
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
7471
boolean visitObjects(T region, ObjectVisitor visitor);
7572
}
7673

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeCodeInfoMemory.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,22 +201,24 @@ private void rehashAfterUnregisterAt(int index) { // from IdentityHashMap: Knuth
201201
}
202202
}
203203

204+
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
204205
public void walkRuntimeMethodsDuringGC(CodeInfoVisitor visitor) {
205206
assert VMOperation.isGCInProgress() : "otherwise, we would need to make sure that the CodeInfo is not freeded by the GC";
206207
if (table.isNonNull()) {
207208
int length = NonmovableArrays.lengthOf(table);
208209
for (int i = 0; i < length;) {
209-
UntetheredCodeInfo info = NonmovableArrays.getWord(table, i);
210-
if (info.isNonNull()) {
211-
visitor.visitCode(CodeInfoAccess.convert(info));
210+
UntetheredCodeInfo untetheredInfo = NonmovableArrays.getWord(table, i);
211+
if (untetheredInfo.isNonNull()) {
212+
CodeInfo info = CodeInfoAccess.convert(untetheredInfo);
213+
callVisitor(visitor, info);
212214
}
213215

214216
/*
215217
* If the visitor removed the current entry from the table, then it is necessary to
216218
* visit the now updated entry one more time. However, this could have the effect
217219
* that some entries are visited more than once.
218220
*/
219-
if (info == NonmovableArrays.getWord(table, i)) {
221+
if (untetheredInfo == NonmovableArrays.getWord(table, i)) {
220222
i++;
221223
}
222224
}
@@ -228,23 +230,24 @@ public void walkRuntimeMethods(CodeInfoVisitor visitor) {
228230
if (table.isNonNull()) {
229231
int length = NonmovableArrays.lengthOf(table);
230232
for (int i = 0; i < length; i++) {
231-
UntetheredCodeInfo info = NonmovableArrays.getWord(table, i);
232-
if (info.isNonNull()) {
233-
Object tether = CodeInfoAccess.acquireTether(info);
233+
UntetheredCodeInfo untetheredInfo = NonmovableArrays.getWord(table, i);
234+
if (untetheredInfo.isNonNull()) {
235+
Object tether = CodeInfoAccess.acquireTether(untetheredInfo);
234236
try {
235-
callVisitor(visitor, info, tether);
237+
CodeInfo info = CodeInfoAccess.convert(untetheredInfo, tether);
238+
callVisitor(visitor, info);
236239
} finally {
237-
CodeInfoAccess.releaseTether(info, tether);
240+
CodeInfoAccess.releaseTether(untetheredInfo, tether);
238241
}
239-
assert info == NonmovableArrays.getWord(table, i);
242+
assert untetheredInfo == NonmovableArrays.getWord(table, i);
240243
}
241244
}
242245
}
243246
}
244247

245-
@Uninterruptible(reason = "Call the visitor, which may execute interruptible code.", calleeMustBe = false)
246-
private static void callVisitor(CodeInfoVisitor visitor, UntetheredCodeInfo info, Object tether) {
247-
visitor.visitCode(CodeInfoAccess.convert(info, tether));
248+
@Uninterruptible(reason = "Bridge between uninterruptible and potentially interruptible code.", mayBeInlined = true, calleeMustBe = false)
249+
private static void callVisitor(CodeInfoVisitor visitor, CodeInfo info) {
250+
visitor.visitCode(info);
248251
}
249252

250253
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/UninterruptibleUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ public static long abs(long a) {
437437

438438
public static class Byte {
439439
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
440+
@SuppressWarnings("cast")
440441
public static int toUnsignedInt(byte x) {
441442
return ((int) x) & 0xff;
442443
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/PlatformThreads.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,16 +566,19 @@ public ThreadLocalKey createUnmanagedThreadLocal() {
566566
throw VMError.shouldNotReachHere("Shouldn't call PlatformThreads.createNativeThreadLocal directly.");
567567
}
568568

569+
@SuppressWarnings("unused")
569570
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
570571
public void deleteUnmanagedThreadLocal(ThreadLocalKey key) {
571572
throw VMError.shouldNotReachHere("Shouldn't call PlatformThreads.deleteNativeThreadLocal directly.");
572573
}
573574

575+
@SuppressWarnings("unused")
574576
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
575577
public <T extends WordBase> T getUnmanagedThreadLocalValue(ThreadLocalKey key) {
576578
throw VMError.shouldNotReachHere("Shouldn't call PlatformThreads.getNativeThreadLocalValue directly.");
577579
}
578580

581+
@SuppressWarnings("unused")
579582
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
580583
public void setUnmanagedThreadLocalValue(ThreadLocalKey key, WordBase value) {
581584
throw VMError.shouldNotReachHere("Shouldn't call PlatformThreads.setNativeThreadLocalValue directly.");

0 commit comments

Comments
 (0)