On Thu, 21 Jun 2018 at 19:47:21 -0600, Anthony J. Bentley wrote: > panic: acquiring blockable sleep lock with spinlock or critical section held > (rwlock) iiclk @ /usr/src/sys/dev/ic/dwiic.c:113 > Stopped at db_enter+0x12: popq %r11 > TID PID UID PRFLAGS PFLAGS CPU COMMAND > *369747 67531 0 0x14000 0x200 0K reaper > db_enter() at db_enter+0x12 > panic() at panic+0x138 > witness_checkorder(d0a1b643bcad3978,11,ffffffff81aa5989,9,ffff800000025db8) > at witness_checkorder+0xd57 > _rw_enter(2a616e24e6e03ae6,0,ffff80000001ce00,b) at _rw_enter+0x68 > iatp_t44_read_count(a13932a73db53ac1) at iatp_t44_read_count+0x62 > iatp_intr(4514f632085c499f) at iatp_intr+0x3f > intr_handler(d0169061a91ec50,ffffff011cd62680) at intr_handler+0x74
This should fix it: diff --git sys/dev/i2c/iatp.c sys/dev/i2c/iatp.c index 54e9ca75295..75e7f5ac100 100644 --- sys/dev/i2c/iatp.c +++ sys/dev/i2c/iatp.c @@ -682,12 +682,12 @@ iatp_read_reg(struct iatp_softc *sc, uint16_t reg, size_t len, void *val) uint8_t cmd[2] = { reg & 0xff, (reg >> 8) & 0xff }; int ret; - iic_acquire_bus(sc->sc_tag, 0); + iic_acquire_bus(sc->sc_tag, I2C_F_POLL); ret = iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP, sc->sc_addr, &cmd, sizeof(cmd), val, len, I2C_F_POLL); - iic_release_bus(sc->sc_tag, 0); + iic_release_bus(sc->sc_tag, I2C_F_POLL); return ret; }