Re: [PATCH v3 05/18] mux: add mux_chip_resume() function

Thomas Richard
2024-02-16T07:52:24Z

On 2/15/24 16:29, Andy Shevchenko wrote:
> On Thu, Feb 15, 2024 at 04:17:50PM +0100, Thomas Richard wrote:
>> The mux_chip_resume() function restores a mux_chip using the cached state
>> of each mux.
>
> ...
>
>> +int mux_chip_resume(struct mux_chip *mux_chip)
>> +{
>> + int global_ret = 0;
>> + int ret, i;
>> +
>> + for (i = 0; i < mux_chip->controllers; ++i) {
>> + struct mux_control *mux = &mux_chip->mux[i];
>> +
>> + if (mux->cached_state == MUX_CACHE_UNKNOWN)
>> + continue;
>> +
>> + ret = mux_control_set(mux, mux->cached_state);
>> + if (ret < 0) {
>> + dev_err(&mux_chip->dev, "unable to restore state\n");
>> + if (!global_ret)
>> + global_ret = ret;
>
> Hmm... This will record the first error and continue.

In the v2 we talked about this with Peter Rosin.

In fact, in the v1 (mux_chip_resume() didn't exists yet, everything was
done in the mmio driver) I had the same behavior: try to restore all
muxes and in case of error restore the first one.

I don't know what is the right solution. I just restored the behavior I
had in v1.

>
>> + }
>> + }
>> + return global_ret;
>
> So here, we actually will get stale data in case there are > 1 failures.

Yes, indeed. But we will have an error message for each failure.

>
>> +}
>
--
Thomas Richard, Bootlin
Embedded Linux and Kernel engineering