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;
 }

Reply via email to