summaryrefslogtreecommitdiff
path: root/debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch')
-rw-r--r--debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch b/debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch
new file mode 100644
index 0000000..8387321
--- /dev/null
+++ b/debian/patches/700002-Disable-disabling-the-irq-via-device_intr_enable.patch
@@ -0,0 +1,91 @@
+From f7c2f4ba69c3ae7df8fddcc2969e2c21e109dbd1 Mon Sep 17 00:00:00 2001
+From: Justus Winter <justus@gnupg.org>
+Date: Thu, 25 Feb 2016 18:56:43 +0100
+Subject: [PATCH gnumach 2/3] Disable disabling the irq via device_intr_enable
+
+---
+ device/ds_routines.c | 9 ++++-----
+ device/intr.c | 3 ++-
+ include/mach/experimental.defs | 22 +++++++++++++++-------
+ 3 files changed, 21 insertions(+), 13 deletions(-)
+
+diff --git a/device/ds_routines.c b/device/ds_routines.c
+index 4f6b345..9d399ee 100644
+--- a/device/ds_routines.c
++++ b/device/ds_routines.c
+@@ -1844,11 +1844,10 @@ experimental_device_intr_enable(ipc_port_t master_port, int line, char status)
+ if (master_port != master_device_port)
+ return D_INVALID_OPERATION;
+
+- if (status)
+- /* TODO: better name for generic-to-arch-specific call */
+- enable_irq (line);
+- else
+- disable_irq (line);
++ if (! status)
++ return D_INVALID_OPERATION;
++
++ enable_irq (line);
+ return 0;
+ #endif /* MACH_XEN */
+ }
+diff --git a/device/intr.c b/device/intr.c
+index 6fca328..02e0bab 100644
+--- a/device/intr.c
++++ b/device/intr.c
+@@ -35,11 +35,12 @@ search_intr (int line, ipc_port_t dest)
+ return NULL;
+ }
+
++void intr_thread (void);
++
+ /* This function can only be used in the interrupt handler. */
+ void
+ queue_intr (int line, ipc_port_t dest)
+ {
+- extern void intr_thread ();
+ struct intr_entry *e;
+
+ cli ();
+diff --git a/include/mach/experimental.defs b/include/mach/experimental.defs
+index ca1eb92..11c51d6 100644
+--- a/include/mach/experimental.defs
++++ b/include/mach/experimental.defs
+@@ -52,19 +52,27 @@ routine device_intr_register(
+ in flags : int;
+ in receive_port : mach_port_send_t
+ );
++/* JW: It doesn't look safe to pass flags through. dde sets
++ * SA_SHIRQ.
++ *
++ * ID seems unused. dde hands in 0.
++ */
+
+ /*
+- * enable/disable the specified line.
++ * enable the specified line.
++ */
++/* Is the disable part actually used at all? -- No. */
++/* AIUI, the kernel IRQ handler should always disable the line; and
++ * the userspace driver only has to reenable it, after acknowledging
++ * and handling the interrupt...
++ *
++ * -- Indeed, and we should change the interface so that the irq is
++ * also re-enabled if the driver crashes.
+ */
+-/* XXX: Naming a function taht can disable something "xxx_enable" is confusing. */
+-/* Is the disable part actually used at all? AIUI, the kernel IRQ handler
+-should always disable the line; and the userspace driver only has to
+-reenable it, after acknowledging and handling the interrupt...
+-*/
+ routine device_intr_enable(
+ master_port : mach_port_t;
+ line : int;
+- status : char);
++ status : char /* MUST be true-ish */);
+
+ /*
+ * This routine is created for allocating DMA buffers.
+--
+2.1.4
+