From 425c618676e458c3c51a8fc2a4751d35007f1415 Mon Sep 17 00:00:00 2001 From: Dmytro Maluka Date: Mon, 29 Aug 2022 14:21:42 +0000 Subject: [PATCH] acpi: Remove netlink based propagation of power button events It is wrong to unconditionally propagate ACPI power button events in the host to the guest, since some guests (e.g. ARCVM) don't expect them and misbehave when such an event is received. If at all, this propagation should be enabled only in crosvm builds with "direct" feature enabled, i.e. crosvm-direct builds for ManaTEE. Moreover, even for ManaTEE, the correct approach is to propagate them via direct forwarding of physical ACPI events, rather than via listening on ACPI netlink events in the host (in particular because we want them to be handled in the guest only, not in the host). Since CL:3645408 and CL:3599200 we are using direct forwarding of ACPI power button events, so the netlink based forwarding in the ACPI event listener is no more used by anyone and can be removed. BUG=b:241191471, b:230592368 TEST=ACPI power button events are not propagated to ARCVM guest. Change-Id: I2541bf900d51507dc246b46fb6691dfa0b1c2956 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3859626 Tested-by: Dmytro Maluka Reviewed-by: Grzegorz Jaszczyk Reviewed-by: Daniel Verkamp Commit-Queue: Dmytro Maluka --- devices/src/acpi.rs | 3 +-- devices/src/sys/unix/acpi.rs | 20 -------------------- devices/src/sys/windows/acpi.rs | 2 -- 3 files changed, 1 insertion(+), 24 deletions(-) diff --git a/devices/src/acpi.rs b/devices/src/acpi.rs index 1c061f0715..4716a2dfb5 100644 --- a/devices/src/acpi.rs +++ b/devices/src/acpi.rs @@ -261,7 +261,6 @@ fn run_worker( crate::sys::acpi_event_run( &acpi_event_sock, &gpe0, - &pm1, &sci_evt, &acpi_event_ignored_gpe, ); @@ -318,7 +317,7 @@ impl Drop for ACPIPMResource { } impl Pm1Resource { - pub(crate) fn trigger_sci(&self, sci_evt: &IrqLevelEvent) { + fn trigger_sci(&self, sci_evt: &IrqLevelEvent) { if self.status & self.enable & ACPIPMFixedEvent::bitmask_all() != 0 { if let Err(e) = sci_evt.trigger() { error!("ACPIPM: failed to trigger sci event for pm1: {}", e); diff --git a/devices/src/sys/unix/acpi.rs b/devices/src/sys/unix/acpi.rs index 5d98c4a964..f86b9f2b17 100644 --- a/devices/src/sys/unix/acpi.rs +++ b/devices/src/sys/unix/acpi.rs @@ -12,9 +12,7 @@ use base::NetlinkGenericSocket; use sync::Mutex; use crate::acpi::ACPIPMError; -use crate::acpi::ACPIPMFixedEvent; use crate::acpi::GpeResource; -use crate::acpi::Pm1Resource; use crate::IrqLevelEvent; pub(crate) fn get_acpi_event_sock() -> Result, ACPIPMError> { @@ -57,7 +55,6 @@ fn get_acpi_event_group() -> Option { pub(crate) fn acpi_event_run( acpi_event_sock: &Option, gpe0: &Arc>, - pm1: &Arc>, sci_evt: &IrqLevelEvent, ignored_gpe: &[u32], ) { @@ -88,28 +85,11 @@ pub(crate) fn acpi_event_run( ignored_gpe, ); } - "button/power" => acpi_event_handle_power_button(acpi_event, pm1, sci_evt), c => debug!("ignored acpi event {}", c), }; } } -const ACPI_BUTTON_NOTIFY_STATUS: u32 = 0x80; - -fn acpi_event_handle_power_button( - acpi_event: AcpiNotifyEvent, - pm1: &Arc>, - sci_evt: &IrqLevelEvent, -) { - // If received power button event, emulate PM/PWRBTN_STS and trigger SCI - if acpi_event._type == ACPI_BUTTON_NOTIFY_STATUS && acpi_event.bus_id.contains("LNXPWRBN") { - let mut pm1 = pm1.lock(); - - pm1.status |= ACPIPMFixedEvent::PowerButton.bitmask(); - pm1.trigger_sci(sci_evt); - } -} - fn acpi_event_handle_gpe( gpe_number: u32, _type: u32, diff --git a/devices/src/sys/windows/acpi.rs b/devices/src/sys/windows/acpi.rs index ec2c380094..e3e3ce796b 100644 --- a/devices/src/sys/windows/acpi.rs +++ b/devices/src/sys/windows/acpi.rs @@ -9,7 +9,6 @@ use sync::Mutex; use crate::acpi::ACPIPMError; use crate::acpi::GpeResource; -use crate::acpi::Pm1Resource; use crate::IrqLevelEvent; pub(crate) fn get_acpi_event_sock() -> Result, ACPIPMError> { @@ -19,7 +18,6 @@ pub(crate) fn get_acpi_event_sock() -> Result, ACPIPMError> { pub(crate) fn acpi_event_run( _acpi_event_sock: &Option, _gpe0: &Arc>, - _pm1: &Arc>, _sci_evt: &IrqLevelEvent, _ignored_gpe: &[u32], ) {