summary refs log tree commit diff
path: root/devices/src/bus.rs
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2019-01-23 19:04:43 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-26 00:59:57 -0800
commit3ba0098d6764df4a7b2c885f0cf5263b4062c357 (patch)
tree87e285eb55498f152457ffacdf66345feb5ed037 /devices/src/bus.rs
parent1be25dc3d2ce8afe41d0fe7fe7b157c3f1787b50 (diff)
downloadcrosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar.gz
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar.bz2
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar.lz
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar.xz
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.tar.zst
crosvm-3ba0098d6764df4a7b2c885f0cf5263b4062c357.zip
crosvm: add debug labels to devices for improved SIGCHLD logs
Each device (Bus, Pci, Proxy, etc), gets a debug label associated with
it. When a child is spawned, the debug label for it is stored in
a map with the child's pid as the key. If a SIGCHLD is handled, this map
is used to print a more helpful message about exactly which child died.

BUG=None
TEST=run with sandboxing and a faulty child device
     check logs for message about child died
     the child should have a debug label

Change-Id: I61fbbee0a8e701249533a7a3a6a1ad48840f12e5
Reviewed-on: https://chromium-review.googlesource.com/1432835
Commit-Ready: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Diffstat (limited to 'devices/src/bus.rs')
-rw-r--r--devices/src/bus.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/devices/src/bus.rs b/devices/src/bus.rs
index 5eb09a2..1c21661 100644
--- a/devices/src/bus.rs
+++ b/devices/src/bus.rs
@@ -17,6 +17,8 @@ use sync::Mutex;
 /// into its allocated portion of address space.
 #[allow(unused_variables)]
 pub trait BusDevice: Send {
+    /// Returns a label suitable for debug output.
+    fn debug_label(&self) -> String;
     /// Reads at `offset` from this device
     fn read(&mut self, offset: u64, data: &mut [u8]) {}
     /// Writes at `offset` into this device
@@ -202,10 +204,18 @@ mod tests {
     use super::*;
 
     struct DummyDevice;
-    impl BusDevice for DummyDevice {}
+    impl BusDevice for DummyDevice {
+        fn debug_label(&self) -> String {
+            "dummy device".to_owned()
+        }
+    }
 
     struct ConstantDevice;
     impl BusDevice for ConstantDevice {
+        fn debug_label(&self) -> String {
+            "constant device".to_owned()
+        }
+
         fn read(&mut self, offset: u64, data: &mut [u8]) {
             for (i, v) in data.iter_mut().enumerate() {
                 *v = (offset as u8) + (i as u8);