#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
#[repr(u8)]
pub enum LatencyScaling
{
#[allow(missing_docs)]
DoNotAdjustLatency = 0,
#[allow(missing_docs)]
LogarithmicAdjustment = 1,
#[allow(missing_docs)]
LinearAdjustment = 2,
}
impl Default for LatencyScaling
{
#[inline(always)]
fn default() -> Self
{
LatencyScaling::DoNotAdjustLatency
}
}
impl LatencyScaling
{
#[inline(always)]
pub fn read(proc_path: &ProcPath) -> io::Result<Self>
{
let value: u8 = Self::file_path(proc_path).read_value()?;
if value <= 2
{
Ok(unsafe { transmute(value) })
}
else
{
Err(io_error_invalid_data("Value out of range"))
}
}
#[inline(always)]
pub fn write(self, proc_path: &ProcPath) -> io::Result<()>
{
assert_effective_user_id_is_root("write /proc/sys/kernel/sched_tunable_scaling");
let file_path = Self::file_path(proc_path);
if file_path.exists()
{
file_path.write_value(UnpaddedDecimalInteger(self as u8))
}
else
{
Ok(())
}
}
#[inline(always)]
fn file_path(proc_path: &ProcPath) -> PathBuf
{
proc_path.sys_kernel_file_path("sched_tunable_scaling")
}
}