use baracuda_cuda_sys::driver;
use baracuda_cuda_sys::types::CUcoredumpSettings;
use crate::error::{check, Result};
pub unsafe fn set_attribute_raw(attr: i32, value: &mut [u8]) -> Result<()> { unsafe {
let d = driver()?;
let cu = d.cu_coredump_set_attribute()?;
let mut size = value.len();
check(cu(
attr,
value.as_mut_ptr() as *mut core::ffi::c_void,
&mut size,
))
}}
pub unsafe fn get_attribute_raw(attr: i32, buf: &mut [u8]) -> Result<usize> { unsafe {
let d = driver()?;
let cu = d.cu_coredump_get_attribute()?;
let mut size = buf.len();
check(cu(
attr,
buf.as_mut_ptr() as *mut core::ffi::c_void,
&mut size,
))?;
Ok(size)
}}
pub fn set_enable_on_exception(enabled: bool) -> Result<()> {
let mut v = [if enabled { 1u8 } else { 0u8 }];
unsafe { set_attribute_raw(CUcoredumpSettings::ENABLE_ON_EXCEPTION, &mut v) }
}
pub fn enable_on_exception() -> Result<bool> {
let mut v = [0u8; 1];
unsafe {
get_attribute_raw(CUcoredumpSettings::ENABLE_ON_EXCEPTION, &mut v)?;
}
Ok(v[0] != 0)
}
pub unsafe fn set_attribute_global_raw(attr: i32, value: &mut [u8]) -> Result<()> { unsafe {
let d = driver()?;
let cu = d.cu_coredump_set_attribute_global()?;
let mut size = value.len();
check(cu(
attr,
value.as_mut_ptr() as *mut core::ffi::c_void,
&mut size,
))
}}
pub unsafe fn get_attribute_global_raw(attr: i32, buf: &mut [u8]) -> Result<usize> { unsafe {
let d = driver()?;
let cu = d.cu_coredump_get_attribute_global()?;
let mut size = buf.len();
check(cu(
attr,
buf.as_mut_ptr() as *mut core::ffi::c_void,
&mut size,
))?;
Ok(size)
}}
pub fn flush_gpudirect_rdma_writes(target: i32, scope: i32) -> Result<()> {
let d = driver()?;
let cu = d.cu_flush_gpudirect_rdma_writes()?;
check(unsafe { cu(target, scope) })
}