Commit fd0a1462 authored by Isabella Basso's avatar Isabella Basso Committed by Linus Torvalds

hash.h: remove unused define directive

Patch series "test_hash.c: refactor into KUnit", v3.

We refactored the lib/test_hash.c file into KUnit as part of the student
group LKCAMP [1] introductory hackathon for kernel development.

This test was pointed to our group by Daniel Latypov [2], so its full
conversion into a pure KUnit test was our goal in this patch series, but
we ran into many problems relating to it not being split as unit tests,
which complicated matters a bit, as the reasoning behind the original
tests is quite cryptic for those unfamiliar with hash implementations.

Some interesting developments we'd like to highlight are:

 - In patch 1/5 we noticed that there was an unused define directive
   that could be removed.

 - In patch 4/5 we noticed how stringhash and hash tests are all under
   the lib/test_hash.c file, which might cause some confusion, and we
   also broke those kernel config entries up.

Overall KUnit developments have been made in the other patches in this
series:

In patches 2/5, 3/5 and 5/5 we refactored the lib/test_hash.c file so as
to make it more compatible with the KUnit style, whilst preserving the
original idea of the maintainer who designed it (i.e.  George Spelvin),
which might be undesirable for unit tests, but we assume it is enough
for a first patch.

This patch (of 5):

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/

[akpm@linux-foundation.org: hash_32_generic() becomes hash_32()]

Link: https://lkml.kernel.org/r/20211208183711.390454-1-isabbasso@riseup.net
Link: https://lkml.kernel.org/r/20211208183711.390454-2-isabbasso@riseup.netReviewed-by: default avatarDavid Gow <davidgow@google.com>
Tested-by: default avatarDavid Gow <davidgow@google.com>
Co-developed-by: default avatarAugusto Durães Camargo <augusto.duraes33@gmail.com>
Signed-off-by: default avatarAugusto Durães Camargo <augusto.duraes33@gmail.com>
Co-developed-by: default avatarEnzo Ferreira <ferreiraenzoa@gmail.com>
Signed-off-by: default avatarEnzo Ferreira <ferreiraenzoa@gmail.com>
Signed-off-by: default avatarIsabella Basso <isabbasso@riseup.net>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Daniel Latypov <dlatypov@google.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Cc: kernel test robot <lkp@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a31f9336
...@@ -217,8 +217,7 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, ...@@ -217,8 +217,7 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
* the port number must be in the Dynamic Ports range * the port number must be in the Dynamic Ports range
* (0xc000 - 0xffff). * (0xc000 - 0xffff).
*/ */
qp->src_port = RXE_ROCE_V2_SPORT + qp->src_port = RXE_ROCE_V2_SPORT + (hash_32(qp_num(qp), 14) & 0x3fff);
(hash_32_generic(qp_num(qp), 14) & 0x3fff);
qp->sq.max_wr = init->cap.max_send_wr; qp->sq.max_wr = init->cap.max_send_wr;
/* These caps are limited by rxe_qp_chk_cap() done by the caller */ /* These caps are limited by rxe_qp_chk_cap() done by the caller */
......
...@@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val) ...@@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val)
return val * GOLDEN_RATIO_32; return val * GOLDEN_RATIO_32;
} }
#ifndef HAVE_ARCH_HASH_32 static inline u32 hash_32(u32 val, unsigned int bits)
#define hash_32 hash_32_generic
#endif
static inline u32 hash_32_generic(u32 val, unsigned int bits)
{ {
/* High bits are more random, so use them. */ /* High bits are more random, so use them. */
return __hash_32(val) >> (32 - bits); return __hash_32(val) >> (32 - bits);
......
...@@ -94,22 +94,7 @@ test_int_hash(unsigned long long h64, u32 hash_or[2][33]) ...@@ -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); pr_err("hash_32(%#x, %d) = %#x > %#x", h0, k, h1, m);
return false; 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 */ /* Test hash_64 */
hash_or[1][k] |= h1 = hash_64(h64, k); hash_or[1][k] |= h1 = hash_64(h64, k);
if (h1 > m) { if (h1 > m) {
...@@ -227,13 +212,6 @@ test_hash_init(void) ...@@ -227,13 +212,6 @@ test_hash_init(void)
#else #else
pr_info("__hash_32() has no arch implementation to test."); pr_info("__hash_32() has no arch implementation to test.");
#endif #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 #ifdef HAVE_ARCH_HASH_64
#if HAVE_ARCH_HASH_64 != 1 #if HAVE_ARCH_HASH_64 != 1
pr_info("hash_64() is arch-specific; not compared to generic."); pr_info("hash_64() is arch-specific; not compared to generic.");
......
...@@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val) ...@@ -62,10 +62,7 @@ static inline u32 __hash_32_generic(u32 val)
return val * GOLDEN_RATIO_32; return val * GOLDEN_RATIO_32;
} }
#ifndef HAVE_ARCH_HASH_32 static inline u32 hash_32(u32 val, unsigned int bits)
#define hash_32 hash_32_generic
#endif
static inline u32 hash_32_generic(u32 val, unsigned int bits)
{ {
/* High bits are more random, so use them. */ /* High bits are more random, so use them. */
return __hash_32(val) >> (32 - bits); return __hash_32(val) >> (32 - bits);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment