Module Name: src Committed By: jdolecek Date: Sat Oct 7 15:24:36 UTC 2017
Modified Files: src/sys/dev/ata [jdolecek-ncq]: wd.c wdvar.h Log Message: make usage of NCQ 'high' priority for BPRIO_TIMECRITICAL xfers settable via sysctl, too To generate a diff of this commit: cvs rdiff -u -r1.428.2.35 -r1.428.2.36 src/sys/dev/ata/wd.c cvs rdiff -u -r1.43.4.9 -r1.43.4.10 src/sys/dev/ata/wdvar.h 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/wd.c diff -u src/sys/dev/ata/wd.c:1.428.2.35 src/sys/dev/ata/wd.c:1.428.2.36 --- src/sys/dev/ata/wd.c:1.428.2.35 Thu Sep 28 20:34:23 2017 +++ src/sys/dev/ata/wd.c Sat Oct 7 15:24:36 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: wd.c,v 1.428.2.35 2017/09/28 20:34:23 jdolecek Exp $ */ +/* $NetBSD: wd.c,v 1.428.2.36 2017/10/07 15:24:36 jdolecek Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved. @@ -54,7 +54,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.428.2.35 2017/09/28 20:34:23 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.428.2.36 2017/10/07 15:24:36 jdolecek Exp $"); #include "opt_ata.h" #include "opt_wd.h" @@ -751,7 +751,7 @@ wdstart1(struct wd_softc *wd, struct buf xfer->c_bio.flags |= ATA_LBA48; xfer->c_flags |= C_NCQ; - if ((wd->drvp->drive_flags & ATA_DRIVE_NCQ_PRIO) && + if (WD_USE_NCQ_PRIO(wd) && BIO_GETPRIO(bp) == BPRIO_TIMECRITICAL) xfer->c_bio.flags |= ATA_PRIO_HIGH; } @@ -2360,6 +2360,19 @@ wd_sysctl_attach(struct wd_softc *wd) return; } + wd->drv_ncq_prio = true; + if ((error = sysctl_createv(&wd->nodelog, 0, NULL, NULL, + CTLFLAG_READWRITE, CTLTYPE_BOOL, "use_ncq_prio", + SYSCTL_DESCR("use NCQ PRIORITY if supported"), + NULL, 0, &wd->drv_ncq_prio, 0, + CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL)) + != 0) { + aprint_error_dev(wd->sc_dev, + "could not create %s.%s.use_ncq_prio sysctl - error %d\n", + "hw", device_xname(wd->sc_dev), error); + return; + } + #ifdef WD_CHAOS_MONKEY wd->drv_chaos_freq = 0; if ((error = sysctl_createv(&wd->nodelog, 0, NULL, NULL, Index: src/sys/dev/ata/wdvar.h diff -u src/sys/dev/ata/wdvar.h:1.43.4.9 src/sys/dev/ata/wdvar.h:1.43.4.10 --- src/sys/dev/ata/wdvar.h:1.43.4.9 Thu Sep 28 20:34:23 2017 +++ src/sys/dev/ata/wdvar.h Sat Oct 7 15:24:36 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: wdvar.h,v 1.43.4.9 2017/09/28 20:34:23 jdolecek Exp $ */ +/* $NetBSD: wdvar.h,v 1.43.4.10 2017/10/07 15:24:36 jdolecek Exp $ */ /* * Copyright (c) 1998, 2001 Manuel Bouyer. @@ -78,6 +78,9 @@ struct wd_softc { bool drv_ncq; #define WD_USE_NCQ(wd) \ ((wd)->drv_ncq && ((wd)->drvp->drive_flags & ATA_DRIVE_NCQ)) + bool drv_ncq_prio; +#define WD_USE_NCQ_PRIO(wd) \ + ((wd)->drv_ncq_prio && ((wd)->drvp->drive_flags & ATA_DRIVE_NCQ_PRIO)) #ifdef WD_CHAOS_MONKEY int drv_chaos_freq; /* frequency of simulated bio errors */ int drv_chaos_cnt; /* count of processed bio read xfers */