bugfix: don't deadlock on change compute/vfio/compute

Closes: #86 #88
This commit is contained in:
Luke D. Jones
2021-05-15 22:22:36 +12:00
parent 895179fdad
commit e24b4858a4
5 changed files with 17 additions and 10 deletions

View File

@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
# [3.5.2] - 2021-05-15
### Changed
- Bugfix: prevent the hang on compute/integrated mode change
# [3.5.1] - 2021-04-25 # [3.5.1] - 2021-04-25
### Changed ### Changed
+ Anime: + Anime:

2
Cargo.lock generated
View File

@@ -206,7 +206,7 @@ dependencies = [
[[package]] [[package]]
name = "daemon" name = "daemon"
version = "3.5.1" version = "3.5.2"
dependencies = [ dependencies = [
"env_logger", "env_logger",
"intel-pstate", "intel-pstate",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "daemon" name = "daemon"
version = "3.5.1" version = "3.5.2"
license = "MPL-2.0" license = "MPL-2.0"
readme = "README.md" readme = "README.md"
authors = ["Luke <luke@ljones.dev>"] authors = ["Luke <luke@ljones.dev>"]

View File

@@ -1,3 +1,4 @@
use ::zbus::Connection;
use ctrl_gfx::error::GfxError; use ctrl_gfx::error::GfxError;
use ctrl_gfx::*; use ctrl_gfx::*;
use ctrl_rog_bios::CtrlRogBios; use ctrl_rog_bios::CtrlRogBios;
@@ -14,7 +15,6 @@ use std::{str::FromStr, sync::mpsc};
use std::{sync::Arc, sync::Mutex}; use std::{sync::Arc, sync::Mutex};
use sysfs_class::{PciDevice, SysClass}; use sysfs_class::{PciDevice, SysClass};
use system::{GraphicsDevice, PciBus}; use system::{GraphicsDevice, PciBus};
use ::zbus::{Connection};
use crate::*; use crate::*;
@@ -607,11 +607,14 @@ impl CtrlGraphics {
let bus = self.bus.clone(); let bus = self.bus.clone();
Self::do_vendor_tasks(vendor, vfio_enable, &devices, &bus)?; Self::do_vendor_tasks(vendor, vfio_enable, &devices, &bus)?;
info!("GFX: Graphics mode changed to {}", <&str>::from(vendor)); info!("GFX: Graphics mode changed to {}", <&str>::from(vendor));
if let Ok(config) = self.config.lock() { if matches!(vendor, GfxVendors::Compute | GfxVendors::Vfio) {
if matches!(vendor, GfxVendors::Compute | GfxVendors::Vfio) loop {
&& config.gfx_save_compute_vfio if let Ok(config) = self.config.try_lock() {
{ if config.gfx_save_compute_vfio {
Self::save_gfx_mode(vendor, self.config.clone()); Self::save_gfx_mode(vendor, self.config.clone());
}
return Ok(action_required);
}
} }
} }
} }
@@ -625,7 +628,7 @@ impl CtrlGraphics {
let devices = self.nvidia.clone(); let devices = self.nvidia.clone();
let bus = self.bus.clone(); let bus = self.bus.clone();
let vfio_enable = if let Ok(config) = self.config.lock() { let vfio_enable = if let Ok(config) = self.config.try_lock() {
config.gfx_vfio_enable config.gfx_vfio_enable
} else { } else {
false false