[i2c] [PATCH] 0/2: I2C && DVB: fix recursive locking lockped warning in i2c_transfer()

Jiri Kosina jikos at jikos.cz
Wed Oct 18 18:37:20 CEST 2006

1/2 adds the 'level' field into the i2c_adapter structure, which is used 
to represent the 'logical' level of nesting for the purposes of lockdep. 
This field is then used in the i2c_transfer() function, to acquire the 
per-adapter bus_lock with correct nesting level.

2/2 adds proper setting of this 'level' parameter in the DVB layer.

These two patches are confirmed to fix the following warning:

[ INFO: possible recursive locking detected ]
2.6.19-rc1-mm1 #4
khubd/451 is trying to acquire lock:
(&adap->bus_lock){--..}, at: [<f8902177>] i2c_transfer+0x23/0x40

but task is already holding lock:
(&adap->bus_lock){--..}, at: [<f8902177>] i2c_transfer+0x23/0x40

other info that might help us debug this:
1 lock held by khubd/451:
#0: (&adap->bus_lock){--..}, at: [<f8902177>] i2c_transfer+0x23/0x40

stack backtrace:
[<c0103b69>] dump_trace+0x65/0x1a2
[<c0103cb6>] show_trace_log_lvl+0x10/0x20
[<c0103f84>] show_trace+0xa/0xc
[<c0103f99>] dump_stack+0x13/0x15
[<c0132ea4>] __lock_acquire+0x7bd/0xa05
[<c01333c1>] lock_acquire+0x5c/0x7b
[<c034b683>] __mutex_lock_slowpath+0xab/0x1de
[<f8902177>] i2c_transfer+0x23/0x40 [i2c_core]
[<f88fa1bf>] dibx000_i2c_gated_tuner_xfer+0x166/0x185 [dibx000_common]
[<f8902183>] i2c_transfer+0x2f/0x40 [i2c_core]
[<f891f04b>] mt2060_readreg+0x4b/0x69 [mt2060]
[<f891f45e>] mt2060_attach+0x40/0x1ea [mt2060]
[<f895f468>] dibusb_dib3000mc_tuner_attach+0x126/0x16c
[ ... ]
(generic USB-layer stacktrace omitted).

Jiri Kosina

More information about the i2c mailing list