From 03c62e9ebecb69958eb4644cf99f8e4a586c2ead Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Tue, 8 Aug 2023 14:43:19 +0800 Subject: [PATCH 1/2] Fix for an upstream API change. --- mmtk/src/collection.rs | 10 +--------- mmtk/src/scanning.rs | 9 --------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/mmtk/src/collection.rs b/mmtk/src/collection.rs index f77092f..3cf417a 100644 --- a/mmtk/src/collection.rs +++ b/mmtk/src/collection.rs @@ -1,10 +1,10 @@ use crate::abi::GCThreadTLS; use crate::{mmtk, upcalls, Ruby}; +use mmtk::memory_manager; use mmtk::scheduler::*; use mmtk::util::{VMMutatorThread, VMThread, VMWorkerThread}; use mmtk::vm::{Collection, GCThreadContext}; -use mmtk::{memory_manager, MutatorContext}; use std::thread; pub struct VMCollection {} @@ -77,14 +77,6 @@ impl Collection for VMCollection { } } - fn prepare_mutator>( - _tls_worker: VMWorkerThread, - _tls_mutator: VMMutatorThread, - _m: &T, - ) { - // do nothing - } - fn vm_live_bytes() -> usize { (upcalls().vm_live_bytes)() } diff --git a/mmtk/src/scanning.rs b/mmtk/src/scanning.rs index 957e9ba..032e33e 100644 --- a/mmtk/src/scanning.rs +++ b/mmtk/src/scanning.rs @@ -9,8 +9,6 @@ use mmtk::{memory_manager, Mutator, MutatorContext}; pub struct VMScanning {} impl Scanning for VMScanning { - const SINGLE_THREAD_MUTATOR_SCANNING: bool = false; - fn support_edge_enqueuing(_tls: VMWorkerThread, _object: ObjectReference) -> bool { false } @@ -57,13 +55,6 @@ impl Scanning for VMScanning { // Do nothing } - fn scan_roots_in_all_mutator_threads( - _tls: VMWorkerThread, - _factory: impl RootsWorkFactory, - ) { - unreachable!(); - } - fn scan_roots_in_mutator_thread( tls: VMWorkerThread, mutator: &'static mut Mutator, From 392955fd5e97c74db8eb99728ba2528946a6f556 Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Wed, 9 Aug 2023 14:47:01 +0800 Subject: [PATCH 2/2] Remove unused upcalls. Also format the code. --- mmtk/src/abi.rs | 4 ++-- mmtk/src/collection.rs | 18 +++++++++++++++++- mmtk/src/scanning.rs | 2 +- mmtk/src/weak_proc.rs | 8 +++++--- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/mmtk/src/abi.rs b/mmtk/src/abi.rs index 3567b5f..e7640b0 100644 --- a/mmtk/src/abi.rs +++ b/mmtk/src/abi.rs @@ -342,8 +342,8 @@ pub struct RubyUpcalls { data: *mut libc::c_void, ), pub scan_vm_specific_roots: extern "C" fn(), - pub scan_thread_roots: extern "C" fn(), - pub scan_thread_root: extern "C" fn(mutator_tls: VMMutatorThread, worker_tls: VMWorkerThread), + pub scan_roots_in_mutator_thread: + extern "C" fn(mutator_tls: VMMutatorThread, worker_tls: VMWorkerThread), pub scan_object_ruby_style: extern "C" fn(object: ObjectReference), pub call_gc_mark_children: extern "C" fn(object: ObjectReference), pub call_obj_free: extern "C" fn(object: ObjectReference), diff --git a/mmtk/src/collection.rs b/mmtk/src/collection.rs index 3cf417a..2b788bb 100644 --- a/mmtk/src/collection.rs +++ b/mmtk/src/collection.rs @@ -1,5 +1,6 @@ use crate::abi::GCThreadTLS; +use crate::api::RubyMutator; use crate::{mmtk, upcalls, Ruby}; use mmtk::memory_manager; use mmtk::scheduler::*; @@ -10,12 +11,16 @@ use std::thread; pub struct VMCollection {} impl Collection for VMCollection { - fn stop_all_mutators(tls: VMWorkerThread, _mutator_visitor: F) + fn stop_all_mutators(tls: VMWorkerThread, mut mutator_visitor: F) where F: FnMut(&'static mut mmtk::Mutator), { (upcalls().stop_the_world)(tls); crate::binding().ppp_registry.pin_ppp_children(tls); + (upcalls().get_mutators)( + Self::notify_mutator_ready::, + &mut mutator_visitor as *mut F as *mut _, + ); } fn resume_mutators(tls: VMWorkerThread) { @@ -81,3 +86,14 @@ impl Collection for VMCollection { (upcalls().vm_live_bytes)() } } + +impl VMCollection { + extern "C" fn notify_mutator_ready(mutator_ptr: *mut RubyMutator, data: *mut libc::c_void) + where + F: FnMut(&'static mut mmtk::Mutator), + { + let mutator = unsafe { &mut *mutator_ptr }; + let mutator_visitor = unsafe { &mut *(data as *mut F) }; + mutator_visitor(mutator); + } +} diff --git a/mmtk/src/scanning.rs b/mmtk/src/scanning.rs index 032e33e..53ae710 100644 --- a/mmtk/src/scanning.rs +++ b/mmtk/src/scanning.rs @@ -62,7 +62,7 @@ impl Scanning for VMScanning { ) { let gc_tls = unsafe { GCThreadTLS::from_vwt_check(tls) }; Self::collect_object_roots_in("scan_thread_root", gc_tls, &mut factory, || { - (upcalls().scan_thread_root)(mutator.get_tls(), tls); + (upcalls().scan_roots_in_mutator_thread)(mutator.get_tls(), tls); }); } diff --git a/mmtk/src/weak_proc.rs b/mmtk/src/weak_proc.rs index 270d7bc..f63a58c 100644 --- a/mmtk/src/weak_proc.rs +++ b/mmtk/src/weak_proc.rs @@ -148,9 +148,11 @@ trait GlobalTableProcessingWork { // `hash_foreach_replace` depends on `gb_object_moved_p` which has to have the semantics // of `trace_object` due to the way it is used in `UPDATE_IF_MOVED`. let forward_object = |_worker, object: ObjectReference, _pin| { - debug_assert!(mmtk::memory_manager::is_mmtk_object( - VMObjectModel::ref_to_address(object) - ), "{} is not an MMTk object", object); + debug_assert!( + mmtk::memory_manager::is_mmtk_object(VMObjectModel::ref_to_address(object)), + "{} is not an MMTk object", + object + ); let result = object.forward(); trace!("Forwarding reference: {} -> {}", object, result); result