Merge "Increase the priority of microdroid_launcher process" into main am: 3a10bdb2bf
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/3533143
Change-Id: If7f05e5e2309518876db60376c30383d5544c481
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/guest/microdroid_manager/microdroid_manager.rc b/guest/microdroid_manager/microdroid_manager.rc
index 9fa8a9d..48cc6d7 100644
--- a/guest/microdroid_manager/microdroid_manager.rc
+++ b/guest/microdroid_manager/microdroid_manager.rc
@@ -8,6 +8,7 @@
# CAP_SYS_BOOT is required to exec kexecload from microdroid_manager
# CAP_SETPCAP is required to allow microdroid_manager to drop capabilities
# before executing the payload
- capabilities AUDIT_CONTROL SYS_ADMIN SYS_BOOT SETPCAP SETUID SETGID
+ # CAP_SYS_NICE is required for microdroid_manager to adjust priority of the payload
+ capabilities AUDIT_CONTROL SYS_ADMIN SYS_BOOT SETPCAP SETUID SETGID SYS_NICE
user root
socket vm_payload_service stream 0666 system system
diff --git a/guest/microdroid_manager/src/main.rs b/guest/microdroid_manager/src/main.rs
index 4537834..a95bcb2 100644
--- a/guest/microdroid_manager/src/main.rs
+++ b/guest/microdroid_manager/src/main.rs
@@ -710,7 +710,21 @@
info!("notifying payload started");
service.notifyPayloadStarted()?;
- let exit_status = command.spawn()?.wait()?;
+ let mut payload_process = command.spawn().context("failed to spawn payload process")?;
+ info!("payload pid = {:?}", payload_process.id());
+
+ // SAFETY: setpriority doesn't take any pointers
+ unsafe {
+ let ret = libc::setpriority(libc::PRIO_PROCESS, payload_process.id(), -20);
+ if ret != 0 {
+ error!(
+ "failed to adjust priority of the payload: {:#?}",
+ std::io::Error::last_os_error()
+ );
+ }
+ }
+
+ let exit_status = payload_process.wait()?;
match exit_status.code() {
Some(exit_code) => Ok(exit_code),
None => Err(match exit_status.signal() {