From 9ce1603f6d1ece64b307541fc5bd817a081df062 Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Sun, 19 Apr 2015 18:43:43 +0200 Subject: [PATCH] dragon{,-nx32}: Block interrupts during DriveWire operations Signed-off-by: Tormod Volden --- Kernel/platform-dragon-nx32/devdw.c | 3 +++ Kernel/platform-dragon/devdw.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Kernel/platform-dragon-nx32/devdw.c b/Kernel/platform-dragon-nx32/devdw.c index ae3fc914..0034a7de 100644 --- a/Kernel/platform-dragon-nx32/devdw.c +++ b/Kernel/platform-dragon-nx32/devdw.c @@ -25,6 +25,7 @@ static int dw_transfer(uint8_t minor, bool is_read, uint8_t rawflag) uint8_t err; uint8_t *driveptr = dw_tab + minor; uint8_t cmd[5]; + irqflags_t irq; if(rawflag) goto bad2; @@ -44,7 +45,9 @@ static int dw_transfer(uint8_t minor, bool is_read, uint8_t rawflag) while (ct < 2) { for (tries = 0; tries < 4 ; tries++) { // kprintf("dw_operation on block %d ct %d\n", block, ct); + irq = di(); /* for now block interrupts for whole operation */ err = dw_operation(cmd, driveptr); + irqrestore(irq); if (err == 0) break; if (tries > 1) diff --git a/Kernel/platform-dragon/devdw.c b/Kernel/platform-dragon/devdw.c index ae3fc914..0034a7de 100644 --- a/Kernel/platform-dragon/devdw.c +++ b/Kernel/platform-dragon/devdw.c @@ -25,6 +25,7 @@ static int dw_transfer(uint8_t minor, bool is_read, uint8_t rawflag) uint8_t err; uint8_t *driveptr = dw_tab + minor; uint8_t cmd[5]; + irqflags_t irq; if(rawflag) goto bad2; @@ -44,7 +45,9 @@ static int dw_transfer(uint8_t minor, bool is_read, uint8_t rawflag) while (ct < 2) { for (tries = 0; tries < 4 ; tries++) { // kprintf("dw_operation on block %d ct %d\n", block, ct); + irq = di(); /* for now block interrupts for whole operation */ err = dw_operation(cmd, driveptr); + irqrestore(irq); if (err == 0) break; if (tries > 1) -- 2.34.1