Messages in this thread | | | Date | Tue, 3 May 2016 23:38:45 +0200 | From | Wolfram Sang <> | Subject | Re: [PATCH v7 18/24] i2c-mux: relax locking of the top i2c adapter during mux-locked muxing |
| |
> +static int i2c_mux_trylock_bus(struct i2c_adapter *adapter, int flags) > +{ > + struct i2c_mux_priv *priv = adapter->algo_data; > + struct i2c_adapter *parent = priv->muxc->parent; > + > + if (!rt_mutex_trylock(&parent->mux_lock)) > + return 0; > + if (!(flags & I2C_LOCK_ADAPTER)) > + return 1; > + if (parent->trylock_bus(parent, flags)) > + return 1; > + rt_mutex_unlock(&parent->mux_lock); > + return 0; > +}
This function needs a few short comments why we can leave in this or that state. Not everyone knows the exit values of trylock by heart and then it can look a little confusing.
> static int i2c_parent_trylock_bus(struct i2c_adapter *adapter, int flags) > @@ -111,7 +189,12 @@ static int i2c_parent_trylock_bus(struct i2c_adapter *adapter, int flags) > struct i2c_mux_priv *priv = adapter->algo_data; > struct i2c_adapter *parent = priv->muxc->parent; > > - return parent->trylock_bus(parent, flags); > + if (!rt_mutex_trylock(&parent->mux_lock)) > + return 0; > + if (parent->trylock_bus(parent, flags)) > + return 1; > + rt_mutex_unlock(&parent->mux_lock); > + return 0; > }
Same comment as i2c_mux_trylock_bus.
> struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, > struct device *dev, int max_adapters, > @@ -140,6 +250,8 @@ struct i2c_mux_core *i2c_mux_alloc(struct i2c_adapter *parent, > > muxc->parent = parent; > muxc->dev = dev; > + if (flags & I2C_MUX_LOCKED) > + muxc->mux_locked = 1;
s/1/true/;
| |