Module Name: src
Committed By: nat
Date: Fri Nov 22 07:16:01 UTC 2024
Modified Files:
src/sys/arch/mac68k/dev: sbc.c sbcvar.h
src/sys/arch/mac68k/obio: sbc_obio.c
Log Message:
Serialize drq interrupt.
This results in error free transfers between disks.
Part of PR kern/58452.
To generate a diff of this commit:
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/mac68k/dev/sbc.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/mac68k/dev/sbcvar.h
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/mac68k/obio/sbc_obio.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/arch/mac68k/dev/sbc.c
diff -u src/sys/arch/mac68k/dev/sbc.c:1.63 src/sys/arch/mac68k/dev/sbc.c:1.64
--- src/sys/arch/mac68k/dev/sbc.c:1.63 Sat Oct 26 21:02:51 2024
+++ src/sys/arch/mac68k/dev/sbc.c Fri Nov 22 07:16:01 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: sbc.c,v 1.63 2024/10/26 21:02:51 nat Exp $ */
+/* $NetBSD: sbc.c,v 1.64 2024/11/22 07:16:01 nat Exp $ */
/*
* Copyright (C) 1996 Scott Reynolds. All rights reserved.
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbc.c,v 1.63 2024/10/26 21:02:51 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbc.c,v 1.64 2024/11/22 07:16:01 nat Exp $");
#include "opt_ddb.h"
@@ -443,6 +443,7 @@ sbc_drq_intr(void *p)
printf("%s: drq intr, dh_len=0x%x, dh_flags=0x%x\n",
device_xname(ncr_sc->sc_dev), dh->dh_len, dh->dh_flags);
#endif
+ mutex_enter(&sc->sc_drq_lock);
s = splbio();
/*
@@ -480,6 +481,8 @@ sbc_drq_intr(void *p)
splx(s);
+ mutex_exit(&sc->sc_drq_lock);
+
return;
}
@@ -616,6 +619,8 @@ no_more:
splx(s);
+ mutex_exit(&sc->sc_drq_lock);
+
#ifdef SBC_DEBUG
if (sbc_debug & (SBC_DB_REG | SBC_DB_INTR))
printf("%s: drq intr complete: csr=0x%x, bus_csr=0x%x\n",
Index: src/sys/arch/mac68k/dev/sbcvar.h
diff -u src/sys/arch/mac68k/dev/sbcvar.h:1.14 src/sys/arch/mac68k/dev/sbcvar.h:1.15
--- src/sys/arch/mac68k/dev/sbcvar.h:1.14 Mon Jan 22 06:28:49 2024
+++ src/sys/arch/mac68k/dev/sbcvar.h Fri Nov 22 07:16:01 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: sbcvar.h,v 1.14 2024/01/22 06:28:49 nat Exp $ */
+/* $NetBSD: sbcvar.h,v 1.15 2024/11/22 07:16:01 nat Exp $ */
/*
* Copyright (C) 1996 Scott Reynolds. All rights reserved.
@@ -63,6 +63,7 @@ struct sbc_softc {
volatile int sc_resid;
int sc_options; /* options for this instance. */
struct sbc_pdma_handle sc_pdma[SCI_OPENINGS];
+ kmutex_t sc_drq_lock;
};
/*
Index: src/sys/arch/mac68k/obio/sbc_obio.c
diff -u src/sys/arch/mac68k/obio/sbc_obio.c:1.25 src/sys/arch/mac68k/obio/sbc_obio.c:1.26
--- src/sys/arch/mac68k/obio/sbc_obio.c:1.25 Mon Nov 23 00:11:44 2009
+++ src/sys/arch/mac68k/obio/sbc_obio.c Fri Nov 22 07:16:01 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: sbc_obio.c,v 1.25 2009/11/23 00:11:44 rmind Exp $ */
+/* $NetBSD: sbc_obio.c,v 1.26 2024/11/22 07:16:01 nat Exp $ */
/*
* Copyright (C) 1996,1997 Scott Reynolds. All rights reserved.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbc_obio.c,v 1.25 2009/11/23 00:11:44 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbc_obio.c,v 1.26 2024/11/22 07:16:01 nat Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -208,6 +208,8 @@ sbc_obio_attach(device_t parent, device_
via2_register_irq(VIA2_SCSIDRQ, sbc_drq_intr, ncr_sc);
}
+ mutex_init(&sc->sc_drq_lock, MUTEX_DEFAULT, IPL_SOFTBIO);
+
via2_register_irq(VIA2_SCSIIRQ, sbc_irq_intr, ncr_sc);
sc->sc_clrintr = sbc_obio_clrintr;