Mark the imx_spi device busy while transfers are in progress, so that the

module can't be unloaded while interrupts are pending.
This commit is contained in:
Ian Lepore 2019-03-11 03:07:05 +00:00
parent b3ec1ab8dc
commit 6daa4a4079
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=345000

View File

@ -424,6 +424,7 @@ spi_transfer(device_t dev, device_t child, struct spi_command *cmd)
}
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_command *cmd)
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);