mirror of
https://github.com/ilya-zlobintsev/LACT.git
synced 2025-02-25 18:55:26 -06:00
feat: prevent repeated enabling/disabling of overclocking before reboot
This commit is contained in:
parent
e411d155da
commit
573a599589
@ -1,4 +1,4 @@
|
|||||||
use anyhow::{anyhow, Context};
|
use anyhow::{anyhow, ensure, Context};
|
||||||
use lact_schema::{InitramfsType, SystemInfo, GIT_COMMIT};
|
use lact_schema::{InitramfsType, SystemInfo, GIT_COMMIT};
|
||||||
use os_release::{OsRelease, OS_RELEASE};
|
use os_release::{OsRelease, OS_RELEASE};
|
||||||
use std::{
|
use std::{
|
||||||
@ -6,10 +6,13 @@ use std::{
|
|||||||
io::Write,
|
io::Write,
|
||||||
os::unix::prelude::PermissionsExt,
|
os::unix::prelude::PermissionsExt,
|
||||||
path::Path,
|
path::Path,
|
||||||
|
sync::atomic::{AtomicBool, Ordering},
|
||||||
};
|
};
|
||||||
use tokio::process::Command;
|
use tokio::process::Command;
|
||||||
use tracing::{info, warn};
|
use tracing::{info, warn};
|
||||||
|
|
||||||
|
static OC_TOGGLED: AtomicBool = AtomicBool::new(false);
|
||||||
|
|
||||||
const PP_OVERDRIVE_MASK: u64 = 0x4000;
|
const PP_OVERDRIVE_MASK: u64 = 0x4000;
|
||||||
pub const PP_FEATURE_MASK_PATH: &str = "/sys/module/amdgpu/parameters/ppfeaturemask";
|
pub const PP_FEATURE_MASK_PATH: &str = "/sys/module/amdgpu/parameters/ppfeaturemask";
|
||||||
pub const MODULE_CONF_PATH: &str = "/etc/modprobe.d/99-amdgpu-overdrive.conf";
|
pub const MODULE_CONF_PATH: &str = "/etc/modprobe.d/99-amdgpu-overdrive.conf";
|
||||||
@ -49,6 +52,11 @@ pub async fn info() -> anyhow::Result<SystemInfo> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn enable_overdrive() -> anyhow::Result<String> {
|
pub async fn enable_overdrive() -> anyhow::Result<String> {
|
||||||
|
ensure!(
|
||||||
|
!OC_TOGGLED.load(Ordering::SeqCst),
|
||||||
|
"Overdrive support was already toggled - please reboot to apply the changes"
|
||||||
|
);
|
||||||
|
|
||||||
let current_mask = read_current_mask()?;
|
let current_mask = read_current_mask()?;
|
||||||
|
|
||||||
let new_mask = current_mask | PP_OVERDRIVE_MASK;
|
let new_mask = current_mask | PP_OVERDRIVE_MASK;
|
||||||
@ -67,6 +75,7 @@ pub async fn enable_overdrive() -> anyhow::Result<String> {
|
|||||||
|
|
||||||
let message = match regenerate_initramfs().await {
|
let message = match regenerate_initramfs().await {
|
||||||
Ok(initramfs_type) => {
|
Ok(initramfs_type) => {
|
||||||
|
OC_TOGGLED.store(true, Ordering::SeqCst);
|
||||||
format!("Initramfs was successfully regenerated (detected type {initramfs_type:?})")
|
format!("Initramfs was successfully regenerated (detected type {initramfs_type:?})")
|
||||||
}
|
}
|
||||||
Err(err) => format!("{err:#}"),
|
Err(err) => format!("{err:#}"),
|
||||||
@ -76,12 +85,20 @@ pub async fn enable_overdrive() -> anyhow::Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn disable_overdrive() -> anyhow::Result<String> {
|
pub async fn disable_overdrive() -> anyhow::Result<String> {
|
||||||
|
ensure!(
|
||||||
|
!OC_TOGGLED.load(Ordering::SeqCst),
|
||||||
|
"Overdrive support was already toggled - please reboot to apply the changes"
|
||||||
|
);
|
||||||
|
|
||||||
if Path::new(MODULE_CONF_PATH).exists() {
|
if Path::new(MODULE_CONF_PATH).exists() {
|
||||||
fs::remove_file(MODULE_CONF_PATH).context("Could not remove module config file")?;
|
fs::remove_file(MODULE_CONF_PATH).context("Could not remove module config file")?;
|
||||||
match regenerate_initramfs().await {
|
match regenerate_initramfs().await {
|
||||||
Ok(initramfs_type) => Ok(format!(
|
Ok(initramfs_type) => {
|
||||||
|
OC_TOGGLED.store(true, Ordering::SeqCst);
|
||||||
|
Ok(format!(
|
||||||
"Initramfs was successfully regenerated (detected type {initramfs_type:?})"
|
"Initramfs was successfully regenerated (detected type {initramfs_type:?})"
|
||||||
)),
|
))
|
||||||
|
}
|
||||||
Err(err) => Ok(format!("{err:#}")),
|
Err(err) => Ok(format!("{err:#}")),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user