Module Name: src
Committed By: jdolecek
Date: Mon May 25 19:05:30 UTC 2020
Modified Files:
src/sys/dev/ata: ata.c
Log Message:
disable downgrade of ATA mode from DMA, as generally not relevant
any more - while it has been instrumental to inadvertedly discover
driver bugs in PIO mode under QEMU recently, generally the switch
more hurts than helps, so now only warn when DMA errors happen
code kept under ATA_DOWNGRADE_MODE ifdef, disabled by default
To generate a diff of this commit:
cvs rdiff -u -r1.158 -r1.159 src/sys/dev/ata/ata.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ata/ata.c
diff -u src/sys/dev/ata/ata.c:1.158 src/sys/dev/ata/ata.c:1.159
--- src/sys/dev/ata/ata.c:1.158 Mon May 25 18:29:25 2020
+++ src/sys/dev/ata/ata.c Mon May 25 19:05:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ata.c,v 1.158 2020/05/25 18:29:25 jdolecek Exp $ */
+/* $NetBSD: ata.c,v 1.159 2020/05/25 19:05:30 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.158 2020/05/25 18:29:25 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.159 2020/05/25 19:05:30 jdolecek Exp $");
#include "opt_ata.h"
@@ -84,7 +84,7 @@ int atadebug_mask = ATADEBUG_MASK;
#define ATADEBUG_PRINT(args, level)
#endif
-#if NATA_DMA
+#if defined(ATA_DOWNGRADE_MODE) && NATA_DMA
static int ata_downgrade_mode(struct ata_drive_datas *, int);
#endif
@@ -965,8 +965,19 @@ ata_dmaerr(struct ata_drive_datas *drvp,
*/
drvp->n_dmaerrs++;
if (drvp->n_dmaerrs >= NERRS_MAX && drvp->n_xfers <= NXFER) {
+#ifdef ATA_DOWNGRADE_MODE
ata_downgrade_mode(drvp, flags);
drvp->n_dmaerrs = NERRS_MAX-1;
+#else
+ static struct timeval last;
+ static const struct timeval serrintvl = { 300, 0 };
+
+ if (ratecheck(&last, &serrintvl)) {
+ aprint_error_dev(drvp->drv_softc,
+ "excessive DMA errors - %d in last %d transfers\n",
+ drvp->n_dmaerrs, drvp->n_xfers);
+ }
+#endif
drvp->n_xfers = 0;
return;
}
@@ -1752,7 +1763,7 @@ ata_print_modes(struct ata_channel *chp)
}
}
-#if NATA_DMA
+#if defined(ATA_DOWNGRADE_MODE) && NATA_DMA
/*
* downgrade the transfer mode of a drive after an error. return 1 if
* downgrade was possible, 0 otherwise.
@@ -1809,7 +1820,7 @@ ata_downgrade_mode(struct ata_drive_data
ata_thread_run(chp, flags, ATACH_TH_RESET, ATACH_NODRIVE);
return 1;
}
-#endif /* NATA_DMA */
+#endif /* ATA_DOWNGRADE_MODE && NATA_DMA */
/*
* Probe drive's capabilities, for use by the controller later