From patchwork Sun Sep 26 22:33:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Isabella B do Amaral X-Patchwork-Id: 12518483 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2906AC433F5 for ; Sun, 26 Sep 2021 22:33:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0C2CC60F94 for ; Sun, 26 Sep 2021 22:33:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230426AbhIZWfK (ORCPT ); Sun, 26 Sep 2021 18:35:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230430AbhIZWfJ (ORCPT ); Sun, 26 Sep 2021 18:35:09 -0400 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A276FC061604 for ; Sun, 26 Sep 2021 15:33:32 -0700 (PDT) Received: by mail-qk1-x736.google.com with SMTP id p4so34958393qki.3 for ; Sun, 26 Sep 2021 15:33:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3Q+Zwc1UmptFHFCp3do8ZAFH6U/asPSa4z2xxfPXQY4=; b=RPQAPTY69QTPdzNYdpfCmv5/li8GSQzn4OtxJan3goHFLc0xZJsKPvOHAGZsCE+nVI KziNHcKG7dZ/IuS/6Ibe+IyvA1VWHhNSeH/EyuaK5a7LTQPtAlKYraCB5lVFQfU0wgKO wzSISW7x/nE/+8e0Lx2cptZcTK2bOX6/vtihW2nQZ4HylJjfMC0dQPSyN8sdEp6VJZQM DYugnKhqoFVDgxv1vo2ICnvYia+itJ3qb3l5SoKvE6cVuhx6fGQnFJVemB88EEYgSQiy 40nxBy6hOikxVSBPj/1RVDZq+tsPcnpKDkpcifvMzjk6hPSNIicBsi3GLj0yHxERt/mz qrUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3Q+Zwc1UmptFHFCp3do8ZAFH6U/asPSa4z2xxfPXQY4=; b=J/sa89CHTpd6vqrwxJTUecjKzaCIUxNaE8+qQxtA3dxrX0J/YyUOztho/zgiZFve28 lek+ZGdo1vRlZaTihHw1kzPN9aDM0c5Uus/rMS2PN6uyGwfKeldy8fieR4QKz1KK+VWh nvqGJeo9sSNGWrq56aG2j849QV/fHHoLYhL3B3OAYv//b/1taZY+V2dQvHOtgAOmNdyL O9nDMh7VPkFOJe4D2ztjgq7cCf/l/j18c49GQK3vTMhQvO70VTe2M0KeCW/HtlVceUbZ 8oFeZwIPoSjwLaJAqqKv30PsVdeayncfUJUA41uHzgxALJWTVjHXFpAMX/MzyheSSb9n szJw== X-Gm-Message-State: AOAM533oUvfoaDKyHedaspt3cwIBnrTjdJiGwK+pVVAhbZQ+fKE1qdLk +9vg1OztSP7Gt/1Rg1hkkNw8qA== X-Google-Smtp-Source: ABdhPJxyg/gztpPiYQXGkdPKM6MC9UDiEktCMoFa4x4TSwg8Yevs8V+tb/HIyBuhHaNXwQzXAx/fFQ== X-Received: by 2002:a37:356:: with SMTP id 83mr20911111qkd.110.1632695611793; Sun, 26 Sep 2021 15:33:31 -0700 (PDT) Received: from aehse.localdomain ([2804:d41:bd1c:9100:f2e1:f671:7a83:1eb8]) by smtp.gmail.com with ESMTPSA id x6sm7244151qts.79.2021.09.26.15.33.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Sep 2021 15:33:31 -0700 (PDT) From: Isabella Basso To: geert@linux-m68k.org Cc: ferreiraenzoa@gmail.com, augusto.duraes33@gmail.com, brendanhiggins@google.com, dlatypov@google.com, davidgow@google.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kunit-dev@googlegroups.com, ~lkcamp/patches@lists.sr.ht, rodrigosiqueiramelo@gmail.com, Isabella Basso Subject: [PATCH v2 1/5] hash.h: remove unused define directive Date: Sun, 26 Sep 2021 19:33:18 -0300 Message-Id: <20210926223322.848641-2-isabellabdoamaral@usp.br> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210926223322.848641-1-isabellabdoamaral@usp.br> References: <20210926223322.848641-1-isabellabdoamaral@usp.br> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Currently, there exist hash_32() and __hash_32() functions, which were introduced in a patch [1] targeting architecture specific optimizations. These functions can be overridden on a per-architecture basis to achieve such optimizations. They must set their corresponding define directive (HAVE_ARCH_HASH_32 and HAVE_ARCH__HASH_32, respectively) so that header files can deal with these overrides properly. As the supported 32-bit architectures that have their own hash function implementation (i.e. m68k, Microblaze, H8/300, pa-risc) have only been making use of the (more general) __hash_32() function (which only lacks a right shift operation when compared to the hash_32() function), remove the define directive corresponding to the arch-specific hash_32() implementation. [1] https://lore.kernel.org/lkml/20160525073311.5600.qmail@ns.sciencehorizons.net/ Changes since v1: - As suggested by David Gow: 1. Reword commit message. Tested-by: David Gow Co-developed-by: Augusto Durães Camargo Signed-off-by: Augusto Durães Camargo Co-developed-by: Enzo Ferreira Signed-off-by: Enzo Ferreira Signed-off-by: Isabella Basso Reviewed-by: David Gow --- include/linux/hash.h | 5 +---- lib/test_hash.c | 24 +----------------------- tools/include/linux/hash.h | 5 +---- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/include/linux/hash.h b/include/linux/hash.h index ad6fa21d977b..38edaa08f862 100644 --- a/include/linux/hash.h +++ b/include/linux/hash.h @@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val) return val * GOLDEN_RATIO_32; } -#ifndef HAVE_ARCH_HASH_32 -#define hash_32 hash_32_generic -#endif -static inline u32 hash_32_generic(u32 val, unsigned int bits) +static inline u32 hash_32(u32 val, unsigned int bits) { /* High bits are more random, so use them. */ return __hash_32(val) >> (32 - bits); diff --git a/lib/test_hash.c b/lib/test_hash.c index 0ee40b4a56dd..d4b0cfdb0377 100644 --- a/lib/test_hash.c +++ b/lib/test_hash.c @@ -94,22 +94,7 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) pr_err("hash_32(%#x, %d) = %#x > %#x", h0, k, h1, m); return false; } -#ifdef HAVE_ARCH_HASH_32 - h2 = hash_32_generic(h0, k); -#if HAVE_ARCH_HASH_32 == 1 - if (h1 != h2) { - pr_err("hash_32(%#x, %d) = %#x != hash_32_generic() " - " = %#x", h0, k, h1, h2); - return false; - } -#else - if (h2 > m) { - pr_err("hash_32_generic(%#x, %d) = %#x > %#x", - h0, k, h1, m); - return false; - } -#endif -#endif + /* Test hash_64 */ hash_or[1][k] |= h1 = hash_64(h64, k); if (h1 > m) { @@ -227,13 +212,6 @@ test_hash_init(void) #else pr_info("__hash_32() has no arch implementation to test."); #endif -#ifdef HAVE_ARCH_HASH_32 -#if HAVE_ARCH_HASH_32 != 1 - pr_info("hash_32() is arch-specific; not compared to generic."); -#endif -#else - pr_info("hash_32() has no arch implementation to test."); -#endif #ifdef HAVE_ARCH_HASH_64 #if HAVE_ARCH_HASH_64 != 1 pr_info("hash_64() is arch-specific; not compared to generic."); diff --git a/tools/include/linux/hash.h b/tools/include/linux/hash.h index ad6fa21d977b..38edaa08f862 100644 --- a/tools/include/linux/hash.h +++ b/tools/include/linux/hash.h @@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val) return val * GOLDEN_RATIO_32; } -#ifndef HAVE_ARCH_HASH_32 -#define hash_32 hash_32_generic -#endif -static inline u32 hash_32_generic(u32 val, unsigned int bits) +static inline u32 hash_32(u32 val, unsigned int bits) { /* High bits are more random, so use them. */ return __hash_32(val) >> (32 - bits); From patchwork Sun Sep 26 22:33:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isabella B do Amaral X-Patchwork-Id: 12518485 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 622A5C433EF for ; Sun, 26 Sep 2021 22:33:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4240760E08 for ; Sun, 26 Sep 2021 22:33:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230486AbhIZWfN (ORCPT ); Sun, 26 Sep 2021 18:35:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230433AbhIZWfM (ORCPT ); Sun, 26 Sep 2021 18:35:12 -0400 Received: from mail-qt1-x835.google.com (mail-qt1-x835.google.com [IPv6:2607:f8b0:4864:20::835]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4381C061575 for ; Sun, 26 Sep 2021 15:33:35 -0700 (PDT) Received: by mail-qt1-x835.google.com with SMTP id r16so15002454qtw.11 for ; Sun, 26 Sep 2021 15:33:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kUt5TY5jxoR7/B2VCpvqew1CInyRkLUynHuODPcVSWc=; b=bBK1mOCCuF0ojCMOPOET0V7fdi818uz01r6p+LePmuKT9t2TGV7e+PMGeIG9Sas86O rol4fyJtuZ2AaLA8e5QyZT4/J5sIpSjv7l4BVkVmeyqNPNDNFj65ShzTnH6vnc2XziIM oeqhyo3ujd4f+9v8BvOqO+3KRtGwyhJlSK/tHSfYZBTku9GmUcKWzGwewMHU0R+BAJah UFaJZJQiac/m5LkI9cH/EalifrnyMhLUba7Hrqxy1r9otnPn2PIMTRbc5+77b5547WjP w5Zbbg9vPgjkhkFPgWy5TGQ74g/353Y82o4ZDuKZgPLEtW8yyYEkPN1F0ouMmUOerHd3 ur4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kUt5TY5jxoR7/B2VCpvqew1CInyRkLUynHuODPcVSWc=; b=eFEUnu9X/oGG+G2sTocj0QSJYIw3xEWLNsOdP5VyY0B0d5EylOE8LIeKLpIvw955aA hZ7yrNNBnMjAcCBO0b/k/3CSQvKZIbJ5EQyVRRhoSOObREa6YdWiY18QRxFtIr3yPTxA MTzGmTia0jx4HF9MVW9kB0IHVmBIhP/n9EPzMyzvFOh5LVI6ywX5uVehBH/E8eQRBY/G ZTh7BJwHFCKyhBp14nLTufr5Gq/T9glseOW2jN1Ml9MGZKkw/TKcGPBX4f2nPKw8CaoL 8JM4t+tntoYzV/FGFlMX8gwftLJt9fRfshbzxcBjxrXBaD5DR+8mys0yCujryAtouY+m 8J0Q== X-Gm-Message-State: AOAM533g0LGfbmkCbH4uVF//n/Gi5rFEekg8VYSOMkSFKx7eUR4OMdA8 p74T0rW8jyIMRSWytqZ9k7XBSA== X-Google-Smtp-Source: ABdhPJzRi7N+ZiAGSZlIVaM4SqwBQxiuNoAmGO4UcTMRGleEiMd63IVnCo83DeIACvJ8V2LvtBY05A== X-Received: by 2002:ac8:146:: with SMTP id f6mr8682544qtg.46.1632695614965; Sun, 26 Sep 2021 15:33:34 -0700 (PDT) Received: from aehse.localdomain ([2804:d41:bd1c:9100:f2e1:f671:7a83:1eb8]) by smtp.gmail.com with ESMTPSA id x6sm7244151qts.79.2021.09.26.15.33.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Sep 2021 15:33:34 -0700 (PDT) From: Isabella Basso To: geert@linux-m68k.org Cc: ferreiraenzoa@gmail.com, augusto.duraes33@gmail.com, brendanhiggins@google.com, dlatypov@google.com, davidgow@google.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kunit-dev@googlegroups.com, ~lkcamp/patches@lists.sr.ht, rodrigosiqueiramelo@gmail.com, Isabella Basso Subject: [PATCH v2 2/5] test_hash.c: split test_int_hash into arch-specific functions Date: Sun, 26 Sep 2021 19:33:19 -0300 Message-Id: <20210926223322.848641-3-isabellabdoamaral@usp.br> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210926223322.848641-1-isabellabdoamaral@usp.br> References: <20210926223322.848641-1-isabellabdoamaral@usp.br> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Split the test_int_hash function to keep its mainloop separate from arch-specific chunks, which are only compiled as needed. This aims at improving readability. Tested-by: David Gow Signed-off-by: Isabella Basso Reviewed-by: David Gow --- lib/test_hash.c | 86 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 29 deletions(-) diff --git a/lib/test_hash.c b/lib/test_hash.c index d4b0cfdb0377..08fe63776c4f 100644 --- a/lib/test_hash.c +++ b/lib/test_hash.c @@ -56,6 +56,53 @@ fill_buf(char *buf, size_t len, u32 seed) } } +/* Holds most testing variables for the int test */ +struct test_hash_params { + unsigned long long *h64; + u32 h0; + u32 h1; + u32 h2; + u32 (*hash_or)[33]; +}; + +#ifdef HAVE_ARCH__HASH_32 +static bool __init +test_int__hash_32(struct test_hash_params *params) +{ + params->hash_or[1][0] |= params->h2 = __hash_32_generic(params->h0); +#if HAVE_ARCH__HASH_32 == 1 + if (params->h1 != params->h2) { + pr_err("__hash_32(%#x) = %#x != __hash_32_generic() = %#x", + params->h0, params->h1, params->h2); + return false; + } +#endif + return true; +} +#endif + +#ifdef HAVE_ARCH_HASH_64 +static bool __init +test_int_hash_64(struct test_hash_params *params, u32 const *m, int *k) +{ + params->h2 = hash_64_generic(*params->h64, *k); +#if HAVE_ARCH_HASH_64 == 1 + if (params->h1 != params->h2) { + pr_err("hash_64(%#llx, %d) = %#x != hash_64_generic() = %#x", + *params->h64, *k, params->h1, params->h2); + return false; + } +#else + if (params->h2 > *m) { + pr_err("hash_64_generic(%#llx, %d) = %#x > %#x", + *params->h64, *k, params->h1, *m); + return false; + } +#endif + return true; +} +#endif + /* * Test the various integer hash functions. h64 (or its low-order bits) * is the integer to hash. hash_or accumulates the OR of the hash values, @@ -69,19 +116,13 @@ static bool __init test_int_hash(unsigned long long h64, u32 hash_or[2][33]) { int k; - u32 h0 = (u32)h64, h1, h2; + struct test_hash_params params = { &h64, (u32)h64, 0, 0, hash_or }; /* Test __hash32 */ - hash_or[0][0] |= h1 = __hash_32(h0); + hash_or[0][0] |= params.h1 = __hash_32(params.h0); #ifdef HAVE_ARCH__HASH_32 - hash_or[1][0] |= h2 = __hash_32_generic(h0); -#if HAVE_ARCH__HASH_32 == 1 - if (h1 != h2) { - pr_err("__hash_32(%#x) = %#x != __hash_32_generic() = %#x", - h0, h1, h2); + if (!test_int__hash_32(¶ms)) return false; - } -#endif #endif /* Test k = 1..32 bits */ @@ -89,37 +130,24 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) u32 const m = ((u32)2 << (k-1)) - 1; /* Low k bits set */ /* Test hash_32 */ - hash_or[0][k] |= h1 = hash_32(h0, k); - if (h1 > m) { - pr_err("hash_32(%#x, %d) = %#x > %#x", h0, k, h1, m); + hash_or[0][k] |= params.h1 = hash_32(params.h0, k); + if (params.h1 > m) { + pr_err("hash_32(%#x, %d) = %#x > %#x", params.h0, k, params.h1, m); return false; } /* Test hash_64 */ - hash_or[1][k] |= h1 = hash_64(h64, k); - if (h1 > m) { - pr_err("hash_64(%#llx, %d) = %#x > %#x", h64, k, h1, m); + hash_or[1][k] |= params.h1 = hash_64(h64, k); + if (params.h1 > m) { + pr_err("hash_64(%#llx, %d) = %#x > %#x", h64, k, params.h1, m); return false; } #ifdef HAVE_ARCH_HASH_64 - h2 = hash_64_generic(h64, k); -#if HAVE_ARCH_HASH_64 == 1 - if (h1 != h2) { - pr_err("hash_64(%#llx, %d) = %#x != hash_64_generic() " - "= %#x", h64, k, h1, h2); + if (!test_int_hash_64(¶ms, &m, &k)) return false; - } -#else - if (h2 > m) { - pr_err("hash_64_generic(%#llx, %d) = %#x > %#x", - h64, k, h1, m); - return false; - } -#endif #endif } - (void)h2; /* Suppress unused variable warning */ return true; } From patchwork Sun Sep 26 22:33:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isabella B do Amaral X-Patchwork-Id: 12518487 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BE3FCC433EF for ; Sun, 26 Sep 2021 22:33:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A47286112E for ; Sun, 26 Sep 2021 22:33:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230499AbhIZWfQ (ORCPT ); Sun, 26 Sep 2021 18:35:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230525AbhIZWfQ (ORCPT ); Sun, 26 Sep 2021 18:35:16 -0400 Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38231C061575 for ; Sun, 26 Sep 2021 15:33:39 -0700 (PDT) Received: by mail-qk1-x72e.google.com with SMTP id p4so34958594qki.3 for ; Sun, 26 Sep 2021 15:33:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=keB75pA8tqWnwI9BXtLybyOviHEmwePg0jqXukti5H0=; b=YkNS0cUGVRMRN4pM13cbUzfkfYkN+S5ChWWvDx9U9VzL0puW6p85QqS4nMvhw2K9/8 GD+38B2lvKd1u/X6Q6dr7pa2IXt9/a+LvIJK/dkb37GdQh5x48/3wiUeIldiBC7J2m7S W1S60u65asCW5aSIBjt8koryzI21oZ7k+ppRnT/GRz9E1E9BpIo0T1ciUO82M4OwVRdO YVwauef4oPuZ1SFOOVKvK/OlwPx4ZKkv0BA7i9AKXQxEgijpUYCPZR6tRNK8FVhEz5HE nxX8LvQGVzkF0lBcIJ+aIqXUQT7pU149pCCNQ3yqBOofuujtF0VFxNl56SjyEKfr42cB k6Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=keB75pA8tqWnwI9BXtLybyOviHEmwePg0jqXukti5H0=; b=vpvAk3Xyz46moekpAmYab0pnXiBo7ix8gKdLkE5Me5Ah+RLbZRJHcDiHUliSXrCUfr aT9EJ85RrELIN3imFPlGFjF4NfLSKUUaBj0jmTNJXWlzxcmN2eikfM1GyUZErJDa0iRK /RZ1hWKBV2FW21wPW8WkaoWe6bxOptbn9dS4O2DJDQMhbl8s6yxqnNBEC692o5vP7hfv ZsbKN1N3duqH9nSlhw5FB88lbJjCaRScQlJrzIoE7ufNF+Fr6f/BxC5LR3pn8TzrTe6L s0f6vpJZlR6KYFXuYkTaOI73ihSiowoV0l5nZ+WQiovnIdnO+r6t6t4hmMxXpQv5taG/ Gq7Q== X-Gm-Message-State: AOAM533ZrLvIjIc+J7OenJ+IkZGzmWPlm8HCe/FwxVhQ2vaTU0Sm2fPu R64dEKpS3pGRKxvUWoRAA5KskA== X-Google-Smtp-Source: ABdhPJwCEzMCikARt8F/wU9Zl9tIuNx7l/U0w/ossc8f/G7oN3wq7egq/zGtwMdjtF8G6oePDDJO/Q== X-Received: by 2002:a37:716:: with SMTP id 22mr20662271qkh.99.1632695618422; Sun, 26 Sep 2021 15:33:38 -0700 (PDT) Received: from aehse.localdomain ([2804:d41:bd1c:9100:f2e1:f671:7a83:1eb8]) by smtp.gmail.com with ESMTPSA id x6sm7244151qts.79.2021.09.26.15.33.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Sep 2021 15:33:38 -0700 (PDT) From: Isabella Basso To: geert@linux-m68k.org Cc: ferreiraenzoa@gmail.com, augusto.duraes33@gmail.com, brendanhiggins@google.com, dlatypov@google.com, davidgow@google.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kunit-dev@googlegroups.com, ~lkcamp/patches@lists.sr.ht, rodrigosiqueiramelo@gmail.com, Isabella Basso Subject: [PATCH v2 3/5] test_hash.c: split test_hash_init Date: Sun, 26 Sep 2021 19:33:20 -0300 Message-Id: <20210926223322.848641-4-isabellabdoamaral@usp.br> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210926223322.848641-1-isabellabdoamaral@usp.br> References: <20210926223322.848641-1-isabellabdoamaral@usp.br> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Split up test_hash_init so that it calls each test more explicitly insofar it is possible without rewriting the entire file. This aims at improving readability. Split tests performed on string_or as they don't interfere with those performed in hash_or. Also separate pr_info calls about skipped tests as they're not part of the tests themselves, but only warn about (un)defined arch-specific hash functions. Changes since v1: - As suggested by David Gow: 1. Rename arch-specific test functions. 2. Remove spare whitespace changes. - As suggested by Marco Elver: 1. Add struct for carrying test variables. Tested-by: David Gow Signed-off-by: Isabella Basso Reviewed-by: David Gow --- lib/test_hash.c | 66 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/lib/test_hash.c b/lib/test_hash.c index 08fe63776c4f..db9dd18b4e8b 100644 --- a/lib/test_hash.c +++ b/lib/test_hash.c @@ -153,11 +153,39 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) #define SIZE 256 /* Run time is cubic in SIZE */ -static int __init -test_hash_init(void) +static int __init test_string_or(void) { char buf[SIZE+1]; - u32 string_or = 0, hash_or[2][33] = { { 0, } }; + u32 string_or = 0; + int i, j; + + fill_buf(buf, SIZE, 1); + + /* Test every possible non-empty substring in the buffer. */ + for (j = SIZE; j > 0; --j) { + buf[j] = '\0'; + + for (i = 0; i <= j; i++) { + u32 h0 = full_name_hash(buf+i, buf+i, j-i); + + string_or |= h0; + } /* i */ + } /* j */ + + /* The OR of all the hash values should cover all the bits */ + if (~string_or) { + pr_err("OR of all string hash results = %#x != %#x", + string_or, -1u); + return -EINVAL; + } + + return 0; +} + +static int __init test_hash_or(void) +{ + char buf[SIZE+1]; + u32 hash_or[2][33] = { { 0, } }; unsigned tests = 0; unsigned long long h64 = 0; int i, j; @@ -187,7 +215,6 @@ test_hash_init(void) return -EINVAL; } - string_or |= h0; h64 = h64 << 32 | h0; /* For use with hash_64 */ if (!test_int_hash(h64, hash_or)) return -EINVAL; @@ -195,12 +222,6 @@ test_hash_init(void) } /* i */ } /* j */ - /* The OR of all the hash values should cover all the bits */ - if (~string_or) { - pr_err("OR of all string hash results = %#x != %#x", - string_or, -1u); - return -EINVAL; - } if (~hash_or[0][0]) { pr_err("OR of all __hash_32 results = %#x != %#x", hash_or[0][0], -1u); @@ -232,6 +253,13 @@ test_hash_init(void) } } + pr_notice("%u tests passed.", tests); + + return 0; +} + +static void __init notice_skipped_tests(void) +{ /* Issue notices about skipped tests. */ #ifdef HAVE_ARCH__HASH_32 #if HAVE_ARCH__HASH_32 != 1 @@ -247,10 +275,24 @@ test_hash_init(void) #else pr_info("hash_64() has no arch implementation to test."); #endif +} - pr_notice("%u tests passed.", tests); +static int __init +test_hash_init(void) +{ + int ret; - return 0; + ret = test_string_or(); + if (ret < 0) + return ret; + + ret = test_hash_or(); + if (ret < 0) + return ret; + + notice_skipped_tests(); + + return ret; } static void __exit test_hash_exit(void) From patchwork Sun Sep 26 22:33:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isabella B do Amaral X-Patchwork-Id: 12518489 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C1DAC433EF for ; Sun, 26 Sep 2021 22:33:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6E35260F94 for ; Sun, 26 Sep 2021 22:33:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231138AbhIZWfX (ORCPT ); Sun, 26 Sep 2021 18:35:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231151AbhIZWfT (ORCPT ); Sun, 26 Sep 2021 18:35:19 -0400 Received: from mail-qv1-xf36.google.com (mail-qv1-xf36.google.com [IPv6:2607:f8b0:4864:20::f36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 89003C061604 for ; Sun, 26 Sep 2021 15:33:42 -0700 (PDT) Received: by mail-qv1-xf36.google.com with SMTP id r18so10021399qvy.8 for ; Sun, 26 Sep 2021 15:33:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tzBIb9Rrkx8NbszjPdEpu16O5Mah570+vhSFzL6iVU4=; b=Y/0/o41Pe70qQK42UBfSUxuIpnjC4YEfaSZ/UYMWHES/flFLEToveab17WLhcNVcKB GR2F9mdNeqemVHENgXeRLl98XUkl4rtguI3a5jtFz3zCCuYuY9pJ9Gvy0wt1GAhUP+q0 rdaiVhkJFcw01gjL4qcsMlb61PTmjKusbosQlMh5lxIuiyOa64qAt0XspObUdCBxeeqX gLR1jOiUqRw5ZQzl22QVvN0CsihS65sr8SXn0PzPs3OkPuX0/oknbIyASrG3LH2Mujj7 paWWhUeJl8It37sOsLi16y03iYg1NANggXlqw17e9G/rcHcGaN/eL9CkV7Br7hkU9ar8 AJtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tzBIb9Rrkx8NbszjPdEpu16O5Mah570+vhSFzL6iVU4=; b=llk2qwM9IqsPG1X9xXESwsK8bnIerrYhrQi5RIpIxqgwNiCCrJ4C7+6NHhqQZq5DWJ Now3q95zNiLAoCmmATHlaQuQvNTxHhbF0u50OfnkG5hHer4HrVDPalvh/i+3Ax+EQFh8 L4aNctYlalC3n7sVlskqQrSCR38NZyFw+ztzgztf9p1uW7hpA3CMzywyiJfR5ns/bkj8 Pk5lFILBk7IVhybhhzWMW8CohOyK7YgtZzLF5pud39pW2M8juv5o/4y3X3Xs7oxV2wJT yB53C6TeQ30x0eewlcco+BE7RnqwF3SKOprB1gOU3+33mrcCU3fgTQtViNivJHDJKO/g 0o3g== X-Gm-Message-State: AOAM531X4RKikcc8ZpC4KfeNqh3DcgDR52N33ZhyKrcui8Mhe0V4db7y DaeQxF9lg3EgzG6fvOCwFn6R5Q== X-Google-Smtp-Source: ABdhPJx5HD00AzRcLzny2/Y+fepBxWgk/Zkm/8XqmoemEyc0fYvS0c3N0NbzjA/cfFbwcDISkLWSvA== X-Received: by 2002:ad4:4531:: with SMTP id l17mr2839310qvu.18.1632695621723; Sun, 26 Sep 2021 15:33:41 -0700 (PDT) Received: from aehse.localdomain ([2804:d41:bd1c:9100:f2e1:f671:7a83:1eb8]) by smtp.gmail.com with ESMTPSA id x6sm7244151qts.79.2021.09.26.15.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Sep 2021 15:33:41 -0700 (PDT) From: Isabella Basso To: geert@linux-m68k.org Cc: ferreiraenzoa@gmail.com, augusto.duraes33@gmail.com, brendanhiggins@google.com, dlatypov@google.com, davidgow@google.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kunit-dev@googlegroups.com, ~lkcamp/patches@lists.sr.ht, rodrigosiqueiramelo@gmail.com, Isabella Basso Subject: [PATCH v2 4/5] lib/Kconfig.debug: properly split hash test kernel entries Date: Sun, 26 Sep 2021 19:33:21 -0300 Message-Id: <20210926223322.848641-5-isabellabdoamaral@usp.br> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210926223322.848641-1-isabellabdoamaral@usp.br> References: <20210926223322.848641-1-isabellabdoamaral@usp.br> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Split TEST_HASH so that each entry only has one file. Note that there's no stringhash test file, but actually tests are performed in lib/test_hash.c. Tested-by: David Gow Signed-off-by: Isabella Basso Reviewed-by: David Gow --- lib/Kconfig.debug | 14 +++++++++++--- lib/Makefile | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2a9b6dcdac4f..eb6c4daf5fcb 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2207,9 +2207,17 @@ config TEST_RHASHTABLE config TEST_HASH tristate "Perform selftest on hash functions" help - Enable this option to test the kernel's integer (), - string (), and siphash () - hash functions on boot (or module load). + Enable this option to test the kernel's integer (), and + string () hash functions on boot (or module load). + + This is intended to help people writing architecture-specific + optimized versions. If unsure, say N. + +config TEST_SIPHASH + tristate "Perform selftest on siphash functions" + help + Enable this option to test the kernel's siphash () hash + functions on boot (or module load). This is intended to help people writing architecture-specific optimized versions. If unsure, say N. diff --git a/lib/Makefile b/lib/Makefile index 5efd1b435a37..c2e81d0eb31c 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -61,7 +61,8 @@ obj-$(CONFIG_TEST_FIRMWARE) += test_firmware.o obj-$(CONFIG_TEST_BITOPS) += test_bitops.o CFLAGS_test_bitops.o += -Werror obj-$(CONFIG_TEST_SYSCTL) += test_sysctl.o -obj-$(CONFIG_TEST_HASH) += test_hash.o test_siphash.o +obj-$(CONFIG_TEST_SIPHASH) += test_siphash.o +obj-$(CONFIG_TEST_HASH) += test_hash.o obj-$(CONFIG_TEST_IDA) += test_ida.o obj-$(CONFIG_KASAN_KUNIT_TEST) += test_kasan.o CFLAGS_test_kasan.o += -fno-builtin From patchwork Sun Sep 26 22:33:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Isabella B do Amaral X-Patchwork-Id: 12518491 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52417C433F5 for ; Sun, 26 Sep 2021 22:33:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AB9B60F94 for ; Sun, 26 Sep 2021 22:33:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231132AbhIZWfZ (ORCPT ); Sun, 26 Sep 2021 18:35:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231195AbhIZWfW (ORCPT ); Sun, 26 Sep 2021 18:35:22 -0400 Received: from mail-qk1-x735.google.com (mail-qk1-x735.google.com [IPv6:2607:f8b0:4864:20::735]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EB01C061570 for ; Sun, 26 Sep 2021 15:33:46 -0700 (PDT) Received: by mail-qk1-x735.google.com with SMTP id p4so34958825qki.3 for ; Sun, 26 Sep 2021 15:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp.br; s=usp-google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=blJvberSBtGAgP9ahJKdLib3J1pQn66IrJrwYCfOl4c=; b=rjTZUeHw6RrX1AZLRp0U+0mBfHd6l2lMvV6Yfd89cs16P9t16XBegH1+a2wO9GNo70 LmlV2ALvr5KZPhW2og/Q3/sWSamOCBns+r3B6VXcEekFniWDQ6inIoI9bAYEUIJacdGQ cjX2Ft50zwPCl8cQL0IyCyo1LLG5XaCU20vLdKDdk4MkmPsYgSva4zoORtQJrMjE+r58 eJpB8CiSVnhcdBnjfdcH1zqWR1MC3YF/ImmZDj99Tiyr+YH8LOi5xoaICyOIZtqQiBxb fZREims52n2oDSy5XtH10lwPEkMoL6jsd1D+rrLrhS8pc7R3EwHW0QgVhmaQHtSpguQv aIWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=blJvberSBtGAgP9ahJKdLib3J1pQn66IrJrwYCfOl4c=; b=zZewhdWVYH4yjYhJ90ON8frd9ikOTvMtt8D5OTErO8RBBOq2c4LDL9gP0EmJ7ILbiu sossuh9egpnN4sGUbKxHSH1GQY7VbAWZLKrsXrv27M6lZUT+R9b3mZj1Ue+3B9tkblIh dKH59Ct3QX1C19f7HPPVFLPibCNMNhj+IXQQTa1I63IDAR3B8GV8QSqd+ll8Cyg50/iu cx4gHxDkXn44khqAnGoE8CpmMSVp0AXBFNjmLv/rMT77+w33zYDFGb+GV2nh5v2WZAzS IGiWQIZVQpvNPWyCfIknmyv7uiUljdH5nXpA6ATktXqR0Kn33A5/VPqV8gc2A81cnUB+ rL7w== X-Gm-Message-State: AOAM530dx4L6bbCxkok10BA8uYj29tuE5VNQLIJoUWw8VoqNCPfLzcQc itWFExgJ4sXd3H2oY9KsvcHWzQ== X-Google-Smtp-Source: ABdhPJwDCcZBgln9FPBztXIJpDdpAPiVATTg13vJGl/4tI5x/stUsQ9DSHm8+DLurUpf134IkBANXg== X-Received: by 2002:ae9:de83:: with SMTP id s125mr21392851qkf.248.1632695625209; Sun, 26 Sep 2021 15:33:45 -0700 (PDT) Received: from aehse.localdomain ([2804:d41:bd1c:9100:f2e1:f671:7a83:1eb8]) by smtp.gmail.com with ESMTPSA id x6sm7244151qts.79.2021.09.26.15.33.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Sep 2021 15:33:44 -0700 (PDT) From: Isabella Basso To: geert@linux-m68k.org Cc: ferreiraenzoa@gmail.com, augusto.duraes33@gmail.com, brendanhiggins@google.com, dlatypov@google.com, davidgow@google.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, kunit-dev@googlegroups.com, ~lkcamp/patches@lists.sr.ht, rodrigosiqueiramelo@gmail.com, Isabella Basso , kernel test robot Subject: [PATCH v2 5/5] test_hash.c: refactor into kunit Date: Sun, 26 Sep 2021 19:33:22 -0300 Message-Id: <20210926223322.848641-6-isabellabdoamaral@usp.br> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210926223322.848641-1-isabellabdoamaral@usp.br> References: <20210926223322.848641-1-isabellabdoamaral@usp.br> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kselftest@vger.kernel.org Use KUnit framework to make tests more easily integrable with CIs. Even though these tests are not yet properly written as unit tests this change should help in debugging. Also remove kernel messages (i.e. through pr_info) as KUnit handles all debugging output and let it handle module init and exit details. Changes since v1: - As suggested by David Gow: 1. Keep module support. 2. Reword commit message. - As reported by the kernel test bot: 1. Fix compilation for m68k and parisc architectures. Reported-by: kernel test robot Tested-by: David Gow Co-developed-by: Augusto Durães Camargo Signed-off-by: Augusto Durães Camargo Co-developed-by: Enzo Ferreira Signed-off-by: Enzo Ferreira Signed-off-by: Isabella Basso Reviewed-by: David Gow --- lib/Kconfig.debug | 28 ++++--- lib/Makefile | 2 +- lib/test_hash.c | 187 ++++++++++++++-------------------------------- 3 files changed, 78 insertions(+), 139 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index eb6c4daf5fcb..04eec87c2964 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2204,15 +2204,6 @@ config TEST_RHASHTABLE If unsure, say N. -config TEST_HASH - tristate "Perform selftest on hash functions" - help - Enable this option to test the kernel's integer (), and - string () hash functions on boot (or module load). - - This is intended to help people writing architecture-specific - optimized versions. If unsure, say N. - config TEST_SIPHASH tristate "Perform selftest on siphash functions" help @@ -2361,6 +2352,25 @@ config BITFIELD_KUNIT If unsure, say N. +config HASH_KUNIT_TEST + tristate "KUnit Test for integer hash functions" if !KUNIT_ALL_TESTS + depends on KUNIT + default KUNIT_ALL_TESTS + help + Enable this option to test the kernel's string (), and + integer () hash functions on boot. + + KUnit tests run during boot and output the results to the debug log + in TAP format (https://testanything.org/). Only useful for kernel devs + running the KUnit test harness, and not intended for inclusion into a + production build. + + For more information on KUnit and unit tests in general please refer + to the KUnit documentation in Documentation/dev-tools/kunit/. + + This is intended to help people writing architecture-specific + optimized versions. If unsure, say N. + config RESOURCE_KUNIT_TEST tristate "KUnit test for resource API" depends on KUNIT diff --git a/lib/Makefile b/lib/Makefile index c2e81d0eb31c..0bc336d9d036 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -62,7 +62,7 @@ obj-$(CONFIG_TEST_BITOPS) += test_bitops.o CFLAGS_test_bitops.o += -Werror obj-$(CONFIG_TEST_SYSCTL) += test_sysctl.o obj-$(CONFIG_TEST_SIPHASH) += test_siphash.o -obj-$(CONFIG_TEST_HASH) += test_hash.o +obj-$(CONFIG_HASH_KUNIT_TEST) += test_hash.o obj-$(CONFIG_TEST_IDA) += test_ida.o obj-$(CONFIG_KASAN_KUNIT_TEST) += test_kasan.o CFLAGS_test_kasan.o += -fno-builtin diff --git a/lib/test_hash.c b/lib/test_hash.c index db9dd18b4e8b..9cb8b1d2ab06 100644 --- a/lib/test_hash.c +++ b/lib/test_hash.c @@ -14,14 +14,12 @@ * and hash_64(). */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt "\n" - #include #include #include #include #include -#include +#include /* 32-bit XORSHIFT generator. Seed must not be zero. */ static u32 __init __attribute_const__ @@ -66,40 +64,32 @@ struct test_hash_params { }; #ifdef HAVE_ARCH__HASH_32 -static bool __init -test_int__hash_32(struct test_hash_params *params) +static void __init +test_int__hash_32(struct kunit *test, struct test_hash_params *params) { params->hash_or[1][0] |= params->h2 = __hash_32_generic(params->h0); #if HAVE_ARCH__HASH_32 == 1 - if (params->h1 != params->h2) { - pr_err("__hash_32(%#x) = %#x != __hash_32_generic() = %#x", - params->h0, params->h1, params->h2); - return false; - } + KUNIT_EXPECT_EQ_MSG(test, params->h1, params->h2, + "__hash_32(%#x) = %#x != __hash_32_generic() = %#x", + params->h0, params->h1, params->h2); #endif - return true; } #endif #ifdef HAVE_ARCH_HASH_64 -static bool __init -test_int_hash_64(struct test_hash_params *params, u32 const *m, int *k) +static void __init +test_int_hash_64(struct kunit *test, struct test_hash_params *params, u32 const *m, int *k) { params->h2 = hash_64_generic(*params->h64, *k); #if HAVE_ARCH_HASH_64 == 1 - if (params->h1 != params->h2) { - pr_err("hash_64(%#llx, %d) = %#x != hash_64_generic() = %#x", - *params->h64, *k, params->h1, params->h2); - return false; - } + KUNIT_EXPECT_EQ_MSG(test, params->h1, params->h2, + "hash_64(%#llx, %d) = %#x != hash_64_generic() = %#x", + *params->h64, *k, params->h1, params->h2); #else - if (params->h2 > *m) { - pr_err("hash_64_generic(%#llx, %d) = %#x > %#x", - *params->h64, *k, params->h1, *m); - return false; - } + KUNIT_EXPECT_LE_MSG(test, params->h1, params->h2, + "hash_64_generic(%#llx, %d) = %#x > %#x", + *params->h64, *k, params->h1, *m); #endif - return true; } #endif @@ -112,8 +102,8 @@ test_int_hash_64(struct test_hash_params *params, u32 const *m, int *k) * inline, the code being tested is actually in the module, and you can * recompile and re-test the module without rebooting. */ -static bool __init -test_int_hash(unsigned long long h64, u32 hash_or[2][33]) +static void __init +test_int_hash(struct kunit *test, unsigned long long h64, u32 hash_or[2][33]) { int k; struct test_hash_params params = { &h64, (u32)h64, 0, 0, hash_or }; @@ -121,8 +111,7 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) /* Test __hash32 */ hash_or[0][0] |= params.h1 = __hash_32(params.h0); #ifdef HAVE_ARCH__HASH_32 - if (!test_int__hash_32(¶ms)) - return false; + test_int__hash_32(test, ¶ms); #endif /* Test k = 1..32 bits */ @@ -131,29 +120,24 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) /* Test hash_32 */ hash_or[0][k] |= params.h1 = hash_32(params.h0, k); - if (params.h1 > m) { - pr_err("hash_32(%#x, %d) = %#x > %#x", params.h0, k, params.h1, m); - return false; - } + KUNIT_EXPECT_LE_MSG(test, params.h1, m, + "hash_32(%#x, %d) = %#x > %#x", + params.h0, k, params.h1, m); /* Test hash_64 */ hash_or[1][k] |= params.h1 = hash_64(h64, k); - if (params.h1 > m) { - pr_err("hash_64(%#llx, %d) = %#x > %#x", h64, k, params.h1, m); - return false; - } + KUNIT_EXPECT_LE_MSG(test, params.h1, m, + "hash_64(%#llx, %d) = %#x > %#x", + h64, k, params.h1, m); #ifdef HAVE_ARCH_HASH_64 - if (!test_int_hash_64(¶ms, &m, &k)) - return false; + test_int_hash_64(test, ¶ms, &m, &k); #endif } - - return true; } #define SIZE 256 /* Run time is cubic in SIZE */ -static int __init test_string_or(void) +static void __init test_string_or(struct kunit *test) { char buf[SIZE+1]; u32 string_or = 0; @@ -173,20 +157,15 @@ static int __init test_string_or(void) } /* j */ /* The OR of all the hash values should cover all the bits */ - if (~string_or) { - pr_err("OR of all string hash results = %#x != %#x", - string_or, -1u); - return -EINVAL; - } - - return 0; + KUNIT_EXPECT_FALSE_MSG(test, ~string_or, + "OR of all string hash results = %#x != %#x", + string_or, -1u); } -static int __init test_hash_or(void) +static void __init test_hash_or(struct kunit *test) { char buf[SIZE+1]; u32 hash_or[2][33] = { { 0, } }; - unsigned tests = 0; unsigned long long h64 = 0; int i, j; @@ -201,39 +180,27 @@ static int __init test_hash_or(void) u32 h0 = full_name_hash(buf+i, buf+i, j-i); /* Check that hashlen_string gets the length right */ - if (hashlen_len(hashlen) != j-i) { - pr_err("hashlen_string(%d..%d) returned length" - " %u, expected %d", - i, j, hashlen_len(hashlen), j-i); - return -EINVAL; - } + KUNIT_EXPECT_EQ_MSG(test, hashlen_len(hashlen), j-i, + "hashlen_string(%d..%d) returned length %u, expected %d", + i, j, hashlen_len(hashlen), j-i); /* Check that the hashes match */ - if (hashlen_hash(hashlen) != h0) { - pr_err("hashlen_string(%d..%d) = %08x != " - "full_name_hash() = %08x", - i, j, hashlen_hash(hashlen), h0); - return -EINVAL; - } + KUNIT_EXPECT_EQ_MSG(test, hashlen_hash(hashlen), h0, + "hashlen_string(%d..%d) = %08x != full_name_hash() = %08x", + i, j, hashlen_hash(hashlen), h0); h64 = h64 << 32 | h0; /* For use with hash_64 */ - if (!test_int_hash(h64, hash_or)) - return -EINVAL; - tests++; + test_int_hash(test, h64, hash_or); } /* i */ } /* j */ - if (~hash_or[0][0]) { - pr_err("OR of all __hash_32 results = %#x != %#x", - hash_or[0][0], -1u); - return -EINVAL; - } + KUNIT_EXPECT_FALSE_MSG(test, ~hash_or[0][0], + "OR of all __hash_32 results = %#x != %#x", + hash_or[0][0], -1u); #ifdef HAVE_ARCH__HASH_32 #if HAVE_ARCH__HASH_32 != 1 /* Test is pointless if results match */ - if (~hash_or[1][0]) { - pr_err("OR of all __hash_32_generic results = %#x != %#x", - hash_or[1][0], -1u); - return -EINVAL; - } + KUNIT_EXPECT_FALSE_MSG(test, ~hash_or[1][0], + "OR of all __hash_32_generic results = %#x != %#x", + hash_or[1][0], -1u); #endif #endif @@ -241,65 +208,27 @@ static int __init test_hash_or(void) for (i = 1; i <= 32; i++) { u32 const m = ((u32)2 << (i-1)) - 1; /* Low i bits set */ - if (hash_or[0][i] != m) { - pr_err("OR of all hash_32(%d) results = %#x " - "(%#x expected)", i, hash_or[0][i], m); - return -EINVAL; - } - if (hash_or[1][i] != m) { - pr_err("OR of all hash_64(%d) results = %#x " - "(%#x expected)", i, hash_or[1][i], m); - return -EINVAL; - } + KUNIT_EXPECT_EQ_MSG(test, hash_or[0][i], m, + "OR of all hash_32(%d) results = %#x (%#x expected)", + i, hash_or[0][i], m); + KUNIT_EXPECT_EQ_MSG(test, hash_or[1][i], m, + "OR of all hash_64(%d) results = %#x (%#x expected)", + i, hash_or[1][i], m); } - - pr_notice("%u tests passed.", tests); - - return 0; -} - -static void __init notice_skipped_tests(void) -{ - /* Issue notices about skipped tests. */ -#ifdef HAVE_ARCH__HASH_32 -#if HAVE_ARCH__HASH_32 != 1 - pr_info("__hash_32() is arch-specific; not compared to generic."); -#endif -#else - pr_info("__hash_32() has no arch implementation to test."); -#endif -#ifdef HAVE_ARCH_HASH_64 -#if HAVE_ARCH_HASH_64 != 1 - pr_info("hash_64() is arch-specific; not compared to generic."); -#endif -#else - pr_info("hash_64() has no arch implementation to test."); -#endif } -static int __init -test_hash_init(void) -{ - int ret; - - ret = test_string_or(); - if (ret < 0) - return ret; - - ret = test_hash_or(); - if (ret < 0) - return ret; - - notice_skipped_tests(); +static struct kunit_case hash_test_cases[] __refdata = { + KUNIT_CASE(test_string_or), + KUNIT_CASE(test_hash_or), + {} +}; - return ret; -} +static struct kunit_suite hash_test_suite = { + .name = "hash", + .test_cases = hash_test_cases, +}; -static void __exit test_hash_exit(void) -{ -} -module_init(test_hash_init); /* Does everything */ -module_exit(test_hash_exit); /* Does nothing */ +kunit_test_suite(hash_test_suite); MODULE_LICENSE("GPL");