From nobody Wed Apr 8 01:34:10 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A3E6C43217 for ; Fri, 21 Oct 2022 13:45:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231223AbiJUNpk (ORCPT ); Fri, 21 Oct 2022 09:45:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231186AbiJUNpe (ORCPT ); Fri, 21 Oct 2022 09:45:34 -0400 Received: from mail.sf-mail.de (mail.sf-mail.de [IPv6:2a01:4f8:1c17:6fae:616d:6c69:616d:6c69]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80B8F9A2A0 for ; Fri, 21 Oct 2022 06:45:28 -0700 (PDT) Received: (qmail 18684 invoked from network); 21 Oct 2022 13:44:36 -0000 Received: from p200300cf07087500581cdcfffecf391f.dip0.t-ipconnect.de ([2003:cf:708:7500:581c:dcff:fecf:391f]:60600 HELO eto.sf-tec.de) (auth=eike@sf-mail.de) by mail.sf-mail.de (Qsmtpd 0.38dev) with (TLS_AES_256_GCM_SHA384 encrypted) ESMTPSA for ; Fri, 21 Oct 2022 15:44:36 +0200 From: Rolf Eike Beer To: Thomas Graf , Herbert Xu , Florian Westphal Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "Jason A. Donenfeld" Subject: [PATCH] rhashtable: make test actually random Date: Fri, 21 Oct 2022 15:45:23 +0200 Message-ID: <12102372.O9o76ZdvQC@eto.sf-tec.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The "random rhlist add/delete operations" actually wasn't very random, as a= ll cases tested the same bit. Since the later parts of this loop depend on the first case execute this unconditionally, and then test on different bits fo= r the remaining tests. While at it only request as much random bits as are actual= ly used. Signed-off-by: Rolf Eike Beer --- lib/test_rhashtable.c | 58 ++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c index b358a74ed7ed..f2ba5787055a 100644 --- a/lib/test_rhashtable.c +++ b/lib/test_rhashtable.c @@ -369,18 +369,10 @@ static int __init test_rhltable(unsigned int entries) pr_info("test %d random rhlist add/delete operations\n", entries); for (j =3D 0; j < entries; j++) { u32 i =3D prandom_u32_max(entries); - u32 prand =3D get_random_u32(); + u32 prand =3D prandom_u32_max(4); =20 cond_resched(); =20 - if (prand =3D=3D 0) - prand =3D get_random_u32(); - - if (prand & 1) { - prand >>=3D 1; - continue; - } - err =3D rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht_= params); if (test_bit(i, obj_in_table)) { clear_bit(i, obj_in_table); @@ -393,35 +385,29 @@ static int __init test_rhltable(unsigned int entries) } =20 if (prand & 1) { - prand >>=3D 1; - continue; - } - - err =3D rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rht_= params); - if (err =3D=3D 0) { - if (WARN(test_and_set_bit(i, obj_in_table), "succeeded to insert same o= bject %d", i)) - continue; - } else { - if (WARN(!test_bit(i, obj_in_table), "failed to insert object %d", i)) - continue; - } - - if (prand & 1) { - prand >>=3D 1; - continue; + err =3D rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rht= _params); + if (err =3D=3D 0) { + if (WARN(test_and_set_bit(i, obj_in_table), "succeeded to insert same = object %d", i)) + continue; + } else { + if (WARN(!test_bit(i, obj_in_table), "failed to insert object %d", i)) + continue; + } } =20 - i =3D prandom_u32_max(entries); - if (test_bit(i, obj_in_table)) { - err =3D rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rht= _params); - WARN(err, "cannot remove element at slot %d", i); - if (err =3D=3D 0) - clear_bit(i, obj_in_table); - } else { - err =3D rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rht= _params); - WARN(err, "failed to insert object %d", i); - if (err =3D=3D 0) - set_bit(i, obj_in_table); + if (prand & 2) { + i =3D prandom_u32_max(entries); + if (test_bit(i, obj_in_table)) { + err =3D rhltable_remove(&rhlt, &rhl_test_objects[i].list_node, test_rh= t_params); + WARN(err, "cannot remove element at slot %d", i); + if (err =3D=3D 0) + clear_bit(i, obj_in_table); + } else { + err =3D rhltable_insert(&rhlt, &rhl_test_objects[i].list_node, test_rh= t_params); + WARN(err, "failed to insert object %d", i); + if (err =3D=3D 0) + set_bit(i, obj_in_table); + } } } =20 --=20 2.35.3