Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2470623lqp; Sun, 24 Mar 2024 22:08:18 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXRkXrWuK0teMOqRgMtaoModvVSgfGEESy7HYv/mtX4ddTTKsT4sB6VStPHHVkS9GZLJLYcDHEZxdJG9tRuGNH+NiHgcOwyP3lZW1Ttcw== X-Google-Smtp-Source: AGHT+IEtaraK3Px6m1J3J4OslJ1C287JaaoNt46S2poMS3IMO5Bj8cDcQYIsWnCieuFa97Ihgib+ X-Received: by 2002:ac2:5b1d:0:b0:515:ad59:d46a with SMTP id v29-20020ac25b1d000000b00515ad59d46amr570714lfn.21.1711343297998; Sun, 24 Mar 2024 22:08:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711343297; cv=pass; d=google.com; s=arc-20160816; b=vEzANopwAAjjfbhTVgglwvRXwFZ7C+HGTEzB04XBsLIIF6M2YAXf9AulFv7G2IMzhz NgqCcHTImqJjrxYbeWYwbtc8WqIeASRjCNrPFmK0clJ7yKikPaqDqA94ZMZYjnX1VGm5 HtS0Xetz6sx0xm3pzGFHs6GIaC4htOUVsOqF7v4becwtZ3wK+Gvd5Sfk6EerUZjAZJMJ wFpRKlziyxDvRT22jnFpYQmMqgqRh9COt0FqfLAwsUtMyXSDfAkJukJDcBVKzX0zVvCF 2sQ7WVWOki0bNHmJz6FlH4wSbryX1Q/vkKJhzHtdGR3KcKqIPZfbFPcUKGPRxxeZlZi3 u+RQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=tnn4Yyd1s+CZ9bc162byRBbwwUhAqYQSoP9J3+ph3VI=; fh=sKqhzAsurEsgEZSPU5Q24pb9KEZHbZaFAD8kgtYtuRc=; b=Y78jTq4Maq+idD3NLrP9pJPcx9AlZdmhb6Y1aaIQeWXwNngsNFnbNW/45bPwDeQncG mroIaKjr6paUjzwu0EP57jzmsvkWO5Zym2fOre2Oiy8Aq1eVXH3dBUr/FDmFlnc7uP/M lY4YvYGeVZaBPcJGWJ60k7fw/oi105G7jn5El89N2lMGGMLEttknsAQTKNMXEWiwfnSH tW1/zf6UvPKxO5X6owM6X+t1G/Uj00YNSjKEXvbMgHzv7HaBDabyH1sfEqFHnjrAd6gA TwjDynDPtOlQIRFuxs62SgQ3RxP74sAYvUjUXal8RqZ/1FqeonxSCNHV9wlWfGgvIyel rvbA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H3llHeKA; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-113621-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-113621-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id m10-20020a17090679ca00b00a44444998ebsi2251476ejo.215.2024.03.24.22.08.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Mar 2024 22:08:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-113621-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H3llHeKA; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-113621-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-113621-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 895401F2F0C7 for ; Mon, 25 Mar 2024 05:08:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 648D61422CF; Sun, 24 Mar 2024 22:49:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="H3llHeKA" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5ABD76405; Sun, 24 Mar 2024 22:47:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711320455; cv=none; b=gTUuXvp6FDgQXOTh/XxELnNP88Ce1oHTKfSNGXTsD/egpGyxmjRbBTwWDwpkqy7Y340wQ6V1LPqzDSPCZMCSJH7mEM45i420gTW6Ze7X8oHgF+APSt+F4K2dghoeQzhIMDIkctIF5lkc+EtBnhBTo0EEQz4ih2TmsbEMt+9SXPg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711320455; c=relaxed/simple; bh=NWmTVAKYq8v6gN3EBr0vzjfVCXygas9fWX9Hme0A/jU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Os4OHmIAMOs+5tCUwzRBw5y6kNR7xu6e1TajX9KZxFNXkToSZf+476WF6zgwq0Srs110d3dZYRSP0MIWhY6KTUeev9g2UPQQQtNbOkV5qbkYgwZHMTD5sQYOtHu1fcwvcDmJdj/CBUy0e9wYlyPHLoCirXgvoHjwFaJbc2KtQEA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=H3llHeKA; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0A332C433C7; Sun, 24 Mar 2024 22:47:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711320455; bh=NWmTVAKYq8v6gN3EBr0vzjfVCXygas9fWX9Hme0A/jU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H3llHeKAIQgk3pJ/hrngQYbbl2qJ5Wap//3TRQG05bN0v5Y80mDoLDHfPz1xOBIyd nR3lYburjD2nYOtt/a8zVzfzOrtM4sqDfQhuMVvr0baMZ4BJq/aHQVw2IWhuX4j2Oi /qKMh2fwOTKxn0OmbgeZVUh6jaJnzHcWCHNINvbeDJQHGU+GA9ou4mqHIjQdaufdU4 kz6UJ0dijB2fof61Gmz0kLyguDu0P429TrYq+JqwyJ1FacEsbYnOTsdoLxMudxBtlU HDp5O+pdfU21h5gEjf9ISg7NwUyW0hXXwtFB5Nr+fryFKkR6PH+gxvJlt7krgKDApq xBvx0myb0gxXg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Mark Brown , Guenter Roeck , Sasha Levin Subject: [PATCH 6.7 014/713] regmap: kunit: Ensure that changed bytes are actually different Date: Sun, 24 Mar 2024 18:35:40 -0400 Message-ID: <20240324224720.1345309-15-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324224720.1345309-1-sashal@kernel.org> References: <20240324224720.1345309-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Mark Brown [ Upstream commit 2f0dbb24f78a333433a2b875c0b76bf55c119cd4 ] During the cache sync test we verify that values we expect to have been written only to the cache do not appear in the hardware. This works most of the time but since we randomly generate both the original and new values there is a low probability that these values may actually be the same. Wrap get_random_bytes() to ensure that the values are different, there are other tests which should have similar verification that we actually changed something. While we're at it refactor the test to use three changed values rather than attempting to use one of them twice, that just complicates checking that our new values are actually new. We use random generation to try to avoid data dependencies in the tests. Reported-by: Guenter Roeck Reviewed-by: Guenter Roeck Tested-by: Guenter Roeck Signed-off-by: Mark Brown Link: https://msgid.link/r/20240211-regmap-kunit-random-change-v3-1-e387a9ea4468@kernel.org Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- drivers/base/regmap/regmap-kunit.c | 54 +++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/drivers/base/regmap/regmap-kunit.c b/drivers/base/regmap/regmap-kunit.c index e14cc03a17f6c..4c9e38ead5c56 100644 --- a/drivers/base/regmap/regmap-kunit.c +++ b/drivers/base/regmap/regmap-kunit.c @@ -9,6 +9,23 @@ #define BLOCK_TEST_SIZE 12 +static void get_changed_bytes(void *orig, void *new, size_t size) +{ + char *o = orig; + char *n = new; + int i; + + get_random_bytes(new, size); + + /* + * This could be nicer and more efficient but we shouldn't + * super care. + */ + for (i = 0; i < size; i++) + while (n[i] == o[i]) + get_random_bytes(&n[i], 1); +} + static const struct regmap_config test_regmap_config = { .max_register = BLOCK_TEST_SIZE, .reg_stride = 1, @@ -1192,7 +1209,7 @@ static void raw_sync(struct kunit *test) struct regmap *map; struct regmap_config config; struct regmap_ram_data *data; - u16 val[2]; + u16 val[3]; u16 *hw_buf; unsigned int rval; int i; @@ -1206,17 +1223,13 @@ static void raw_sync(struct kunit *test) hw_buf = (u16 *)data->vals; - get_random_bytes(&val, sizeof(val)); + get_changed_bytes(&hw_buf[2], &val[0], sizeof(val)); /* Do a regular write and a raw write in cache only mode */ regcache_cache_only(map, true); - KUNIT_EXPECT_EQ(test, 0, regmap_raw_write(map, 2, val, sizeof(val))); - if (config.val_format_endian == REGMAP_ENDIAN_BIG) - KUNIT_EXPECT_EQ(test, 0, regmap_write(map, 6, - be16_to_cpu(val[0]))); - else - KUNIT_EXPECT_EQ(test, 0, regmap_write(map, 6, - le16_to_cpu(val[0]))); + KUNIT_EXPECT_EQ(test, 0, regmap_raw_write(map, 2, val, + sizeof(u16) * 2)); + KUNIT_EXPECT_EQ(test, 0, regmap_write(map, 4, val[2])); /* We should read back the new values, and defaults for the rest */ for (i = 0; i < config.max_register + 1; i++) { @@ -1225,24 +1238,34 @@ static void raw_sync(struct kunit *test) switch (i) { case 2: case 3: - case 6: if (config.val_format_endian == REGMAP_ENDIAN_BIG) { KUNIT_EXPECT_EQ(test, rval, - be16_to_cpu(val[i % 2])); + be16_to_cpu(val[i - 2])); } else { KUNIT_EXPECT_EQ(test, rval, - le16_to_cpu(val[i % 2])); + le16_to_cpu(val[i - 2])); } break; + case 4: + KUNIT_EXPECT_EQ(test, rval, val[i - 2]); + break; default: KUNIT_EXPECT_EQ(test, config.reg_defaults[i].def, rval); break; } } + + /* + * The value written via _write() was translated by the core, + * translate the original copy for comparison purposes. + */ + if (config.val_format_endian == REGMAP_ENDIAN_BIG) + val[2] = cpu_to_be16(val[2]); + else + val[2] = cpu_to_le16(val[2]); /* The values should not appear in the "hardware" */ - KUNIT_EXPECT_MEMNEQ(test, &hw_buf[2], val, sizeof(val)); - KUNIT_EXPECT_MEMNEQ(test, &hw_buf[6], val, sizeof(u16)); + KUNIT_EXPECT_MEMNEQ(test, &hw_buf[2], &val[0], sizeof(val)); for (i = 0; i < config.max_register + 1; i++) data->written[i] = false; @@ -1253,8 +1276,7 @@ static void raw_sync(struct kunit *test) KUNIT_EXPECT_EQ(test, 0, regcache_sync(map)); /* The values should now appear in the "hardware" */ - KUNIT_EXPECT_MEMEQ(test, &hw_buf[2], val, sizeof(val)); - KUNIT_EXPECT_MEMEQ(test, &hw_buf[6], val, sizeof(u16)); + KUNIT_EXPECT_MEMEQ(test, &hw_buf[2], &val[0], sizeof(val)); regmap_exit(map); } -- 2.43.0