Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/jdolecek-ncq]: src/sys/dev/ic fix to not access active_xfer directly
details: https://anonhg.NetBSD.org/src/rev/0561d525280e
branches: jdolecek-ncq
changeset: 352619:0561d525280e
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Tue Apr 11 18:13:17 2017 +0000
description:
fix to not access active_xfer directly
diffstat:
sys/dev/ic/ahcisata_core.c | 6 +++---
sys/dev/ic/mvsata.c | 42 +++++++++++++++++++++---------------------
sys/dev/ic/siisata.c | 10 +++++-----
3 files changed, 29 insertions(+), 29 deletions(-)
diffs (189 lines):
diff -r 7e03ff218fc6 -r 0561d525280e sys/dev/ic/ahcisata_core.c
--- a/sys/dev/ic/ahcisata_core.c Mon Apr 10 22:57:02 2017 +0000
+++ b/sys/dev/ic/ahcisata_core.c Tue Apr 11 18:13:17 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ahcisata_core.c,v 1.57.6.1 2017/04/10 22:57:02 jdolecek Exp $ */
+/* $NetBSD: ahcisata_core.c,v 1.57.6.2 2017/04/11 18:13:17 jdolecek Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.57.6.1 2017/04/10 22:57:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.57.6.2 2017/04/11 18:13:17 jdolecek Exp $");
#include <sys/types.h>
#include <sys/malloc.h>
@@ -1433,7 +1433,7 @@
ahci_timeout(void *v)
{
struct ata_channel *chp = (struct ata_channel *)v;
- struct ata_xfer *xfer = chp->ch_queue->active_xfers[0];
+ struct ata_xfer *xfer = ata_queue_hwslot_to_xfer(chp->ch_queue, 0); /* XXX slot */
#ifdef AHCI_DEBUG
struct ahci_softc *sc = (struct ahci_softc *)chp->ch_atac;
#endif
diff -r 7e03ff218fc6 -r 0561d525280e sys/dev/ic/mvsata.c
--- a/sys/dev/ic/mvsata.c Mon Apr 10 22:57:02 2017 +0000
+++ b/sys/dev/ic/mvsata.c Tue Apr 11 18:13:17 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mvsata.c,v 1.35.6.1 2017/04/10 22:57:02 jdolecek Exp $ */
+/* $NetBSD: mvsata.c,v 1.35.6.2 2017/04/11 18:13:17 jdolecek Exp $ */
/*
* Copyright (c) 2008 KIYOHARA Takashi
* All rights reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.35.6.1 2017/04/10 22:57:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mvsata.c,v 1.35.6.2 2017/04/11 18:13:17 jdolecek Exp $");
#include "opt_mvsata.h"
@@ -630,7 +630,10 @@
xfer = mvport->port_reqtbl[i].xfer;
if (xfer == NULL)
continue;
- chp->ch_queue->active_xfers[0] = xfer;
+#if 0
+ /* This doesn't seem to be needed? */
+ chp->ch_queue->active_xfers[0] = xfer; /* XXX slot */
+#endif
xfer->c_kill_xfer(chp, xfer, KILL_RESET);
}
@@ -1447,15 +1450,11 @@
ata_bio->bcount = xfer->c_bcount;
/* mark controller inactive and free xfer */
- KASSERT(chp->ch_queue->active_xfers[0] != NULL);
ata_deactivate_xfer(chp, xfer);
ata_free_xfer(chp, xfer);
- if (chp->ch_drive[drive].drive_flags & ATA_DRIVE_WAITDRAIN) {
+ if (ata_waitdrain_check(chp, drive)) {
ata_bio->error = ERR_NODEV;
- chp->ch_drive[drive].drive_flags &= ~ATA_DRIVE_WAITDRAIN;
- wakeup(chp->ch_queue->active_xfers);
- }
ata_bio->flags |= ATA_ITSDONE;
(*chp->ch_drive[drive].drv_done)(chp->ch_drive[drive].drv_softc);
atastart(chp);
@@ -1820,11 +1819,8 @@
MVSATA_WDC_WRITE_1(mvport, SRB_CAS, WDCTL_4BIT);
delay(10); /* some drives need a little delay here */
}
- if (chp->ch_drive[xfer->c_drive].drive_flags & ATA_DRIVE_WAITDRAIN) {
- mvsata_wdc_cmd_kill_xfer(chp, xfer, KILL_GONE);
- chp->ch_drive[xfer->c_drive].drive_flags &= ~ATA_DRIVE_WAITDRAIN;
- wakeup(chp->ch_queue->active_xfers);
- } else
+
+ if (!ata_waitdrain_xfer_check(chp, xfer))
mvsata_wdc_cmd_done_end(chp, xfer);
}
@@ -2462,8 +2458,9 @@
return rv;
KASSERT(mvport->port_reqtbl[quetag].xfer == NULL);
- KASSERT(chp->ch_queue->active_xfers[0] != NULL);
- mvport->port_reqtbl[quetag].xfer = chp->ch_queue->active_xfers[0];
+ KASSERT(ata_queue_hwslot_to_xfer(chp->ch_queue, 0) != NULL);
+ mvport->port_reqtbl[quetag].xfer = ata_queue_hwslot_to_xfer(
+ chp->ch_queue, 0); /* XXX slot */
/* setup EDMA Physical Region Descriptors (ePRD) Table Data */
data_dmamap = mvport->port_reqtbl[quetag].data_dmamap;
@@ -2576,8 +2573,8 @@
#endif
crpb = mvport->port_crpb + erpqop;
quetag = CRPB_CHOSTQUETAG(le16toh(crpb->id));
- KASSERT(chp->ch_queue->active_xfers[0] != NULL);
- xfer = chp->ch_queue->active_xfers[0];
+ xfer = ata_queue_hwslot_to_xfer(chp->ch_queue, 0); /* XXX slot */
+ KASSERT(xfer != NULL);
KASSERT(xfer == mvport->port_reqtbl[quetag].xfer);
#ifdef DIAGNOSTIC
if (xfer == NULL)
@@ -2765,9 +2762,10 @@
if (rv != 0)
return rv;
- KASSERT(chp->ch_queue->active_xfers[0] != NULL);
+ KASSERT(ata_queue_hwslot_to_xfer(chp->ch_queue, 0) != NULL);
KASSERT(mvport->port_reqtbl[quetag].xfer == NULL);
- mvport->port_reqtbl[quetag].xfer = chp->ch_queue->active_xfers[0];
+ mvport->port_reqtbl[quetag].xfer = ata_queue_hwslot_to_xfer(
+ chp->ch_queue, 0); /* XXX slot */
/* setup EDMA Physical Region Descriptors (ePRD) Table Data */
data_dmamap = mvport->port_reqtbl[quetag].data_dmamap;
@@ -3452,7 +3450,8 @@
uint8_t cmd, head;
int i;
const int drive =
- mvport->port_ata_channel.ch_queue->active_xfers[0]->c_drive;
+ ata_queue_hwslot_to_xfer(mvport->port_ata_channel.ch_queue, 0) /* XXX slot */
+ ->c_drive;
eprd_addr = mvport->port_eprd_dmamap->dm_segs[0].ds_addr +
mvport->port_reqtbl[quetag].eprd_offset;
@@ -3700,7 +3699,8 @@
uint32_t ctrlflg, rw;
uint8_t cmd, head;
const int drive =
- mvport->port_ata_channel.ch_queue->active_xfers[0]->c_drive;
+ ata_queue_hwslot_to_xfer(mvport->port_ata_channel.ch_queue, 0) /* XXX slot */
+ ->c_drive;
eprd_addr = mvport->port_eprd_dmamap->dm_segs[0].ds_addr +
mvport->port_reqtbl[quetag].eprd_offset;
diff -r 7e03ff218fc6 -r 0561d525280e sys/dev/ic/siisata.c
--- a/sys/dev/ic/siisata.c Mon Apr 10 22:57:02 2017 +0000
+++ b/sys/dev/ic/siisata.c Tue Apr 11 18:13:17 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: siisata.c,v 1.30.4.1 2017/04/10 22:57:02 jdolecek Exp $ */
+/* $NetBSD: siisata.c,v 1.30.4.2 2017/04/11 18:13:17 jdolecek Exp $ */
/* from ahcisata_core.c */
@@ -79,7 +79,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.30.4.1 2017/04/10 22:57:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: siisata.c,v 1.30.4.2 2017/04/11 18:13:17 jdolecek Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -480,7 +480,7 @@
sc = (struct siisata_softc *)schp->ata_channel.ch_atac;
chp = &schp->ata_channel;
- xfer = chp->ch_queue->active_xfers[0];
+ xfer = ata_queue_hwslot_to_xfer(chp->ch_queue, 0); /* XXX slot */
slot = SIISATA_NON_NCQ_SLOT;
pis = PRREAD(sc, PRX(chp->ch_channel, PRO_PIS));
@@ -640,7 +640,7 @@
DELAY(10);
PRWRITE(sc, PRX(chp->ch_channel, PRO_SERROR),
PRREAD(sc, PRX(chp->ch_channel, PRO_SERROR)));
- if ((xfer = chp->ch_queue->active_xfers[0]) != NULL) {
+ if ((xfer = ata_queue_hwslot_to_xfer(chp->ch_queue, 0)) != NULL) { /* XXX slot */
(*xfer->c_kill_xfer)(chp, xfer, KILL_RESET);
}
@@ -1191,7 +1191,7 @@
siisata_timeout(void *v)
{
struct ata_channel *chp = (struct ata_channel *)v;
- struct ata_xfer *xfer = chp->ch_queue->active_xfers[0];
+ struct ata_xfer *xfer = ata_queue_hwslot_to_xfer(chp->ch_queue, 0); /* XXX slot */
int slot = SIISATA_NON_NCQ_SLOT;
int s = splbio();
SIISATA_DEBUG_PRINT(("%s: %p\n", __func__, xfer), DEBUG_INTR);
Home |
Main Index |
Thread Index |
Old Index