Index: sys/compat/linuxkpi/common/src/linux_i2c.c =================================================================== --- sys/compat/linuxkpi/common/src/linux_i2c.c +++ sys/compat/linuxkpi/common/src/linux_i2c.c @@ -221,7 +221,9 @@ return (ENXIO); } + bus_topo_lock(); error = bus_generic_attach(adapter->dev.parent->bsddev); + bus_topo_unlock(); if (error) { device_printf(adapter->dev.parent->bsddev, "failed to attach child: error %d\n", error); @@ -249,7 +251,9 @@ while ((child = device_find_child(adapter->dev.parent->bsddev, "lkpi_iic", unit++)) != NULL) { if (adapter == LKPI_IIC_GET_ADAPTER(child)) { + bus_topo_lock(); device_delete_child(adapter->dev.parent->bsddev, child); + bus_topo_unlock(); rv = 0; goto out; } @@ -259,7 +263,9 @@ while ((child = device_find_child(adapter->dev.parent->bsddev, "lkpi_iicbb", unit++)) != NULL) { if (adapter == LKPI_IIC_GET_ADAPTER(child)) { + bus_topo_lock(); device_delete_child(adapter->dev.parent->bsddev, child); + bus_topo_unlock(); rv = 0; goto out; }