Re: [PATCH] mmc: sunxi: mask all Response Timeout error messages

From: Maxime Ripard
Date: Mon Mar 06 2017 - 11:28:53 EST


On Mon, Mar 06, 2017 at 06:32:41PM +0800, Icenowy Zheng wrote:
> 06.03.2017, 18:04, "Maxime Ripard" <maxime.ripard@xxxxxxxxxxxxxxxxxx>:
> > Hi,
> >
> > On Mon, Mar 06, 2017 at 12:45:35AM +0800, Icenowy Zheng wrote:
> >>  Response Timeout is very usual: it will happen when trying to run some
> >>  commands that do not belong to the card; it will happen when some SDIO
> >>  card transfer beyond its SDIO bandwidth; and when the MMC controller is
> >>  set to poll the card with "broken-cd" property (the Lichee Pi series of
> >>  boards do this), it will flood to the console and make the console
> >>  unusable.
> >>
> >>  Mask all response-timeout-only error messages, only show it when another
> >>  error happens.
> >>
> >>  Signed-off-by: Icenowy Zheng <icenowy@xxxxxxxx>
> >>  ---
> >>   drivers/mmc/host/sunxi-mmc.c | 13 +++++++++----
> >>   1 file changed, 9 insertions(+), 4 deletions(-)
> >>
> >>  diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
> >>  index 6ffcd2838272..7828e1f57cf0 100644
> >>  --- a/drivers/mmc/host/sunxi-mmc.c
> >>  +++ b/drivers/mmc/host/sunxi-mmc.c
> >>  @@ -483,10 +483,15 @@ static void sunxi_mmc_dump_errinfo(struct sunxi_mmc_host *host)
> >>           struct mmc_command *cmd = host->mrq->cmd;
> >>           struct mmc_data *data = host->mrq->data;
> >>
> >>  - /* For some cmds timeout is normal with sd/mmc cards */
> >>  - if ((host->int_sum & SDXC_INTERRUPT_ERROR_BIT) ==
> >>  - SDXC_RESP_TIMEOUT && (cmd->opcode == SD_IO_SEND_OP_COND ||
> >>  - cmd->opcode == SD_IO_RW_DIRECT))
> >>  + /*
> >>  + * Reading timeout is usually normal, especially when doing
> >>  + * card-polling with "broken-cd" in device tree.
> >>  + * If do not mask it, the RTO error message will flood the console
> >>  + * and even hide useful error messages.
> >>  + *
> >>  + * Some SDIO commands will also normally timeout with non-SDIO cards.
> >>  + */
> >>  + if ((host->int_sum & SDXC_INTERRUPT_ERROR_BIT) == SDXC_RESP_TIMEOUT)
> >
> > We really shouldn't silence legit errors.
> >
> > The actual problem here is that we log them as error, we could
> > probably reduce it to debug.
>
> Even if it's reduced to debug, it will still flush dmesg buffers.

No, it will not even be compiled by default.

> Or make it only visible when "debug" parameter is present in kernel
> cmdline?

debug messages are visible in dmesg only if DEBUG is defined, which is
only happening if CONFIG_MMC_DEBUG is set. This won't affect the
general case in any way.

And it is output only if loglevel is set higher than 7.

Maxime

--
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

Attachment: signature.asc
Description: PGP signature