Skip to content

Commit

Permalink
Use typed setter
Browse files Browse the repository at this point in the history
  • Loading branch information
wenyuzhao committed Aug 17, 2023
1 parent d88e321 commit ca5ef5a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 30 deletions.
34 changes: 8 additions & 26 deletions mmtk/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ use mmtk::MutatorContext;
use once_cell::sync;
use std::cell::RefCell;
use std::ffi::{CStr, CString};
use std::fmt::Display;
use std::sync::atomic::Ordering;

// Supported barriers:
Expand Down Expand Up @@ -291,35 +290,18 @@ pub extern "C" fn process(name: *const c_char, value: *const c_char) -> bool {
)
}

// We trust the name/value pointer is valid.
#[allow(clippy::not_unsafe_ptr_arg_deref)]
fn set_hotspot_flag_impl<T: Display>(name: *const c_char, value: T) {
let name_cstr: &CStr = unsafe { CStr::from_ptr(name) };
let name = name_cstr.to_str().unwrap();
let mut builder = BUILDER.lock().unwrap();
let value_str = format!("{}", value);
let result = match name {
"ParallelGCThreads" => builder.set_option("threads", &value_str),
"UseTransparentHugePages" => builder.set_option("transparent_hugepages", &value_str),
_ => unimplemented!("Unsupported flag: {}", name),
};
assert!(
result,
"Failed to pass hotspot flag {}={} to mmtk-core",
name, value
);
}

/// Pass a hotspot integer command line flag to mmtk
/// Pass hotspot `ParallelGCThreads` flag to mmtk
#[no_mangle]
pub extern "C" fn mmtk_set_hotspot_flag_uint(name: *const c_char, value: u32) {
set_hotspot_flag_impl(name, value)
pub extern "C" fn mmtk_builder_set_threads(value: usize) {
let mut builder = BUILDER.lock().unwrap();
builder.options.threads.set(value);
}

/// Pass a hotspot boolean command line flag to mmtk
/// Pass hotspot `UseTransparentHugePages` flag to mmtk
#[no_mangle]
pub extern "C" fn mmtk_set_hotspot_flag_bool(name: *const c_char, value: bool) {
set_hotspot_flag_impl(name, value)
pub extern "C" fn mmtk_builder_set_transparent_hugepages(value: bool) {
let mut builder = BUILDER.lock().unwrap();
builder.options.transparent_hugepages.set(value);
}

#[no_mangle]
Expand Down
4 changes: 2 additions & 2 deletions openjdk/mmtk.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ extern void add_phantom_candidate(void* ref, void* referent);
extern void mmtk_harness_begin_impl();
extern void mmtk_harness_end_impl();

extern void mmtk_set_hotspot_flag_uint(const char* name, unsigned int value);
extern void mmtk_set_hotspot_flag_bool(const char* name, bool value);
extern void mmtk_builder_set_threads(size_t value);
extern void mmtk_builder_set_transparent_hugepages(bool value);

#ifdef __cplusplus
}
Expand Down
4 changes: 2 additions & 2 deletions openjdk/mmtkHeap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ jint MMTkHeap::initialize() {
// printf("policy max heap size %zu, min heap size %zu\n", heap_size, collector_policy()->min_heap_byte_size());

// Set options
mmtk_set_hotspot_flag_uint("ParallelGCThreads", ParallelGCThreads);
mmtk_set_hotspot_flag_bool("UseTransparentHugePages", UseTransparentHugePages);
mmtk_builder_set_threads(ParallelGCThreads);
mmtk_builder_set_transparent_hugepages(UseTransparentHugePages);
if (ThirdPartyHeapOptions != NULL) {
bool set_options = process_bulk(strdup(ThirdPartyHeapOptions));
guarantee(set_options, "Failed to set MMTk options. Please check if the options are valid: %s\n", ThirdPartyHeapOptions);
Expand Down

0 comments on commit ca5ef5a

Please sign in to comment.