Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp6820920rwn; Tue, 13 Sep 2022 09:24:36 -0700 (PDT) X-Google-Smtp-Source: AA6agR4gya1baADYCSbPPcDXlXvUGkA4GVWZiF7aA8mpJzLVQXRHDRj9WjuYYzsYgbW6cGk81bQi X-Received: by 2002:a62:84c6:0:b0:538:3c39:5819 with SMTP id k189-20020a6284c6000000b005383c395819mr33606690pfd.4.1663086275645; Tue, 13 Sep 2022 09:24:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663086275; cv=none; d=google.com; s=arc-20160816; b=P9Tbz7hVLlzX6xKaspZjEuybR30LQHPuzNSkxWqeb/Qb0MDpUKdA9yD6kCgrLMMuTV Q8GwYCuO6EngwnF5GJOLiRwRWUIcyvuhzqBkwNE3EixFOlDmhcEP5/DrEbNdVtyc38mI 1o6l9Vv9Qwm/++Rp71acs7v6Mer2n/pYGPLa7qmOsw3MhSIl91wPFb0ziz01QW2gWO2t ZS52CDGBAVIkrN2sinaqhdVT5GBHNtrQldtMtWs6hzDQ/f26HpRE89pDHdGfUVwzuoU+ tiOpPA0nJdtboFe+F+1G/I7sU/Kci4nsWNn8piV/lqZe8RNJOFHu3uLB49WUKug3c70T JaSA== 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=+uwe1vMojYoBF460TSQmVk3jcL5BMnaJDvnMwzo0Lzc=; b=kPMqgdWvQWJGtePw8aWpjIvZufck/Nzt23rB8ulwsVQqUmI5sP+LFiCjos8vE2Js5e wTVJmPeTJRVBL+7yrzv5nGnhotP+/XMA9jK6901Hd7nSwTzkiDhJfydHLSfAoZ91Aq44 PFdZiEM454c/llXPREpi0NDYF3sur/dZPO1KoOxFKQgzekiaglXHpwECBrUFg6AGnxDY t3fZiJGeWE8/bmM4yaEn4z4PPUqce7XROGAW9goYeQgeIWkUVk/0a5G9j1oO4WYEibdX zLWXv39Vg4JBpLdklKypIkdgq9GxLpYIiEfPYrh/GghFiWxii6F0aDYaKy4RxPNd7DvH 0LAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=RRdA8IJ6; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c19-20020a6566d3000000b0043855015f38si12680157pgw.165.2022.09.13.09.24.22; Tue, 13 Sep 2022 09:24:35 -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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=RRdA8IJ6; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235900AbiIMPYd (ORCPT + 99 others); Tue, 13 Sep 2022 11:24:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235876AbiIMPWw (ORCPT ); Tue, 13 Sep 2022 11:22:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24C897C313; Tue, 13 Sep 2022 07:37:09 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 504F2614DC; Tue, 13 Sep 2022 14:26:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D124C433D6; Tue, 13 Sep 2022 14:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1663079193; bh=Kyy9xZYix6uz9tqHGg9WpSyoGzNzR+34Qwb26q1+AOw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RRdA8IJ6WhKqdlP7wEvvlPygnu8cx9o3YskdZI2c8ARGtTjQFuJOWjYKKtnuJEFc5 NB0BRQqvTXVgnBJoytIPAak8Zj9Efy72fyGNsNQleKb7mOXJt+/vA802QkVGlQ7UZA 1cKtW+C+XPafASE2djUs5YiCx9g924N/JVyG6Ea0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Haibo Chen , Bartosz Golaszewski , Sasha Levin Subject: [PATCH 5.4 040/108] gpio: pca953x: Add mutex_lock for regcache sync in PM Date: Tue, 13 Sep 2022 16:06:11 +0200 Message-Id: <20220913140355.364949902@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220913140353.549108748@linuxfoundation.org> References: <20220913140353.549108748@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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 From: Haibo Chen [ Upstream commit 518e26f11af2fe4f5bebf9a0351595d508c7077f ] The regcache sync will set the cache_bypass = true, at that time, when there is regmap write operation, it will bypass the regmap cache, then the regcache sync will write back the value from cache to register, which is not as our expectation. Though regmap already use its internal lock to avoid such issue, but this driver force disable the regmap internal lock in its regmap config: disable_locking = true To avoid this issue, use the driver's own lock to do the protect in system PM. Fixes: b76574300504 ("gpio: pca953x: Restore registers after suspend/resume cycle") Signed-off-by: Haibo Chen Signed-off-by: Bartosz Golaszewski Signed-off-by: Sasha Levin --- drivers/gpio/gpio-pca953x.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 317f54f19477e..c81d73d5e0159 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -1198,7 +1198,9 @@ static int pca953x_suspend(struct device *dev) { struct pca953x_chip *chip = dev_get_drvdata(dev); + mutex_lock(&chip->i2c_lock); regcache_cache_only(chip->regmap, true); + mutex_unlock(&chip->i2c_lock); if (atomic_read(&chip->wakeup_path)) device_set_wakeup_path(dev); @@ -1221,13 +1223,17 @@ static int pca953x_resume(struct device *dev) } } + mutex_lock(&chip->i2c_lock); regcache_cache_only(chip->regmap, false); regcache_mark_dirty(chip->regmap); ret = pca953x_regcache_sync(dev); - if (ret) + if (ret) { + mutex_unlock(&chip->i2c_lock); return ret; + } ret = regcache_sync(chip->regmap); + mutex_unlock(&chip->i2c_lock); if (ret) { dev_err(dev, "Failed to restore register map: %d\n", ret); return ret; -- 2.35.1