Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp330886pxx; Wed, 28 Oct 2020 06:05:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwfYGXFBsVCMMGajCoM49hgMi75qHvOxKoCBdpzLQd+L9J13N7BWthuM+A5THJYqZ/TLWmw X-Received: by 2002:a50:8245:: with SMTP id 63mr1590810edf.133.1603890327723; Wed, 28 Oct 2020 06:05:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603890327; cv=none; d=google.com; s=arc-20160816; b=vxGwwGcwnnRewJ9hzb3RT5S+iBR4C2cH7za6GkaazSflQfmTbtMC6sLjuIYoH//EGq FV2jEBnxvTTL5ndqknKV3hluKOJt5y8tECaWhMKjRzN3MsTyoIXy/eiehbSeCBrPd2DY EW8+2rjGUjvW/vYarLPuZADYjHDPF1SE6RDy9YAuZiBa3k5dHEbjFZNCUzcSa0PJDJo2 fACjKw5aNw5FvYXHBjSJLKEqtcSs9VhANjxNdGcabvhIaOFMxa1KqLeEtHhL2lobRSGS eI7ixhDHG7rTCzhG1C3V7TKXDgJY+Qt6AgQUYa0XpigAs+An9LPX5BzZEe03T8IiW3tz pUNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hkGKv79/B+h8oGqiKEtZJGYwA7tM9e57KoFFGJopPiQ=; b=zSNRTl1eawGK7atuEF6JOJlZd3BRMad0ty7rDo8OfAfSz1RJZsvwCKGX/yP/No4HXd BR3gjoAHbXk8PfcZeq3948gm3ZbbKhle+bMZyP/AA9VcOjFYRzEwYJPzMWHUHEKqasI9 myvS4LBgt73XeQPRJdWA/gn3CYMuxD8VgEqi/LkcnHrzwf7j/GjfDKMF1Dh5NlMP87pJ 5Z37ucWvCsdCGa/ugpF2LIYdXYjHY34VpDU+2w+S0b9Ugig2hsJzhmL4RcBVP5o5MrwL rsfCYxnCMFJU9PD0oQoV2zvIv8D7nJBZQR6ET8TLsFUFERgV8QcdruMyLV+myudjFxqy u68g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1TlzSjqi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y9si2654785ede.591.2020.10.28.06.04.59; Wed, 28 Oct 2020 06:05:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1TlzSjqi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1799911AbgJ0PeB (ORCPT + 99 others); Tue, 27 Oct 2020 11:34:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:42866 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S368748AbgJ0P1T (ORCPT ); Tue, 27 Oct 2020 11:27:19 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 60A6020657; Tue, 27 Oct 2020 15:27:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1603812438; bh=o426H1i3aVi6hnEFyHxSPISptOGmk3ZczSr4QHZcDSo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1TlzSjqiNIQOXxCwihoP844kgrcqBpDgp6GQ/CvjbAGdglIjw1Xu9yLJX+x9CrXg3 l4ZuXs4KXnm0cYeEJ+8naNtZkxJ1WBIEVdIXVnvEsNuQ11RAvv9k8eIwFUTQ4KNiO7 /Vcr2lkujVgW7Tw/v3Zw8i8xyrrPrdOtVs1gLtM0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Serge Semin , Guenter Roeck , Sasha Levin Subject: [PATCH 5.9 179/757] hwmon: (bt1-pvt) Wait for the completion with timeout Date: Tue, 27 Oct 2020 14:47:09 +0100 Message-Id: <20201027135458.992300435@linuxfoundation.org> X-Mailer: git-send-email 2.29.1 In-Reply-To: <20201027135450.497324313@linuxfoundation.org> References: <20201027135450.497324313@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Serge Semin [ Upstream commit 0ffd21d5985506d164ada9e8fff6daae8ef469a1 ] If the PVT sensor is suddenly powered down while a caller is waiting for the conversion completion, the request won't be finished and the task will hang up on this procedure until the power is back up again. Let's call the wait_for_completion_timeout() method instead to prevent that. The cached timeout is exactly what we need to predict for how long conversion could normally last. Fixes: 87976ce2825d ("hwmon: Add Baikal-T1 PVT sensor driver") Signed-off-by: Serge Semin Link: https://lore.kernel.org/r/20200920110924.19741-4-Sergey.Semin@baikalelectronics.ru Signed-off-by: Guenter Roeck Signed-off-by: Sasha Levin --- drivers/hwmon/bt1-pvt.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/bt1-pvt.c b/drivers/hwmon/bt1-pvt.c index 2600426a3b21c..3e1d56585b91a 100644 --- a/drivers/hwmon/bt1-pvt.c +++ b/drivers/hwmon/bt1-pvt.c @@ -477,6 +477,7 @@ static int pvt_read_data(struct pvt_hwmon *pvt, enum pvt_sensor_type type, long *val) { struct pvt_cache *cache = &pvt->cache[type]; + unsigned long timeout; u32 data; int ret; @@ -500,7 +501,14 @@ static int pvt_read_data(struct pvt_hwmon *pvt, enum pvt_sensor_type type, pvt_update(pvt->regs + PVT_INTR_MASK, PVT_INTR_DVALID, 0); pvt_update(pvt->regs + PVT_CTRL, PVT_CTRL_EN, PVT_CTRL_EN); - wait_for_completion(&cache->conversion); + /* + * Wait with timeout since in case if the sensor is suddenly powered + * down the request won't be completed and the caller will hang up on + * this procedure until the power is back up again. Multiply the + * timeout by the factor of two to prevent a false timeout. + */ + timeout = 2 * usecs_to_jiffies(ktime_to_us(pvt->timeout)); + ret = wait_for_completion_timeout(&cache->conversion, timeout); pvt_update(pvt->regs + PVT_CTRL, PVT_CTRL_EN, 0); pvt_update(pvt->regs + PVT_INTR_MASK, PVT_INTR_DVALID, @@ -510,6 +518,9 @@ static int pvt_read_data(struct pvt_hwmon *pvt, enum pvt_sensor_type type, mutex_unlock(&pvt->iface_mtx); + if (!ret) + return -ETIMEDOUT; + if (type == PVT_TEMP) *val = pvt_calc_poly(&poly_N_to_temp, data); else -- 2.25.1