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;