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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux