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;
 

Reply via email to