From: Heiner Kallweit <hkallweit1@gmail.com>
To: "Michał Zegan" <webczat_200@poczta.onet.pl>,
"Ulf Hansson" <ulf.hansson@linaro.org>,
"Kevin Hilman" <khilman@baylibre.com>
Cc: linux-amlogic@lists.infradead.org,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>
Subject: Re: [PATCH v2 6/9] mmc: meson-gx: remove unneeded meson_mmc_clk_set in meson_mmc_clk_init
Date: Sat, 18 Feb 2017 11:49:22 +0100 [thread overview]
Message-ID: <b238ee08-66d5-59a1-4e1d-33078103291e@gmail.com> (raw)
In-Reply-To: <c8cdaef4-3de2-139d-5339-c5ad5c81fd4b@gmail.com>
Am 18.02.2017 um 11:37 schrieb Heiner Kallweit:
> Am 18.02.2017 um 04:44 schrieb Michał Zegan:
>> Hello Heiner,
>>
>> W dniu 16.02.2017 o 20:42, Heiner Kallweit pisze:
>>> This clk_disable_unprepare isn't right here. At first the condition
>>> should be "if (ret)" as the disable/unprepare is supposed to be
>>> executed if the previous command fails.
>>> And if the previous command fails and meson_mmc_clk_init returns
>>> an error, then probe jumps to label free_host where we have this
>>> disable/unprepare already.
>>>
>>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>>> ---
>>> v2:
>>> - extended commit message
>>> ---
>>> drivers/mmc/host/meson-gx-mmc.c | 6 +-----
>>> 1 file changed, 1 insertion(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
>>> index 68e76fa8..850b0152 100644
>>> --- a/drivers/mmc/host/meson-gx-mmc.c
>>> +++ b/drivers/mmc/host/meson-gx-mmc.c
>>> @@ -320,11 +320,7 @@ static int meson_mmc_clk_init(struct meson_host *host)
>>> /* Get the nearest minimum clock to 400KHz */
>>> host->mmc->f_min = clk_round_rate(host->cfg_div_clk, 400000);
>>>
>>> - ret = meson_mmc_clk_set(host, host->mmc->f_min);
>>> - if (!ret)
>>> - clk_disable_unprepare(host->cfg_div_clk);
>>> -
>>> - return ret;
>>> + return meson_mmc_clk_set(host, host->mmc->f_min);
>>> }
>>>
>>> static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
>>>
>>
>> I see one problem here.
>> As you said, if the previous command (that is the meson_mmc_clk_set
>> function call) fails, then the whole meson_mmc_clk_init returns an error
>> value, and meson_mmc_probe jumps to free_host and disables the clock there.
>> But what happens if the clk_prepare_enable is the line that fails? in
>> this case, the function returns an error value too, and in the free_host
>> meson_mmc_probe tries to disable the clock that is not enabled, and that
>> probably results in a kernel warning because you tried to disable a
>> disabled clock.
>> I was preparing a patch to disable clocks in the probe function only if
>> they were enabled before, but then the meson_mmc_clk_init function
>> remains a problem, because we don't know if the clock was enabled
>> successfully or not when it returns an error.
>>
> Thanks for pointing out, you're right. The solution however should be
> quite easy. I meson_mmc_clk_init we just change the condition of
> the disable/unprepare to "if (ret)" and in probe we remove this
> disable/unprepare from the error path.
>
This was a little too fast, it's not that easy. But I'll come up with
a changed version.
next prev parent reply other threads:[~2017-02-18 10:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <7d5263e2-9325-dedb-a5f6-954c4a09e977@gmail.com>
2017-02-16 19:40 ` [PATCH v2 1/9] mmc: meson-gx: simplify bounce buffer setting in meson_mmc_start_cmd Heiner Kallweit
2017-02-16 19:41 ` [PATCH v2 2/9] mmc: meson-gx: make two functions return void Heiner Kallweit
2017-02-16 19:41 ` [PATCH v2 3/9] mmc: meson-gx: remove unused members irq, ocr_mask from struct meson_host Heiner Kallweit
2017-02-16 19:41 ` [PATCH v2 4/9] mmc: meson-gx: remove unneeded variable in meson_mmc_clk_init Heiner Kallweit
2017-02-16 19:41 ` [PATCH v2 5/9] mmc: meson-gx: remove member parent_mux from struct meson_host Heiner Kallweit
2017-02-16 19:42 ` [PATCH v2 6/9] mmc: meson-gx: remove unneeded meson_mmc_clk_set in meson_mmc_clk_init Heiner Kallweit
2017-02-17 19:51 ` Kevin Hilman
2017-02-18 3:44 ` Michał Zegan
[not found] ` <c8cdaef4-3de2-139d-5339-c5ad5c81fd4b@gmail.com>
2017-02-18 10:49 ` Heiner Kallweit [this message]
2017-02-18 11:26 ` Michał Zegan
2017-02-16 19:42 ` [PATCH v2 7/9] mmc: meson-gx: remove unneeded devm_kstrdup " Heiner Kallweit
2017-02-16 19:42 ` [PATCH v2 8/9] mmc: meson-gx: improve initial configuration Heiner Kallweit
2017-02-16 19:42 ` [PATCH v2 9/9] mmc: meson-gx: remove member mrq from struct meson_host Heiner Kallweit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b238ee08-66d5-59a1-4e1d-33078103291e@gmail.com \
--to=hkallweit1@gmail.com \
--cc=khilman@baylibre.com \
--cc=linux-amlogic@lists.infradead.org \
--cc=linux-mmc@vger.kernel.org \
--cc=ulf.hansson@linaro.org \
--cc=webczat_200@poczta.onet.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox