From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88EB2C18E5B for ; Tue, 17 Mar 2020 04:23:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6C2A820719 for ; Tue, 17 Mar 2020 04:23:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726638AbgCQEXD convert rfc822-to-8bit (ORCPT ); Tue, 17 Mar 2020 00:23:03 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:33507 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725536AbgCQEXD (ORCPT ); Tue, 17 Mar 2020 00:23:03 -0400 Received: from mail-wm1-f71.google.com ([209.85.128.71]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jE3kq-0006l6-4D for linux-kernel@vger.kernel.org; Tue, 17 Mar 2020 04:23:00 +0000 Received: by mail-wm1-f71.google.com with SMTP id n25so5294995wmi.5 for ; Mon, 16 Mar 2020 21:23:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=LR2lWYgIayYbanKxoGsZXWtRIFq/icnuafwUCJSqlBY=; b=DJ4qIYE7ZefJ9sIynxliiVlfjsre0c8M1tF2U8cP/XTzztej4Rcjfp9prKtUrIaiet OBdmCGRui4dXgELj0lautcdANuG0edh1flgxS9tOKFkTcikum0/ygYeC8W+nD/wse9+e 2KTmzK2vyLRUpYyy2mWcDMH1WdpQgvTCGxXpFeVW0b5LZGitqQbJlBzGsDdeNMtKZycG JrvAHzHvNzRj/VoNqcz+VUVpXSjIs/+Z9rkOxAdQ5fqWqajR0n2EpEh7AlDAUEmvvEmh k/ZI7hkzLlWgcbwPs+Rz8F8yKVX4xh6TTs5xg3Ov4KnNmrBzRLotaULOTfQK4AjWHRcw 0M0g== X-Gm-Message-State: ANhLgQ1guZgxsRy+mMOX4rrkQyHrMyqxyi3g8GhXnFEio2b87MxZKHD9 Ga3PQdghUuk756r2Nc2FlyWIZJj/yoU6RPc4RtSKXD1ztPFbicZkoukw4W36/Myin5/U6MLIyvM O+rcOw7wkzCGZd38LhwbwSplyn4Oj/GlKoHNjPkXBNqR4WeATtyWRHeKQPg== X-Received: by 2002:a5d:480a:: with SMTP id l10mr3446126wrq.178.1584418979798; Mon, 16 Mar 2020 21:22:59 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtS9xGu/clE7LssO/c1MTX7szfSJuHMsj9Z3gBuclu0wafunqLHCm+rn+msLWfL6mk91VyTZm7sdG3II1XWvOY= X-Received: by 2002:a5d:480a:: with SMTP id l10mr3446094wrq.178.1584418979572; Mon, 16 Mar 2020 21:22:59 -0700 (PDT) MIME-Version: 1.0 References: <501e8224-e334-0aa8-41c0-8f67552e7069@gmail.com> <20200310033640.14440-1-vicamo@gmail.com> In-Reply-To: <20200310033640.14440-1-vicamo@gmail.com> From: AceLan Kao Date: Tue, 17 Mar 2020 12:22:48 +0800 Message-ID: Subject: Re: [PATCH v2] Input: i8042 - fix the selftest retry logic To: You-Sheng Yang Cc: Allison Randal , Dmitry Torokhov , Enrico Weigelt , linux-input@vger.kernel.org, "Linux-Kernel@Vger. Kernel. Org" , "Rafael J. Wysocki" , Stephen Boyd , Thomas Gleixner , You-Sheng Yang Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This v2 fix my issue, too. Please consider to merge this patch. Thanks. You-Sheng Yang 於 2020年3月10日 週二 上午11:37寫道: > > From: You-Sheng Yang > > It returns -NODEV at the first selftest timeout, so the retry logic > doesn't work. Move the return outside of the while loop to make it real > retry 5 times before returns -ENODEV. > > BTW, the origin loop will retry 6 times, also fix this. > > Signed-off-by: You-Sheng Yang > --- > drivers/input/serio/i8042.c | 23 +++++++++++++---------- > 1 file changed, 13 insertions(+), 10 deletions(-) > > diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c > index 20ff2bed3917..e8f2004071d4 100644 > --- a/drivers/input/serio/i8042.c > +++ b/drivers/input/serio/i8042.c > @@ -937,25 +937,28 @@ static int i8042_controller_selftest(void) > { > unsigned char param; > int i = 0; > + int ret; > > /* > * We try this 5 times; on some really fragile systems this does not > * take the first time... > */ > - do { > - > - if (i8042_command(¶m, I8042_CMD_CTL_TEST)) { > - pr_err("i8042 controller selftest timeout\n"); > - return -ENODEV; > - } > + while (i++ < 5) { > > - if (param == I8042_RET_CTL_TEST) > + ret = i8042_command(¶m, I8042_CMD_CTL_TEST); > + if (ret) > + pr_err("i8042 controller selftest timeout (%d/5)\n", i); > + else if (param == I8042_RET_CTL_TEST) > return 0; > + else > + dbg("i8042 controller selftest: %#x != %#x\n", > + param, I8042_RET_CTL_TEST); > > - dbg("i8042 controller selftest: %#x != %#x\n", > - param, I8042_RET_CTL_TEST); > msleep(50); > - } while (i++ < 5); > + } > + > + if (ret) > + return -ENODEV; > > #ifdef CONFIG_X86 > /* > -- > 2.25.0 >