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); } + mtx_lock(&Giant); error = bus_generic_attach(adapter->dev.parent->bsddev); + mtx_unlock(&Giant); 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)) { + mtx_lock(&Giant); device_delete_child(adapter->dev.parent->bsddev, child); + mtx_unlock(&Giant); 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)) { + mtx_unlock(&Giant); device_delete_child(adapter->dev.parent->bsddev, child); + mtx_unlock(&Giant); rv = 0; goto out; }