Re: [PATCH v7 18/24] i2c-mux: relax locking of the top i2c adapter during mux-locked muxing

Wolfram Sang
2016-05-03T21:39:04Z

> +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/;