Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Jun 2019 16:02:50 +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: r349116 - head/sys/arm/ti
Message-ID:  <201906161602.x5GG2oYj059706@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sun Jun 16 16:02:50 2019
New Revision: 349116
URL: https://svnweb.freebsd.org/changeset/base/349116

Log:
  In detach(), call bus_generic_detach() before deleting the iicbus child.
  This gives the bus and its children the chance to return EBUSY to abort
  the detach if they're in the middle of doing some IO.

Modified:
  head/sys/arm/ti/ti_i2c.c

Modified: head/sys/arm/ti/ti_i2c.c
==============================================================================
--- head/sys/arm/ti/ti_i2c.c	Sun Jun 16 15:56:59 2019	(r349115)
+++ head/sys/arm/ti/ti_i2c.c	Sun Jun 16 16:02:50 2019	(r349116)
@@ -735,8 +735,6 @@ ti_i2c_deactivate(device_t dev)
 		sc->sc_irq_h = NULL;
 	}
 
-	bus_generic_detach(sc->sc_dev);
-
 	/* Unmap the I2C controller registers. */
 	if (sc->sc_mem_res != NULL) {
 		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
@@ -925,11 +923,18 @@ ti_i2c_detach(device_t dev)
 	int rv;
 
  	sc = device_get_softc(dev);
-	ti_i2c_deactivate(dev);
-	TI_I2C_LOCK_DESTROY(sc);
-	if (sc->sc_iicbus &&
+
+	if ((rv = bus_generic_detach(dev)) != 0) {
+		device_printf(dev, "cannot detach child devices\n");
+		return (rv);
+	}
+
+    if (sc->sc_iicbus &&
 	    (rv = device_delete_child(dev, sc->sc_iicbus)) != 0)
 		return (rv);
+
+	ti_i2c_deactivate(dev);
+	TI_I2C_LOCK_DESTROY(sc);
 
 	return (0);
 }



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