svn commit: r346558 - stable/11/sys/arm/freescale/imx

2019-09-03 Thread Ian Lepore
Author: ian
Date: Mon Apr 22 15:06:56 2019
New Revision: 346558
URL: https://svnweb.freebsd.org/changeset/base/346558

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

Modified:
  stable/11/sys/arm/freescale/imx/imx_spi.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/arm/freescale/imx/imx_spi.c
==
--- stable/11/sys/arm/freescale/imx/imx_spi.c   Mon Apr 22 15:04:11 2019
(r346557)
+++ stable/11/sys/arm/freescale/imx/imx_spi.c   Mon Apr 22 15:06:56 2019
(r346558)
@@ -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);


___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"


svn commit: r346558 - stable/11/sys/arm/freescale/imx

2019-04-22 Thread Ian Lepore
Author: ian
Date: Mon Apr 22 15:06:56 2019
New Revision: 346558
URL: https://svnweb.freebsd.org/changeset/base/346558

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

Modified:
  stable/11/sys/arm/freescale/imx/imx_spi.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/arm/freescale/imx/imx_spi.c
==
--- stable/11/sys/arm/freescale/imx/imx_spi.c   Mon Apr 22 15:04:11 2019
(r346557)
+++ stable/11/sys/arm/freescale/imx/imx_spi.c   Mon Apr 22 15:06:56 2019
(r346558)
@@ -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);
___
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"