Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp485473rwr; Thu, 27 Apr 2023 04:24:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7tNy4+hvjQaJdTo4bRZu9vKdC6041LQGbNXkIGPCAy7x1iFKhysMy0fnjiPJYdq9u7A7AQ X-Received: by 2002:a17:90a:1983:b0:23d:1bef:8594 with SMTP id 3-20020a17090a198300b0023d1bef8594mr1429983pji.1.1682594670617; Thu, 27 Apr 2023 04:24:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682594670; cv=none; d=google.com; s=arc-20160816; b=sp7gKdVVhcSSZT4i0fLM91J6Fut7ArfxNteoOTB/LcdAeUIuiG51w1VpKhLQXE1Q/l sFWszsJTogrbJOH24tX5qF0F5H82y4odu46bi/6nUEIX63a+EKHbOQ2yJ/a7X+Kq1k+m b9+2zWJ8PLgZLuTbJkgxJ6nM4OLU4NHFJWdGnwCT8pmJr2HzVfcsUc6hF5XTSKnm8GPx 97CoEypr4h5PeN+JvTqRrDF+8YjT02wg/Nw/9cGt9CF/IWYa8xuBHhP7aADWuyY41vfJ qPn7jL6JmHcpoXM8guYIPwDOfRjXoOUJhtI5Mj3x+ZB+VFnUJII9ANlYjgmHkV/UmOll q2fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:ui-outboundreport:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from; bh=+KnIi7fYUN1HquNpzuvJ5WEehhtWJ0PjlP2bz8hg70Y=; b=V6ishKGwSZa6mzkVPApDzIN/ZJCkiN8S8CUmjzfJYlz4uaJakpjQPg6V5zkDwK86uo w5BkfxJ4dQIDI4zzdy4JHBp+684wFl9HGBxO5IrOKJgM4um/ROXIiblDGHm9VUOR4gP2 buq6fuRrtSDm0281p0Ecv8afLKywvNaI6vbzHRtBoYW5n66KDwEszI2P0dOKkTU7ufQ4 8mmNvX+RDwThjTWsBBaTj/ZVrDndiiBf/KqVd07xXAX44lhCHmBe3osa3HXT5bUzeR5K pF/CLfDBBianAPrvm96JiqB8hmYd0WvTW28eSAUZluW2EBZQqV1qt2jduviBs0JdN/9W O6Dg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m189-20020a6326c6000000b00528818a4e14si4503735pgm.235.2023.04.27.04.24.16; Thu, 27 Apr 2023 04:24:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243290AbjD0LWY (ORCPT + 99 others); Thu, 27 Apr 2023 07:22:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242993AbjD0LWW (ORCPT ); Thu, 27 Apr 2023 07:22:22 -0400 X-Greylist: delayed 78173 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Thu, 27 Apr 2023 04:22:21 PDT Received: from mout.kundenserver.de (mout.kundenserver.de [217.72.192.74]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0500F4EE7 for ; Thu, 27 Apr 2023 04:22:20 -0700 (PDT) Received: from stefanw-SCHENKER ([37.4.248.58]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MIxmm-1pXZ8b08oE-00KRYq; Thu, 27 Apr 2023 13:22:11 +0200 From: Stefan Wahren To: Greg Kroah-Hartman , Krzysztof Kozlowski , Akira Shimahara , Ivan Zaentsev Cc: Stefan Wahren , Michael Heimpold , regressions@lists.linux.dev, linux-kernel@vger.kernel.org, Stefan Wahren Subject: [PATCH RFC] w1: w1_therm: fix locking behavior in convert_t Date: Thu, 27 Apr 2023 13:21:52 +0200 Message-Id: <20230427112152.12313-1-stefan.wahren@i2se.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K1:mXFTlYMEyuqMNvMKHHrdHh1Is3vTgLjW5BzKHiZ6Pep4b+X3AjJ 2edpqL1cXdA7MsjPPtYlUADuhzVrFsJIQjFnV+oZ697nN84lIO++nrKpmjpNJlWTlzDVkoK rDqvSLq5vmTdH21q0nQqanFHTNGiXhBvCce7F9FZPEutOG00PXqw3OV88WeTUebqYplNhPt YvKz1js7aryNscSsoS0mQ== UI-OutboundReport: notjunk:1;M01:P0:K1YwzZGSK34=;eXhRhPHJh04h1bzdxS3ffGL7HAp /ADBL6HW5GDQkCcjdcqgJvQYCs10zTCmegatxh/e7lvAGnPdBFHusYZQHMw1IxNrv5lZA26Jr koBfeWpL9Y2SKGvQ+FaYopJQnvlZhfJS1JmyAmp/t277gHpDQMel8EtReYWleBCswe8rDdnL5 VLhIgjXFw1hhm/iWeQaF4AZoIBCaCTPBxpvXnJUMwO7PeCc3XL1uC8dv2nYa1BZs/dG6qqjds w828K6PBoRr3JUEUwbV+f1Cr7evP9o+DD/8nDkBsAz3uYzfv4/UlltrjYSnNH65wwBw4jJh+3 a2xGJyQIlQ2ULEr1HIt64RlEIlRrRJ6DkoOSSdIMDe9uF2/INsgX3VxkqmiPZ+FiklSO5nICc IX+Ik0gZYDjWXgllStiN7Q4jIBfqbDR6gOMipbGnADUY+d2QVASvKXVkNujkYMleZCYpJNUNt 7ovQd2iPIuMAph2KIyD2qGioriZyGCumy0exAZmHwHleeaTxWO+wCdt0y74Zi2t50kYAuz/If 62UElpP9sjKL0bDE0SgbpOZAIJ6sa8IDlxZl2ysi1Hf93rNbx0JaPyjts2uNUGMETLQEF4NhC aokNkg3u2tiToTlRWzvWodF9AnJv1iZ+mlo70bQJTzdIYs11HYqLP0KsJMLAQqZeQftkkiaBa MKDaYepOmvaejFLX8fc7/wbyLVNc2gy3j4t/o8yWjw== X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The commit 67b392f7b8ed ("w1_therm: optimizing temperature read timings") accidentially inverted the logic for lock handling of the bus mutex. Before: pullup -> release lock before sleep no pullup -> release lock after sleep After: pullup -> release lock after sleep no pullup -> release lock before sleep This cause spurious measurements of 85 degree (powerup value) on the Tarragon board with connected 1-w temperature sensor (w1_therm.w1_strong_pull=0). In the meantime a new feature for polling the conversion completion has been integrated in these branches with commit 021da53e65fd ("w1: w1_therm: Add sysfs entries to control conversion time and driver features"). But this feature isn't available for parasite power mode, so handle this separately. Link: https://lore.kernel.org/regressions/2023042645-attentive-amends-7b0b@gregkh/T/ Fixes: 67b392f7b8ed ("w1_therm: optimizing temperature read timings") Signed-off-by: Stefan Wahren --- drivers/w1/slaves/w1_therm.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c index 067692626cf0..99c58bd9d2df 100644 --- a/drivers/w1/slaves/w1_therm.c +++ b/drivers/w1/slaves/w1_therm.c @@ -1159,29 +1159,26 @@ static int convert_t(struct w1_slave *sl, struct therm_info *info) w1_write_8(dev_master, W1_CONVERT_TEMP); - if (strong_pullup) { /*some device need pullup */ + if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { + ret = w1_poll_completion(dev_master, W1_POLL_CONVERT_TEMP); + if (ret) { + dev_dbg(&sl->dev, "%s: Timeout\n", __func__); + goto mt_unlock; + } + mutex_unlock(&dev_master->bus_mutex); + } else if (!strong_pullup) { /*no device need pullup */ sleep_rem = msleep_interruptible(t_conv); if (sleep_rem != 0) { ret = -EINTR; goto mt_unlock; } mutex_unlock(&dev_master->bus_mutex); - } else { /*no device need pullup */ - if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { - ret = w1_poll_completion(dev_master, W1_POLL_CONVERT_TEMP); - if (ret) { - dev_dbg(&sl->dev, "%s: Timeout\n", __func__); - goto mt_unlock; - } - mutex_unlock(&dev_master->bus_mutex); - } else { - /* Fixed delay */ - mutex_unlock(&dev_master->bus_mutex); - sleep_rem = msleep_interruptible(t_conv); - if (sleep_rem != 0) { - ret = -EINTR; - goto dec_refcnt; - } + } else { /*some device need pullup */ + mutex_unlock(&dev_master->bus_mutex); + sleep_rem = msleep_interruptible(t_conv); + if (sleep_rem != 0) { + ret = -EINTR; + goto dec_refcnt; } } ret = read_scratchpad(sl, info); -- 2.34.1