diff options
Diffstat (limited to 'debian/patches/700013-Avoid-cli-sti-in-favor-of-cpu_intr_-save-restore.patch')
-rw-r--r-- | debian/patches/700013-Avoid-cli-sti-in-favor-of-cpu_intr_-save-restore.patch | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/debian/patches/700013-Avoid-cli-sti-in-favor-of-cpu_intr_-save-restore.patch b/debian/patches/700013-Avoid-cli-sti-in-favor-of-cpu_intr_-save-restore.patch deleted file mode 100644 index cbfad93..0000000 --- a/debian/patches/700013-Avoid-cli-sti-in-favor-of-cpu_intr_-save-restore.patch +++ /dev/null @@ -1,127 +0,0 @@ -From c113575502e58f8bfb9870867472d08e653e7c09 Mon Sep 17 00:00:00 2001 -From: Justus Winter <justus@gnupg.org> -Date: Fri, 26 Feb 2016 17:53:16 +0100 -Subject: [PATCH gnumach 13/15] Avoid cli/sti in favor of - cpu_intr_{save,restore} - ---- - device/intr.c | 31 +++++++++++++++++-------------- - 1 file changed, 17 insertions(+), 14 deletions(-) - -diff --git a/device/intr.c b/device/intr.c -index 1cbe661..c930e84 100644 ---- a/device/intr.c -+++ b/device/intr.c -@@ -22,13 +22,11 @@ - #include <kern/queue.h> - #include <kern/printf.h> - #include <mach/notify.h> -+#include <machine/cpu.h> - - #include "interrupt.h" - - #ifndef MACH_XEN --// TODO this is only for x86 system --#define sti() __asm__ __volatile__ ("sti": : :"memory") --#define cli() __asm__ __volatile__ ("cli": : :"memory") - - /* The cache which holds our proxy memory objects. */ - static struct kmem_cache intr_entry_cache; -@@ -50,9 +48,11 @@ static queue_head_t intr_queue; - boolean_t - queue_intr (struct intr_entry *e) - { -- cli (); -+ unsigned long flags; -+ -+ cpu_intr_save (&flags); - e->interrupts++; -- sti (); -+ cpu_intr_restore (flags); - - thread_wakeup ((event_t) &intr_thread); - return TRUE; -@@ -65,6 +65,7 @@ kern_return_t - insert_intr_entry (int line, ipc_port_t dest, struct intr_entry **entry) - { - kern_return_t err = 0; -+ unsigned long flags; - struct intr_entry *e, *new; - int free = 0; - ipc_port_t dnnotify; -@@ -114,7 +115,7 @@ insert_intr_entry (int line, ipc_port_t dest, struct intr_entry **entry) - might decide to cancel. */ - - /* check whether the intr entry has been in the queue. */ -- cli (); -+ cpu_intr_save (&flags); - queue_iterate (&intr_queue, e, struct intr_entry *, chain) - if (e->dest == dest && e->line == line) - { -@@ -126,8 +127,8 @@ insert_intr_entry (int line, ipc_port_t dest, struct intr_entry **entry) - goto out; - } - queue_enter (&intr_queue, new, struct intr_entry *, chain); --out: -- sti (); -+ out: -+ cpu_intr_restore (flags); - if (free) - { - ipc_port_dncancel (new->dest, (mach_port_t) 1, dnindex); -@@ -171,17 +172,18 @@ intr_entry_notify (mach_msg_header_t *msg) - struct intr_entry *entry; - int line; - mach_dead_name_notification_t *dn; -+ unsigned long flags; - - dn = (mach_dead_name_notification_t *) msg; - entry = intr_entry_port_lookup - ((ipc_port_t) dn->not_header.msgh_remote_port); - assert (entry); - -- cli (); -+ cpu_intr_save (&flags); - line = entry->line; - assert (!queue_empty (&intr_queue)); - queue_remove (&intr_queue, entry, struct intr_entry *, chain); -- sti (); -+ cpu_intr_restore (flags); - - ipc_port_dealloc_kernel (entry->port); - ipc_port_release_send (entry->dest); -@@ -262,8 +264,9 @@ intr_thread () - - for (;;) - { -+ unsigned long flags; - assert_wait ((event_t) &intr_thread, FALSE); -- cli (); -+ cpu_intr_save (&flags); - - restart: - queue_iterate (&intr_queue, e, struct intr_entry *, chain) -@@ -273,9 +276,9 @@ intr_thread () - dest = e->dest; - e->interrupts--; - -- sti (); -+ cpu_intr_restore (flags); - deliver_intr (line, dest); -- cli (); -+ cpu_intr_save (&flags); - - /* We cannot assume that e still exists at this point - because we released the lock. Hence we restart the -@@ -283,7 +286,7 @@ intr_thread () - goto restart; - } - -- sti (); -+ cpu_intr_restore (flags); - thread_block (thread_no_continuation); - } - } --- -2.1.4 - |