aboutsummaryrefslogtreecommitdiffstats
path: root/debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff')
-rw-r--r--debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff41
1 files changed, 41 insertions, 0 deletions
diff --git a/debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff b/debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff
new file mode 100644
index 000000000000..f632f831f7f5
--- /dev/null
+++ b/debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff
@@ -0,0 +1,41 @@
+Subject: [PATCH] m68k: make Atari IDE lock reentrant
+
+From Roman Zippel <zippel@linux-m68k.org>
+
+Make the Atari IDE lock reentrant, as the new request is started in the
+interrupt before the last one is completely released.
+
+Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+---
+ include/asm-m68k/ide.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- linux-m68k-2.6.21.orig/include/asm-m68k/ide.h
++++ linux-m68k-2.6.21/include/asm-m68k/ide.h
+@@ -117,8 +117,8 @@ static __inline__ void ide_release_lock
+ printk("ide_release_lock: bug\n");
+ return;
+ }
+- falconide_intr_lock = 0;
+- stdma_release();
++ if (!--falconide_intr_lock)
++ stdma_release();
+ }
+ }
+
+@@ -126,12 +126,12 @@ static __inline__ void
+ ide_get_lock(irq_handler_t handler, void *data)
+ {
+ if (MACH_IS_ATARI) {
+- if (falconide_intr_lock == 0) {
++ if (!falconide_intr_lock) {
+ if (in_interrupt() > 0)
+ panic( "Falcon IDE hasn't ST-DMA lock in interrupt" );
+ stdma_lock(handler, data);
+- falconide_intr_lock = 1;
+ }
++ falconide_intr_lock++;
+ }
+ }
+ #endif /* CONFIG_BLK_DEV_FALCON_IDE */