From: Tormod Volden Date: Sun, 19 Apr 2015 16:43:43 +0000 (+0200) Subject: dragon{,-nx32}: Block interrupts during DriveWire operations X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=9ce1603f6d1ece64b307541fc5bd817a081df062;p=FUZIX.git dragon{,-nx32}: Block interrupts during DriveWire operations Signed-off-by: Tormod Volden --- 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)