summaryrefslogtreecommitdiff
path: root/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch')
-rw-r--r--debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch76
1 files changed, 0 insertions, 76 deletions
diff --git a/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch b/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch
deleted file mode 100644
index 6394e9d..0000000
--- a/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 23ffabdd5b4e62340454884bf1e85c925bcf509b Mon Sep 17 00:00:00 2001
-From: Justus Winter <justus@gnupg.org>
-Date: Fri, 26 Feb 2016 16:01:46 +0100
-Subject: [PATCH gnumach 10/10] Fix infinite loop with cli if netdde is killed
- with pending irqs
-
----
- device/intr.c | 38 +++++++++++++++++---------------------
- 1 file changed, 17 insertions(+), 21 deletions(-)
-
-diff --git a/device/intr.c b/device/intr.c
-index a061d5e..39408ea 100644
---- a/device/intr.c
-+++ b/device/intr.c
-@@ -28,8 +28,6 @@ struct intr_entry
- typedef struct intr_entry *intr_entry_t;
-
- static queue_head_t intr_queue;
--/* The total number of unprocessed interrupts. */
--static int tot_num_intr;
-
- /* This function can only be used in the interrupt handler. */
- boolean_t
-@@ -37,7 +35,6 @@ queue_intr (struct intr_entry *e)
- {
- cli ();
- e->interrupts++;
-- tot_num_intr++;
- sti ();
-
- thread_wakeup ((event_t) &intr_thread);
-@@ -251,24 +248,23 @@ intr_thread ()
- assert_wait ((event_t) &intr_thread, FALSE);
- cli ();
-
-- while (tot_num_intr)
-- queue_iterate (&intr_queue, e, struct intr_entry *, chain)
-- if (e->interrupts)
-- {
-- line = e->line;
-- dest = e->dest;
-- e->interrupts--;
-- tot_num_intr--;
--
-- sti ();
-- deliver_intr (line, dest);
-- cli ();
--
-- /* We cannot assume that e still exists at this point
-- because we released the lock. Hence we restart the
-- iteration. */
-- break;
-- }
-+ restart:
-+ queue_iterate (&intr_queue, e, struct intr_entry *, chain)
-+ if (e->interrupts)
-+ {
-+ line = e->line;
-+ dest = e->dest;
-+ e->interrupts--;
-+
-+ sti ();
-+ deliver_intr (line, dest);
-+ cli ();
-+
-+ /* We cannot assume that e still exists at this point
-+ because we released the lock. Hence we restart the
-+ iteration. */
-+ goto restart;
-+ }
-
- sti ();
- thread_block (thread_no_continuation);
---
-2.1.4
-