diff options
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.patch | 91 |
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..101e5f5 --- /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/8] 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 + |