From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBE7335F192 for ; Mon, 13 Jul 2026 05:03:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783919038; cv=none; b=CP/jYR7dCuZDK+DRzWn2VU0KsenWTDm72S+bT+Te/qzDkudiP7aUGFGvBfH86GeVETKt7o9q1PbcQNaV9I4K0Pz3tQEt4ArT3CqmUXeRM66Op2mA5cWo6MIEjkD6Q5g2k5dIlEK+lcJ4PumDauIAYiAqEKHVP3vcFFKliAZqjMA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783919038; c=relaxed/simple; bh=rmcs9P9fKkhuQ1Whjqom8hv+KPJ88SeslsM+ceFKlqw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gfykAX2Ns8W40m6Xu5HNSsTkSp/cYxNEVxi7LE105DUWoryoGKqJ4odEqQv9Egt2Erwhoit9lLzucJNg9x5kBK0yzzpNHI1P3eUS4Fyk9ZrczRrUK9cbAhlM304CC9aYx2XzorGF2m7zsU9ZrK5AeUZwfN1XHXr+JRFVPRN9w08= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=D41tAJSA; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D41tAJSA" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2cc7ef7ec27so29673755ad.1 for ; Sun, 12 Jul 2026 22:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783919036; x=1784523836; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vnDoptGQ8NnxjTZz5BygVfis6KpDnUGxJW3/PWmoOvY=; b=D41tAJSAxlgBBrhhHcx7o0AxT/6t+e6RxB1woWy9LNutGhV4K9nQ5MIeyhgl9xguMx +WgQkjLZWHEGK7Y5B1AdMJm0xqVu7sml80sH66/UfguesLs0tMZIyGigxulajp6j3VEI IsDShxlELD9t6an/HZRM5/hjzT+dRp7P7hCSLX0X7hMzPfpfi/Wrah+4hNREZd6YNOAJ hs42UYvl6134bViCUBn/wd56C5o9D9ZgMlDrh/OgxrclLGohOuEJHmSLN3cfUxRhFyFQ eotTFhSwNwhdy5JprCiEDTaXLZ83hJa/D/PMMcUGY0mSUhOjhDC/YvrLzLzJNWVKY/UI QHQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783919036; x=1784523836; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=vnDoptGQ8NnxjTZz5BygVfis6KpDnUGxJW3/PWmoOvY=; b=CPGdx0BSO8X/HoNfLNClZOmI70P3IhqMGOa3UnWnXP3IBHb+PVCa+bKAWOhJNZJht3 joZ9LPfEtESHcytwSn3UXP/rVjkM8PDWL1AB5CtH3YemD1HhlDFGTFJuKOdIgaUQKVaT 0mw/Rn54uwjyY6qdBCmcK1q6e4lf7coHx/hlPRQ7KYzIJYzBirOVfgV7/Ad7dk9uem7R eufPZXhxH/YdjcIMefCIAdLDw2c9lssYB+gH1+yWetMjzmQr0zGtIA52l0Ye4IYOdu52 SlBbzOBRD7xb0x5g9Wb+ke5PrCdpXVUAmV+vgkkB9EVYJP9Wr0z2KQfuABy5anmwQpzC SgtQ== X-Forwarded-Encrypted: i=1; AHgh+RqAYD3w1yZNTHdT4hbzpF9RIZaJ7MT8yVTe1/B0uDqczfTbHbW+GyVDKAgpKyn+cJPCs/zZqGDrC+kVa2w=@vger.kernel.org X-Gm-Message-State: AOJu0Ywb8DsV9XmrVcNaIBOrV+j31cVB0rpzDGE077hd+TjZ0oeoud0c ZRtVajXvDxq0EuahaQbfZ8wwm3Bgmb8Gue17hOCEp7qNKZW4BqFD7krU X-Gm-Gg: AfdE7ckwJc4cO2S+wmp5n619pqeB1u6PBscxiecAwXDZepra2ccFtawimOQIzBD58nK 9nmnGJkxMa6AuFPYlBOxmwZ9TegU/tWH0DPzE26IID72gEaBipU2u5SKNnx47lX099umELKP5EW 19lV9Gvc9dsCHZARdETxLrrQgInq4Qpa0mJZjv5bltmZfirIbuDKWA8C3/lDMs8rjSl9wSFFZaX I391VWDBZb4HqLVkY838Gt1kYW9NWEszs2VN84F7ll6kCJmi1BR9KUo0Cq95Ahbt2BofJMXfw+q 1RqX060MWWotRv10igcObvrJuJ/n9Av709vpy1+A46IYMHSKQCq+1pYZJ1WyJIB+6kP4WsgxkhL ScNU2npig3nj+cEukRb0FPqXgC3rGOwAjOQrjyQser4bN9+QfMcf6F+BwQed35OvP9Jp2X8l+40 1ATraIMBuxz1Y+CYjS3EXUDFYXt08DiZIOu33dhkXEJf6YQ2M= X-Received: by 2002:a17:90b:498f:b0:37f:9ce1:cdb2 with SMTP id 98e67ed59e1d1-38dc778b138mr7508268a91.32.1783919035926; Sun, 12 Jul 2026 22:03:55 -0700 (PDT) Received: from phuc-desktop.. ([183.91.15.56]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-313c50c70c9sm21927368eec.29.2026.07.12.22.03.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2026 22:03:55 -0700 (PDT) From: phucduc.bui@gmail.com To: Mark Brown , Greg Kroah-Hartman , rafael@kernel.org Cc: Danilo Krummrich , linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, bui duc phuc Subject: [PATCH 1/2] regcache: Preserve cache synchronization errors in regcache_sync() Date: Mon, 13 Jul 2026 12:03:11 +0700 Message-ID: <20260713050312.38729-2-phucduc.bui@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260713050312.38729-1-phucduc.bui@gmail.com> References: <20260713050312.38729-1-phucduc.bui@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: bui duc phuc regcache_sync() currently stores the return value from both cache synchronization and selector register rewriting in the same variable. As a result, a successful selector register rewrite can overwrite an earlier cache synchronization error, causing regcache_sync() to return success even though synchronization failed. Track the two operations with separate return variables and preserve the cache synchronization error. Errors from rewriting selector registers are returned only if cache synchronization completed successfully. Signed-off-by: bui duc phuc --- drivers/base/regmap/regcache.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c index aa8f2efed779..040fd60c0d59 100644 --- a/drivers/base/regmap/regcache.c +++ b/drivers/base/regmap/regcache.c @@ -401,7 +401,8 @@ static int rbtree_all(const void *key, const struct rb_node *node) */ int regcache_sync(struct regmap *map) { - int ret = 0; + int sync_ret = 0; + int selector_ret = 0; unsigned int i; const char *name; bool bypass; @@ -426,21 +427,21 @@ int regcache_sync(struct regmap *map) /* Apply any patch first */ map->cache_bypass = true; for (i = 0; i < map->patch_regs; i++) { - ret = _regmap_write(map, map->patch[i].reg, map->patch[i].def); - if (ret != 0) { + sync_ret = _regmap_write(map, map->patch[i].reg, map->patch[i].def); + if (sync_ret != 0) { dev_err(map->dev, "Failed to write %x = %x: %d\n", - map->patch[i].reg, map->patch[i].def, ret); + map->patch[i].reg, map->patch[i].def, sync_ret); goto out; } } map->cache_bypass = false; if (map->cache_ops->sync) - ret = map->cache_ops->sync(map, 0, map->max_register); + sync_ret = map->cache_ops->sync(map, 0, map->max_register); else - ret = regcache_default_sync(map, 0, map->max_register); + sync_ret = regcache_default_sync(map, 0, map->max_register); - if (ret == 0) + if (sync_ret == 0) map->cache_dirty = false; out: @@ -462,10 +463,10 @@ int regcache_sync(struct regmap *map) if (regcache_read(map, this->selector_reg, &i) != 0) continue; - ret = _regmap_write(map, this->selector_reg, i); - if (ret != 0) { + selector_ret = _regmap_write(map, this->selector_reg, i); + if (selector_ret != 0) { dev_err(map->dev, "Failed to write %x = %x: %d\n", - this->selector_reg, i, ret); + this->selector_reg, i, selector_ret); break; } } @@ -476,7 +477,7 @@ int regcache_sync(struct regmap *map) trace_regcache_sync(map, name, "stop"); - return ret; + return sync_ret ? sync_ret : selector_ret; } EXPORT_SYMBOL_GPL(regcache_sync); -- 2.43.0