summary refs log tree commit diff
path: root/x86_64
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2018-10-05 11:29:33 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-10-10 17:07:55 -0700
commit9357ceab6ac207498fc2cff4be70aa6975e9c79f (patch)
treee884632d42b9e48c173d6d4555a4434f37a63606 /x86_64
parentc968aa995a596f94e6e73d8cf80e9ced6e48f9b5 (diff)
downloadcrosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar.gz
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar.bz2
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar.lz
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar.xz
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.tar.zst
crosvm-9357ceab6ac207498fc2cff4be70aa6975e9c79f.zip
mptable: mark PCI interrupts as edge triggered
BUG=chromium:854766
TEST=Boot crosvm on an x86_64 platform (nami)

Change-Id: Id55975a443a54e8b9c25616cd842507c57802af0
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1265047
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'x86_64')
-rw-r--r--x86_64/src/mptable.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/x86_64/src/mptable.rs b/x86_64/src/mptable.rs
index b7842b0..7587bb7 100644
--- a/x86_64/src/mptable.rs
+++ b/x86_64/src/mptable.rs
@@ -85,6 +85,7 @@ const CPU_STEPPING: u32 = 0x600;
 const CPU_FEATURE_APIC: u32 = 0x200;
 const CPU_FEATURE_FPU: u32 = 0x001;
 const MPTABLE_START: u64 = 0x400 * 639; // Last 1k of Linux's 640k base RAM.
+const MP_IRQTRIG_EDGE: u16 = 4;
 
 fn compute_checksum<T: Copy>(v: &T) -> u8 {
     // Safe because we are only reading the bytes within the size of the `T` reference `v`.
@@ -250,7 +251,7 @@ pub fn setup_mptable(
         let mut mpc_intsrc = mpc_intsrc::default();
         mpc_intsrc.type_ = MP_INTSRC as u8;
         mpc_intsrc.irqtype = mp_irq_source_types_mp_INT as u8;
-        mpc_intsrc.irqflag = MP_IRQDIR_DEFAULT as u16;
+        mpc_intsrc.irqflag = MP_IRQTRIG_EDGE | MP_IRQDIR_DEFAULT as u16;
         mpc_intsrc.srcbus = PCI_BUS_ID;
         mpc_intsrc.srcbusirq = (pci_irq.0 as u8 + 1) << 2 | pci_irq.1.to_mask() as u8;
         mpc_intsrc.dstapic = ioapicid;