From: "Björn Töpel" <bjorn@kernel.org>
To: Palmer Dabbelt <palmer@dabbelt.com>,
Andy Shevchenko <andy@kernel.org>,
linux-kernel@vger.kernel.org
Cc: "Palmer Dabbelt" <palmer@rivosinc.com>,
"Heiko Stuebner" <heiko@sntech.de>,
linux-riscv@lists.infradead.org,
"Björn Töpel" <bjorn@rivosinc.com>
Subject: [PATCH v3] lib/test_string.c: Add strncmp() tests
Date: Thu, 2 Mar 2023 08:19:34 +0100 [thread overview]
Message-ID: <20230302071934.254111-1-bjorn@kernel.org> (raw)
From: Palmer Dabbelt <palmer@rivosinc.com>
The RISC-V strncmp() fails on some inputs, see the linked thread for
more details. It turns out there were no strncmp() calls in the self
tests, this adds one.
Reported-by: Heiko Stübner <heiko@sntech.de>
Link: https://lore.kernel.org/all/2801162.88bMQJbFj6@diego/
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
---
Change back to it's original form. Checkpatch still complains about
__initconst, but there's a patch addressing that [1].
[1] https://lore.kernel.org/all/20230301094320.15954-1-bjorn@kernel.org/
v2->v3: Removed the "checkpatch fix" patch
Added one more test
v1->v2: Added two more tests (pos/neg). (Andy)
Minor code style issues. (Andy)
Fixed checkpatch errors.
---
lib/test_string.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/lib/test_string.c b/lib/test_string.c
index c5cb92fb710e..f18a34578f1f 100644
--- a/lib/test_string.c
+++ b/lib/test_string.c
@@ -207,6 +207,43 @@ static __init int strspn_selftest(void)
return 0;
}
+static __init int strncmp_selftest(void)
+{
+ size_t i;
+ static const struct strncmp_test {
+ const char *str_a;
+ const char *str_b;
+ unsigned long count;
+ unsigned long max_off;
+ int retval;
+ } tests[] __initconst = {
+ { "/dev/vda", "/dev/", 5, 4, 0 },
+ { "/dev/vda", "/dev/vdb", 5, 4, 0 },
+ { "00000000---11111", "00000000---11112", 12, 4, 0 },
+ { "/dev/vda", "/dev/vd\0", 8, 0, 97 },
+ { "ABC", "AB", 3, 0, 67 },
+ { "ABA", "ABZ", 3, 0, -25 },
+ { "ABC", "ABC", 3, 0, 0 },
+ };
+
+ for (i = 0; i < ARRAY_SIZE(tests); ++i) {
+ const struct strncmp_test *s = tests + i;
+ size_t off;
+
+ for (off = 0; off <= s->max_off; off++) {
+ int res = strncmp(s->str_a + off, s->str_b + off, s->count - off);
+
+ if (res == 0 && s->retval != 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x0;
+ if (res > 0 && s->retval <= 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x1;
+ if (res < 0 && s->retval >= 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x2;
+ }
+ }
+ return 0;
+}
+
static __exit void string_selftest_remove(void)
{
}
@@ -245,6 +282,11 @@ static __init int string_selftest_init(void)
if (subtest)
goto fail;
+ test = 7;
+ subtest = strncmp_selftest();
+ if (subtest)
+ goto fail;
+
pr_info("String selftests succeeded\n");
return 0;
fail:
base-commit: c0927a7a5391f7d8e593e5e50ead7505a23cadf9
--
2.37.2
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: "Björn Töpel" <bjorn@kernel.org>
To: Palmer Dabbelt <palmer@dabbelt.com>,
Andy Shevchenko <andy@kernel.org>,
linux-kernel@vger.kernel.org
Cc: "Palmer Dabbelt" <palmer@rivosinc.com>,
"Heiko Stuebner" <heiko@sntech.de>,
linux-riscv@lists.infradead.org,
"Björn Töpel" <bjorn@rivosinc.com>
Subject: [PATCH v3] lib/test_string.c: Add strncmp() tests
Date: Thu, 2 Mar 2023 08:19:34 +0100 [thread overview]
Message-ID: <20230302071934.254111-1-bjorn@kernel.org> (raw)
From: Palmer Dabbelt <palmer@rivosinc.com>
The RISC-V strncmp() fails on some inputs, see the linked thread for
more details. It turns out there were no strncmp() calls in the self
tests, this adds one.
Reported-by: Heiko Stübner <heiko@sntech.de>
Link: https://lore.kernel.org/all/2801162.88bMQJbFj6@diego/
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
---
Change back to it's original form. Checkpatch still complains about
__initconst, but there's a patch addressing that [1].
[1] https://lore.kernel.org/all/20230301094320.15954-1-bjorn@kernel.org/
v2->v3: Removed the "checkpatch fix" patch
Added one more test
v1->v2: Added two more tests (pos/neg). (Andy)
Minor code style issues. (Andy)
Fixed checkpatch errors.
---
lib/test_string.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/lib/test_string.c b/lib/test_string.c
index c5cb92fb710e..f18a34578f1f 100644
--- a/lib/test_string.c
+++ b/lib/test_string.c
@@ -207,6 +207,43 @@ static __init int strspn_selftest(void)
return 0;
}
+static __init int strncmp_selftest(void)
+{
+ size_t i;
+ static const struct strncmp_test {
+ const char *str_a;
+ const char *str_b;
+ unsigned long count;
+ unsigned long max_off;
+ int retval;
+ } tests[] __initconst = {
+ { "/dev/vda", "/dev/", 5, 4, 0 },
+ { "/dev/vda", "/dev/vdb", 5, 4, 0 },
+ { "00000000---11111", "00000000---11112", 12, 4, 0 },
+ { "/dev/vda", "/dev/vd\0", 8, 0, 97 },
+ { "ABC", "AB", 3, 0, 67 },
+ { "ABA", "ABZ", 3, 0, -25 },
+ { "ABC", "ABC", 3, 0, 0 },
+ };
+
+ for (i = 0; i < ARRAY_SIZE(tests); ++i) {
+ const struct strncmp_test *s = tests + i;
+ size_t off;
+
+ for (off = 0; off <= s->max_off; off++) {
+ int res = strncmp(s->str_a + off, s->str_b + off, s->count - off);
+
+ if (res == 0 && s->retval != 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x0;
+ if (res > 0 && s->retval <= 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x1;
+ if (res < 0 && s->retval >= 0)
+ return 0x1000 + 0x100*off + 0x10*i + 0x2;
+ }
+ }
+ return 0;
+}
+
static __exit void string_selftest_remove(void)
{
}
@@ -245,6 +282,11 @@ static __init int string_selftest_init(void)
if (subtest)
goto fail;
+ test = 7;
+ subtest = strncmp_selftest();
+ if (subtest)
+ goto fail;
+
pr_info("String selftests succeeded\n");
return 0;
fail:
base-commit: c0927a7a5391f7d8e593e5e50ead7505a23cadf9
--
2.37.2
next reply other threads:[~2023-03-02 7:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-02 7:19 Björn Töpel [this message]
2023-03-02 7:19 ` [PATCH v3] lib/test_string.c: Add strncmp() tests Björn Töpel
2023-03-02 10:26 ` Andy Shevchenko
2023-03-02 10:26 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230302071934.254111-1-bjorn@kernel.org \
--to=bjorn@kernel.org \
--cc=andy@kernel.org \
--cc=bjorn@rivosinc.com \
--cc=heiko@sntech.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=palmer@rivosinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.