Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Mar 2019 03:07:05 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r345000 - head/sys/arm/freescale/imx
Message-ID:  <201903110307.x2B375LX044892@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Mon Mar 11 03:07:05 2019
New Revision: 345000
URL: https://svnweb.freebsd.org/changeset/base/345000

Log:
  Mark the imx_spi device busy while transfers are in progress, so that the
  module can't be unloaded while interrupts are pending.

Modified:
  head/sys/arm/freescale/imx/imx_spi.c

Modified: head/sys/arm/freescale/imx/imx_spi.c
==============================================================================
--- head/sys/arm/freescale/imx/imx_spi.c	Mon Mar 11 03:02:58 2019	(r344999)
+++ head/sys/arm/freescale/imx/imx_spi.c	Mon Mar 11 03:07:05 2019	(r345000)
@@ -424,6 +424,7 @@ spi_transfer(device_t dev, device_t child, struct spi_
 	}
 
 	mtx_lock(&sc->mtx);
+	device_busy(sc->dev);
 
 	if (sc->debug >= 1) {
 		device_printf(sc->dev,
@@ -448,6 +449,7 @@ spi_transfer(device_t dev, device_t child, struct spi_
 	spi_set_chipsel(sc, cs, false);
 	WR4(sc, ECSPI_CTLREG, 0);
 
+	device_unbusy(sc->dev);
 	mtx_unlock(&sc->mtx);
 
 	return (err);
@@ -468,11 +470,11 @@ static int
 spi_detach(device_t dev)
 {
 	struct spi_softc *sc = device_get_softc(dev);
-	int idx;
+	int error, idx;
 
-	mtx_lock(&sc->mtx);
+	if ((error = bus_generic_detach(sc->dev)) != 0)
+		return (error);
 
-	bus_generic_detach(sc->dev);
 	if (sc->spibus != NULL)
 		device_delete_child(dev, sc->spibus);
 
@@ -488,7 +490,6 @@ spi_detach(device_t dev)
 	if (sc->memres != NULL)
 		bus_release_resource(sc->dev, SYS_RES_MEMORY, 0, sc->memres);
 
-	mtx_unlock(&sc->mtx);
 	mtx_destroy(&sc->mtx);
 
 	return (0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903110307.x2B375LX044892>