summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lokesh Gidra <lokeshgidra@google.com> 2022-05-18 04:52:24 +0000
committer Lokesh Gidra <lokeshgidra@google.com> 2022-08-10 18:06:05 +0000
commit1455bb566b7d8efc72c2e476733c8cf21ffd7247 (patch)
treebc52e4a37105810705942cd3c215457cb86b2c24
parent65429ce9bcaf8779f5d6cd14aeee4acd60006095 (diff)
Enable using nterp interpreter with userfaultfd GC
Test: build module and install on device Bug: 160737021 Change-Id: Iee69e8d5b486a0b6d1ce49b8c5e09ab1727f8a6f
-rw-r--r--runtime/interpreter/interpreter_cache-inl.h4
-rw-r--r--runtime/interpreter/mterp/nterp.cc2
-rw-r--r--runtime/thread-inl.h2
-rw-r--r--runtime/thread.h2
4 files changed, 5 insertions, 5 deletions
diff --git a/runtime/interpreter/interpreter_cache-inl.h b/runtime/interpreter/interpreter_cache-inl.h
index 1dda78b0ab..269f5fa9ab 100644
--- a/runtime/interpreter/interpreter_cache-inl.h
+++ b/runtime/interpreter/interpreter_cache-inl.h
@@ -37,9 +37,9 @@ inline void InterpreterCache::Set(Thread* self, const void* key, size_t value) {
DCHECK(self->GetInterpreterCache() == this) << "Must be called from owning thread";
// For simplicity, only update the cache if weak ref accesses are enabled. If
- // they are disabled, this means the GC is processing the cache, and is
+ // they are disabled, this means the CC GC could be processing the cache, and
// reading it concurrently.
- if (gUseReadBarrier && self->GetWeakRefAccessEnabled()) {
+ if (!gUseReadBarrier || self->GetWeakRefAccessEnabled()) {
data_[IndexOf(key)] = Entry{key, value};
}
}
diff --git a/runtime/interpreter/mterp/nterp.cc b/runtime/interpreter/mterp/nterp.cc
index 3938d54d62..ef916a9aa2 100644
--- a/runtime/interpreter/mterp/nterp.cc
+++ b/runtime/interpreter/mterp/nterp.cc
@@ -34,7 +34,7 @@ namespace art {
namespace interpreter {
bool IsNterpSupported() {
- return !kPoisonHeapReferences && gUseReadBarrier;
+ return !kPoisonHeapReferences;
}
bool CanRuntimeUseNterp() REQUIRES_SHARED(Locks::mutator_lock_) {
diff --git a/runtime/thread-inl.h b/runtime/thread-inl.h
index a3ac1e763c..4110ed2851 100644
--- a/runtime/thread-inl.h
+++ b/runtime/thread-inl.h
@@ -373,7 +373,7 @@ inline bool Thread::PushOnThreadLocalAllocationStack(mirror::Object* obj) {
}
inline bool Thread::GetWeakRefAccessEnabled() const {
- CHECK(gUseReadBarrier);
+ DCHECK(gUseReadBarrier);
DCHECK(this == Thread::Current());
WeakRefAccessState s = tls32_.weak_ref_access_enabled.load(std::memory_order_relaxed);
if (LIKELY(s == WeakRefAccessState::kVisiblyEnabled)) {
diff --git a/runtime/thread.h b/runtime/thread.h
index 60fd076c4d..6b1c16c907 100644
--- a/runtime/thread.h
+++ b/runtime/thread.h
@@ -1058,7 +1058,7 @@ class Thread {
bool GetWeakRefAccessEnabled() const; // Only safe for current thread.
void SetWeakRefAccessEnabled(bool enabled) {
- CHECK(gUseReadBarrier);
+ DCHECK(gUseReadBarrier);
WeakRefAccessState new_state = enabled ?
WeakRefAccessState::kEnabled : WeakRefAccessState::kDisabled;
tls32_.weak_ref_access_enabled.store(new_state, std::memory_order_release);