Re: [PATCH 4.10 012/167] mmc: sdhci-acpi: support deferred probe

From: Zhang Rui
Date: Tue Mar 28 2017 - 01:51:59 EST


On Mon, 2017-03-27 at 18:36 +0200, Greg Kroah-Hartman wrote:
> On Mon, Mar 27, 2017 at 10:40:23AM +0800, Zhang Rui wrote:
> >
> > On Sun, 2017-03-26 at 12:26 +0100, Andrey Utkin wrote:
> > >
> > > On Fri, Mar 10, 2017 at 10:07:35AM +0100, Greg Kroah-Hartman
> > > wrote:
> > > >
> > > >
> > > > 4.10-stable review patch.ÂÂIf anyone has any objections, please
> > > > let
> > > > me know.
> > > >
> > > > ------------------
> > > >
> > > > From: Zhang Rui <rui.zhang@xxxxxxxxx>
> > > >
> > > > commit e28d6f048799acb0014491e6b74e580d84bd7916 upstream.
> > > >
> > > > With commit 67bf5156edc4 ("gpio / ACPI: fix returned error from
> > > > acpi_dev_gpio_irq_get()"), mmc_gpiod_request_cd() returns
> > > > -EPROBE_DEFER if
> > > > GPIO is not ready when sdhci-acpi driver is probed, and sdhci-
> > > > acpi
> > > > driver
> > > > should be probed again later in this case.
> > > >
> > > > This fixes an order issue when both GPIO and sdhci-acpi drivers
> > > > are
> > > > built
> > > > as modules.
> > > >
> > > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=177101htt
> > > > ps://bugzilla.kernel.org/show_bug.cgi?id=177101
> > > > Tested-by: Jonas Aaberg <cja@xxxxxxx>
> > > > Signed-off-by: Zhang Rui <rui.zhang@xxxxxxxxx>
> > > > Acked-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > > > Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> > > > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> > > >
> > > > ---
> > > > Âdrivers/mmc/host/sdhci-acpi.c |ÂÂÂÂ5 ++++-
> > > > Â1 file changed, 4 insertions(+), 1 deletion(-)
> > > >
> > > > --- a/drivers/mmc/host/sdhci-acpi.c
> > > > +++ b/drivers/mmc/host/sdhci-acpi.c
> > > > @@ -467,7 +467,10 @@ static int sdhci_acpi_probe(struct platf
> > > > Â if (sdhci_acpi_flag(c, SDHCI_ACPI_SD_CD)) {
> > > > Â bool v = sdhci_acpi_flag(c,
> > > > SDHCI_ACPI_SD_CD_OVERRIDE_LEVEL);
> > > > Â
> > > > - if (mmc_gpiod_request_cd(host->mmc, NULL, 0,
> > > > v, 0,
> > > > NULL)) {
> > > > + err = mmc_gpiod_request_cd(host->mmc, NULL, 0,
> > > > v,
> > > > 0, NULL);
> > > > + if (err) {
> > > > + if (err == -EPROBE_DEFER)
> > > > + goto err_free;
> > > > Â dev_warn(dev, "failed to setup card
> > > > detect
> > > > gpio\n");
> > > > Â c->use_runtime_pm = false;
> > > > Â }
> > > >
> > > >
> > > Regression reported: https://bugzilla.kernel.org/show_bug.cgi?id=
> > > 1948
> > > 71
> > >
> > > Reverting this patch is said to fix the issue for 4.10.2.
> > thanks for raising the issue. Let's see check why it breaks in the
> > bugzilla report.
> Is this also broken in Linus's tree?
>
Well, I think so.

Although it's still under debugging, the root cause of the problem
seems to be that, when mmc_gpiod_request_cd() returnsÂ-EPROBE_DEFER, it
means either the GPIO controller driver is not probed at the moment, OR
the GPIO controller driver is not available at all. The later case
Âcauses the problem like this because sdhci-acpi driver is made to wait
for the GPIO controller, in the patch above.Â

This is not a problem for distro kernel when all the driver are built
as modules. And the problem should be fixed by enabling the GPIO
controller driver in kernel config.

thanks,
rui