From 7127e14b5dc0bb8fa56fefa3d59ebca0d83983fe Mon Sep 17 00:00:00 2001 From: Andrew Plaza <andrew.plaza15@gmail.com> Date: Mon, 24 Apr 2017 22:07:02 -0400 Subject: [PATCH] Fix PIT Interrupt Not Context Switching [irq] PIT interrupt should context switch or else all of redox crashes. This will fix programs like the Snake game crashing all of Redox. A global AtomicUSize counter was added, and a line to switch contexts on every 10 PIT interrupts in irq.rs. --- src/interrupt/irq.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/interrupt/irq.rs b/src/interrupt/irq.rs index 0d8fbcb3..2a27f81a 100644 --- a/src/interrupt/irq.rs +++ b/src/interrupt/irq.rs @@ -1,7 +1,12 @@ use context::timeout; use device::pic; use device::serial::{COM1, COM2}; +use core::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT}; + use time; +use context; + +static PIT_TICKS: AtomicUsize = ATOMIC_USIZE_INIT; unsafe fn trigger(irq: u8) { extern { @@ -46,6 +51,10 @@ interrupt!(pit, { pic::MASTER.ack(); + if PIT_TICKS.fetch_add(1, Ordering::SeqCst) % 10 == 0 { + context::switch(); + } + // Any better way of doing this? timeout::trigger(); }); -- GitLab