Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aea16005 authored by Daniel Scheller's avatar Daniel Scheller Committed by Mauro Carvalho Chehab
Browse files

media: dvb-frontends/stv0910: WARN_ON() on consecutive mutex_unlock()



Stack dump when gate_ctrl() is called in a way that consecutive unlocks
happen. This is a clear indication that other drivers interfacing with
the stv0910 driver don't do things properly or don't check for failures,
so dump stack so that those drivers can be identified and fixed.

Signed-off-by: default avatarDaniel Scheller <d.scheller@gmx.net>
Tested-by: default avatarRichard Scobie <rascobie@slingshot.co.nz>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 1cba4ae0
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -1241,6 +1241,7 @@ static int gate_ctrl(struct dvb_frontend *fe, int enable)
	if (write_reg(state, state->nr ? RSTV0910_P2_I2CRPT :
	if (write_reg(state, state->nr ? RSTV0910_P2_I2CRPT :
		      RSTV0910_P1_I2CRPT, i2crpt) < 0) {
		      RSTV0910_P1_I2CRPT, i2crpt) < 0) {
		/* don't hold the I2C bus lock on failure */
		/* don't hold the I2C bus lock on failure */
		if (!WARN_ON(!mutex_is_locked(&state->base->i2c_lock)))
			mutex_unlock(&state->base->i2c_lock);
			mutex_unlock(&state->base->i2c_lock);
		dev_err(&state->base->i2c->dev,
		dev_err(&state->base->i2c->dev,
			"%s() write_reg failure (enable=%d)\n",
			"%s() write_reg failure (enable=%d)\n",
@@ -1251,6 +1252,7 @@ static int gate_ctrl(struct dvb_frontend *fe, int enable)
	state->i2crpt = i2crpt;
	state->i2crpt = i2crpt;


	if (!enable)
	if (!enable)
		if (!WARN_ON(!mutex_is_locked(&state->base->i2c_lock)))
			mutex_unlock(&state->base->i2c_lock);
			mutex_unlock(&state->base->i2c_lock);
	return 0;
	return 0;
}
}