From nobody Sun Apr 26 08:21:15 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 491DEC43334 for ; Sat, 9 Jul 2022 03:20:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229541AbiGIDUS (ORCPT ); Fri, 8 Jul 2022 23:20:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50436 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229535AbiGIDUM (ORCPT ); Fri, 8 Jul 2022 23:20:12 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A5F666B84 for ; Fri, 8 Jul 2022 20:20:11 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-31ce88f9ab8so4308267b3.16 for ; Fri, 08 Jul 2022 20:20:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=NSq+v/AerT1u/xIehHjLvE9afDtIY4Z4+byU67UBipA=; b=C1hGF38gKNg0xkmrhQb1GK6dUD3uqQPk+WcY/onbwQ/wLlkz0YYTjxf5Mtvth4iZHV Erjj5X5XWxHLFMN4taQtCwYgLvyrDTcgwPRd4/BkMPOMwDeNSEooD2Wk+LbDFgoFsGBw +fP03GWC98UKBmCUkHLgcXaWo80ni8EZc6Y8vVrxgWlWj4b/Ak0TMO9CcsL6mmRQ+wPC Phfi+KeJ89SFk2iVoaC0kcc3wX2uBLedkSXTiiMfvBMS3k0Iqb11qXZcxdDlGAiuNv6O h4fv2NkBCIu4kTho6sNWTArPkFSJylF0UVLzAACI1fxP62/HMibHguGjnnzIVDLv8FHo Hozg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=NSq+v/AerT1u/xIehHjLvE9afDtIY4Z4+byU67UBipA=; b=3VlVnduBgRYOgMBvNyDrWJ2B0pmbZis8I3beZ9mMPnbXuiBos3jYttMTjpaU0bm8nf 9OD81Zg/WpxlUEmUwgIGuZiyY0lVBEUTcfKKIGLtC95jv4wmyj+Nmq05ao2wvCH4TNL4 wdUGLYFrTiPOKB+Wrj0YsBFQLYm14joIMb8Tgw/Se9xfO3gi7MK+s4Eg11bznS2Em0Ij Qg5m34ZP94r6eyDVUgiCIS/ym/DOt7M5xR9cHgsb2qoJzFMJbI2H0t3YuKBMFE5p+0An a6AZaEYwATwPd41xy3dcXn6cdxLXMWbKplzAdvNo5XKs0jFsxsA0TemLlHb/jIA/NzRH j1PA== X-Gm-Message-State: AJIora+MqRIFknO4GuHXFMb+jlJGjOYJh3++swro0K3CX/Setw2McXcS jTcP2PocczNZPUf+OBKSbzrqojdWyo3e0Q== X-Google-Smtp-Source: AGRyM1vou50vKvBnLbzyy4WqV2zZGxb2PYevY4SXQ9Hp/LqGCgVoWf1NqFWpAYI7GfNkaDyOVIsw+0/VrA1Jbw== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a0d:e2d2:0:b0:31c:82a3:2bc8 with SMTP id l201-20020a0de2d2000000b0031c82a32bc8mr7611840ywe.304.1657336810994; Fri, 08 Jul 2022 20:20:10 -0700 (PDT) Date: Sat, 9 Jul 2022 11:19:57 +0800 In-Reply-To: <20220709032001.819487-1-davidgow@google.com> Message-Id: <20220709032001.819487-2-davidgow@google.com> Mime-Version: 1.0 References: <20220709032001.819487-1-davidgow@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v4 1/5] kunit: unify module and builtin suite definitions From: David Gow To: Brendan Higgins , Luis Chamberlain , Jeremy Kerr , Daniel Latypov , Shuah Khan , Andrew Jeffery , Mika Westerberg , Andra Paraschiv , Longpeng , Greg KH Cc: kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "=?UTF-8?q?Ma=C3=ADra=20Canal?=" , linux-mmc@vger.kernel.org, linux-aspeed@lists.ozlabs.org, openbmc@lists.ozlabs.org, linux-usb@vger.kernel.org, linux-modules@vger.kernel.org, Matt Johnston , David Gow Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeremy Kerr Currently, KUnit runs built-in tests and tests loaded from modules differently. For built-in tests, the kunit_test_suite{,s}() macro adds a list of suites in the .kunit_test_suites linker section. However, for kernel modules, a module_init() function is used to run the test suites. This causes problems if tests are included in a module which already defines module_init/exit_module functions, as they'll conflict with the kunit-provided ones. This change removes the kunit-defined module inits, and instead parses the kunit tests from their own section in the module. After module init, we call __kunit_test_suites_init() on the contents of that section, which prepares and runs the suite. This essentially unifies the module- and non-module kunit init formats. Tested-by: Ma=C3=ADra Canal Reviewed-by: Brendan Higgins Signed-off-by: Jeremy Kerr Signed-off-by: Daniel Latypov Signed-off-by: David Gow --- Changes since v3: https://lore.kernel.org/linux-kselftest/20220625050838.1618469-2-davidgow@g= oogle.com/ - Rebase on top of the TAINT_TEST patch series. This should now apply cleanly on top of the kunit branch: https://lore.kernel.org/linux-kselftest/20220708044847.531566-1-davidgow@= google.com/T/#u - Add Brendan's Reviewed-by tags. No changes to this patch since v2: https://lore.kernel.org/linux-kselftest/20220621085345.603820-2-davidgow@go= ogle.com/ Changes since v1: https://lore.kernel.org/linux-kselftest/20220618090310.1174932-2-davidgow@g= oogle.com/ - Fix a compile error with CONFIG_KUNIT=3Dm (Thanks Christophe Leroy, kernel test robot) - Add Ma=C3=ADra's Tested-by. Changes since RFC: https://lore.kernel.org/linux-kselftest/101d12fc9250b7a445ff50a9e7a25cd74d0= e16eb.camel@codeconstruct.com.au/ - I've basically just rebased it, tweaked some wording, and it made it still compile when CONFIG_MODULES is not set. --- include/kunit/test.h | 49 +++++---------------------------------- include/linux/module.h | 5 ++++ kernel/module/main.c | 6 +++++ lib/kunit/test.c | 52 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 68 insertions(+), 44 deletions(-) diff --git a/include/kunit/test.h b/include/kunit/test.h index 7646d1bcf685..cb155d3da284 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -250,42 +250,9 @@ static inline int kunit_run_all_tests(void) } #endif /* IS_BUILTIN(CONFIG_KUNIT) */ =20 -#ifdef MODULE -/** - * kunit_test_suites_for_module() - used to register one or more - * &struct kunit_suite with KUnit. - * - * @__suites: a statically allocated list of &struct kunit_suite. - * - * Registers @__suites with the test framework. See &struct kunit_suite for - * more information. - * - * If a test suite is built-in, module_init() gets translated into - * an initcall which we don't want as the idea is that for builtins - * the executor will manage execution. So ensure we do not define - * module_{init|exit} functions for the builtin case when registering - * suites via kunit_test_suites() below. - */ -#define kunit_test_suites_for_module(__suites) \ - static int __init kunit_test_suites_init(void) \ - { \ - return __kunit_test_suites_init(__suites); \ - } \ - module_init(kunit_test_suites_init); \ - \ - static void __exit kunit_test_suites_exit(void) \ - { \ - return __kunit_test_suites_exit(__suites); \ - } \ - module_exit(kunit_test_suites_exit) \ - MODULE_INFO(test, "Y"); -#else -#define kunit_test_suites_for_module(__suites) -#endif /* MODULE */ - #define __kunit_test_suites(unique_array, unique_suites, ...) \ + MODULE_INFO(test, "Y"); \ static struct kunit_suite *unique_array[] =3D { __VA_ARGS__, NULL }; \ - kunit_test_suites_for_module(unique_array); \ static struct kunit_suite **unique_suites \ __used __section(".kunit_test_suites") =3D unique_array =20 @@ -295,16 +262,12 @@ static inline int kunit_run_all_tests(void) * * @__suites: a statically allocated list of &struct kunit_suite. * - * Registers @suites with the test framework. See &struct kunit_suite for - * more information. - * - * When builtin, KUnit tests are all run via executor; this is done - * by placing the array of struct kunit_suite * in the .kunit_test_suites - * ELF section. + * Registers @suites with the test framework. + * This is done by placing the array of struct kunit_suite * in the + * .kunit_test_suites ELF section. * - * An alternative is to build the tests as a module. Because modules do n= ot - * support multiple initcall()s, we need to initialize an array of suites = for a - * module. + * When builtin, KUnit tests are all run via the executor at boot, and when + * built as a module, they run on module load. * */ #define kunit_test_suites(__suites...) \ diff --git a/include/linux/module.h b/include/linux/module.h index abd9fa916b7d..2490223c975d 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -505,6 +505,11 @@ struct module { int num_static_call_sites; struct static_call_site *static_call_sites; #endif +#if IS_ENABLED(CONFIG_KUNIT) + int num_kunit_suites; + struct kunit_suite ***kunit_suites; +#endif + =20 #ifdef CONFIG_LIVEPATCH bool klp; /* Is this a livepatch module? */ diff --git a/kernel/module/main.c b/kernel/module/main.c index fed58d30725d..4542db7cdf54 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2087,6 +2087,12 @@ static int find_module_sections(struct module *mod, = struct load_info *info) sizeof(*mod->static_call_sites), &mod->num_static_call_sites); #endif +#ifdef CONFIG_KUNIT + mod->kunit_suites =3D section_objs(info, ".kunit_test_suites", + sizeof(*mod->kunit_suites), + &mod->num_kunit_suites); +#endif + mod->extable =3D section_objs(info, "__ex_table", sizeof(*mod->extable), &mod->num_exentries); =20 diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 8b11552dc215..246645eb3cef 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -613,6 +614,49 @@ void __kunit_test_suites_exit(struct kunit_suite **sui= tes) } EXPORT_SYMBOL_GPL(__kunit_test_suites_exit); =20 +#ifdef CONFIG_MODULES +static void kunit_module_init(struct module *mod) +{ + unsigned int i; + + for (i =3D 0; i < mod->num_kunit_suites; i++) + __kunit_test_suites_init(mod->kunit_suites[i]); +} + +static void kunit_module_exit(struct module *mod) +{ + unsigned int i; + + for (i =3D 0; i < mod->num_kunit_suites; i++) + __kunit_test_suites_exit(mod->kunit_suites[i]); +} + +static int kunit_module_notify(struct notifier_block *nb, unsigned long va= l, + void *data) +{ + struct module *mod =3D data; + + switch (val) { + case MODULE_STATE_LIVE: + kunit_module_init(mod); + break; + case MODULE_STATE_GOING: + kunit_module_exit(mod); + break; + case MODULE_STATE_COMING: + case MODULE_STATE_UNFORMED: + break; + } + + return 0; +} + +static struct notifier_block kunit_mod_nb =3D { + .notifier_call =3D kunit_module_notify, + .priority =3D 0, +}; +#endif + struct kunit_kmalloc_array_params { size_t n; size_t size; @@ -707,13 +751,19 @@ EXPORT_SYMBOL_GPL(kunit_cleanup); static int __init kunit_init(void) { kunit_debugfs_init(); - +#ifdef CONFIG_MODULES + return register_module_notifier(&kunit_mod_nb); +#else return 0; +#endif } late_initcall(kunit_init); =20 static void __exit kunit_exit(void) { +#ifdef CONFIG_MODULES + unregister_module_notifier(&kunit_mod_nb); +#endif kunit_debugfs_cleanup(); } module_exit(kunit_exit); --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 26 08:21:15 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 BA3DAC43334 for ; Sat, 9 Jul 2022 03:20:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229567AbiGIDUf (ORCPT ); Fri, 8 Jul 2022 23:20:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50850 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229535AbiGIDUZ (ORCPT ); Fri, 8 Jul 2022 23:20:25 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 100007CB41 for ; Fri, 8 Jul 2022 20:20:16 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-31cdce3ed04so4391617b3.13 for ; Fri, 08 Jul 2022 20:20:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=i1z9JwLS2Svidh/OxQ5D3ZmkSw6dh/anAXJa8wSqU7Y=; b=sr1ppeMMIZsASf5i/3usqZZOChUows2U8ZZVHLozy3qvkuq0BPOLuZghlFFUUD9Ad/ PoJ9uxqayfkWuYUqAOBino830HocX1B+V9xCK24wE8JisGTuT96q++89pKX4DDDkHJJd qnl+Rf93UoJwBeX/ZmQED5CpEQea6uXdSN+vFGPBlc/jlq8hOeuBJPDRZfijEdGNzCKL 3DQqRS549DIV1gy2pwwUrUPNOdEoKmMDt5coSOgKk5GA48UbR9Dcc4ywGbGUzj2Vav01 rY+qp3TUWXATrMTPLXQm3aZqeGQt1jUgLOaf5qXyxSgvxYnGBVCF7ERt+1uQ1+vW8UDh UIXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=i1z9JwLS2Svidh/OxQ5D3ZmkSw6dh/anAXJa8wSqU7Y=; b=h97SrR6qSCMdPZDM4wuLPmQ0Llc5dd1VM/vyB0dgMJwBMgwoPrhm2QHhrFsNngW7kf hzQGn4g9UwluqLnCNxAfS76HpzL2RXQ0Oq4sX2b5tfLRUKZEGpkcH3Px/09s0YmAwvXo Ud+HCwRdi7+R6TThlEXbZOzgRrN6JVNs4R9/yC2P7ICN37YnICQJl1B1yxASVzSuXHxe BC7csVPCDVckVxJhAdZ8VBjomkPTCYU8Rd2RKdhw4tDeK0sLs6lSimVl/9f0lBNdBsaJ AcoDQW70k41xj1r+2G0dducVR3HNHRDQyyX9FRonwNdWPYvR5+wiknUBEOI0G/CgHTy2 BFEg== X-Gm-Message-State: AJIora/B3zzk/9ThPVlxLnGIA2v3NholCcbavPgBkMoJBFDqw2VV3FWn kFjtoJLdCmSFRYxfPtVu3Buungzn2/72aQ== X-Google-Smtp-Source: AGRyM1vtU8zatm/+d/TKKpst0SOR629uhiNZlrmFmyjvtrkiq7vDOebshsbm/T4rIyO1AAmtqcKk2opxCqnuBg== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a0d:eb44:0:b0:31c:88fc:ee1a with SMTP id u65-20020a0deb44000000b0031c88fcee1amr7558794ywe.90.1657336815347; Fri, 08 Jul 2022 20:20:15 -0700 (PDT) Date: Sat, 9 Jul 2022 11:19:58 +0800 In-Reply-To: <20220709032001.819487-1-davidgow@google.com> Message-Id: <20220709032001.819487-3-davidgow@google.com> Mime-Version: 1.0 References: <20220709032001.819487-1-davidgow@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v4 2/5] kunit: flatten kunit_suite*** to kunit_suite** in .kunit_test_suites From: David Gow To: Brendan Higgins , Luis Chamberlain , Jeremy Kerr , Daniel Latypov , Shuah Khan , Andrew Jeffery , Mika Westerberg , Andra Paraschiv , Longpeng , Greg KH Cc: kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "=?UTF-8?q?Ma=C3=ADra=20Canal?=" , linux-mmc@vger.kernel.org, linux-aspeed@lists.ozlabs.org, openbmc@lists.ozlabs.org, linux-usb@vger.kernel.org, linux-modules@vger.kernel.org, Matt Johnston , David Gow Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Daniel Latypov We currently store kunit suites in the .kunit_test_suites ELF section as a `struct kunit_suite***` (modulo some `const`s). For every test file, we store a struct kunit_suite** NULL-terminated array. This adds quite a bit of complexity to the test filtering code in the executor. Instead, let's just make the .kunit_test_suites section contain a single giant array of struct kunit_suite pointers, which can then be directly manipulated. This array is not NULL-terminated, and so none of the test filtering code needs to NULL-terminate anything. Tested-by: Ma=C3=ADra Canal Reviewed-by: Brendan Higgins Signed-off-by: Daniel Latypov Co-developed-by: David Gow Signed-off-by: David Gow --- Changes since v3: https://lore.kernel.org/linux-kselftest/20220625050838.1618469-3-davidgow@g= oogle.com/ - Rebase on top of the TAINT_TEST patch series. This should now apply cleanly on top of the kunit branch: https://lore.kernel.org/linux-kselftest/20220708044847.531566-1-davidgow@= google.com/T/#u - Add Brendan's Reviewed-by tags. No changes to this patch since v2: https://lore.kernel.org/linux-kselftest/20220621085345.603820-3-davidgow@go= ogle.com/ Changes since v1: https://lore.kernel.org/linux-kselftest/20220618090310.1174932-3-davidgow@g= oogle.com/ - No longer NULL-terminate generated suite_sets - Add Ma=C3=ADra's Tested-by tag. Changes since RFC: https://lore.kernel.org/linux-kselftest/20211013191320.2490913-1-dlatypov@g= oogle.com/ - Actually flatten the .kunit_test_suites ELF section, rather than constructing the flattened version at runtime. --- include/kunit/test.h | 13 ++-- include/linux/module.h | 2 +- lib/kunit/executor.c | 115 ++++++++---------------------- lib/kunit/executor_test.c | 144 +++++++++++--------------------------- lib/kunit/test.c | 18 ++--- 5 files changed, 82 insertions(+), 210 deletions(-) diff --git a/include/kunit/test.h b/include/kunit/test.h index cb155d3da284..c958855681cc 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -237,9 +237,9 @@ size_t kunit_suite_num_test_cases(struct kunit_suite *s= uite); unsigned int kunit_test_case_num(struct kunit_suite *suite, struct kunit_case *test_case); =20 -int __kunit_test_suites_init(struct kunit_suite * const * const suites); +int __kunit_test_suites_init(struct kunit_suite * const * const suites, in= t num_suites); =20 -void __kunit_test_suites_exit(struct kunit_suite **suites); +void __kunit_test_suites_exit(struct kunit_suite **suites, int num_suites); =20 #if IS_BUILTIN(CONFIG_KUNIT) int kunit_run_all_tests(void); @@ -250,11 +250,11 @@ static inline int kunit_run_all_tests(void) } #endif /* IS_BUILTIN(CONFIG_KUNIT) */ =20 -#define __kunit_test_suites(unique_array, unique_suites, ...) \ +#define __kunit_test_suites(unique_array, ...) \ MODULE_INFO(test, "Y"); \ - static struct kunit_suite *unique_array[] =3D { __VA_ARGS__, NULL }; \ - static struct kunit_suite **unique_suites \ - __used __section(".kunit_test_suites") =3D unique_array + static struct kunit_suite *unique_array[] \ + __aligned(sizeof(struct kunit_suite *)) \ + __used __section(".kunit_test_suites") =3D { __VA_ARGS__ } =20 /** * kunit_test_suites() - used to register one or more &struct kunit_suite @@ -272,7 +272,6 @@ static inline int kunit_run_all_tests(void) */ #define kunit_test_suites(__suites...) \ __kunit_test_suites(__UNIQUE_ID(array), \ - __UNIQUE_ID(suites), \ ##__suites) =20 #define kunit_test_suite(suite) kunit_test_suites(&suite) diff --git a/include/linux/module.h b/include/linux/module.h index 2490223c975d..518296ea7f73 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -507,7 +507,7 @@ struct module { #endif #if IS_ENABLED(CONFIG_KUNIT) int num_kunit_suites; - struct kunit_suite ***kunit_suites; + struct kunit_suite **kunit_suites; #endif =20 =20 diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 572f64e0a41a..6c489d6c5e5d 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -9,8 +9,8 @@ * These symbols point to the .kunit_test_suites section and are defined in * include/asm-generic/vmlinux.lds.h, and consequently must be extern. */ -extern struct kunit_suite * const * const __kunit_suites_start[]; -extern struct kunit_suite * const * const __kunit_suites_end[]; +extern struct kunit_suite * const __kunit_suites_start[]; +extern struct kunit_suite * const __kunit_suites_end[]; =20 #if IS_BUILTIN(CONFIG_KUNIT) =20 @@ -90,62 +90,18 @@ kunit_filter_tests(const struct kunit_suite *const suit= e, const char *test_glob) static char *kunit_shutdown; core_param(kunit_shutdown, kunit_shutdown, charp, 0644); =20 -static struct kunit_suite * const * -kunit_filter_subsuite(struct kunit_suite * const * const subsuite, - struct kunit_test_filter *filter) -{ - int i, n =3D 0; - struct kunit_suite **filtered, *filtered_suite; - - n =3D 0; - for (i =3D 0; subsuite[i]; ++i) { - if (glob_match(filter->suite_glob, subsuite[i]->name)) - ++n; - } - - if (n =3D=3D 0) - return NULL; - - filtered =3D kmalloc_array(n + 1, sizeof(*filtered), GFP_KERNEL); - if (!filtered) - return ERR_PTR(-ENOMEM); - - n =3D 0; - for (i =3D 0; subsuite[i] !=3D NULL; ++i) { - if (!glob_match(filter->suite_glob, subsuite[i]->name)) - continue; - filtered_suite =3D kunit_filter_tests(subsuite[i], filter->test_glob); - if (IS_ERR(filtered_suite)) - return ERR_CAST(filtered_suite); - else if (filtered_suite) - filtered[n++] =3D filtered_suite; - } - filtered[n] =3D NULL; - - return filtered; -} - +/* Stores an array of suites, end points one past the end */ struct suite_set { - struct kunit_suite * const * const *start; - struct kunit_suite * const * const *end; + struct kunit_suite * const *start; + struct kunit_suite * const *end; }; =20 -static void kunit_free_subsuite(struct kunit_suite * const *subsuite) -{ - unsigned int i; - - for (i =3D 0; subsuite[i]; i++) - kfree(subsuite[i]); - - kfree(subsuite); -} - static void kunit_free_suite_set(struct suite_set suite_set) { - struct kunit_suite * const * const *suites; + struct kunit_suite * const *suites; =20 for (suites =3D suite_set.start; suites < suite_set.end; suites++) - kunit_free_subsuite(*suites); + kfree(*suites); kfree(suite_set.start); } =20 @@ -154,7 +110,7 @@ static struct suite_set kunit_filter_suites(const struc= t suite_set *suite_set, int *err) { int i; - struct kunit_suite * const **copy, * const *filtered_subsuite; + struct kunit_suite **copy, *filtered_suite; struct suite_set filtered; struct kunit_test_filter filter; =20 @@ -169,14 +125,19 @@ static struct suite_set kunit_filter_suites(const str= uct suite_set *suite_set, =20 kunit_parse_filter_glob(&filter, filter_glob); =20 - for (i =3D 0; i < max; ++i) { - filtered_subsuite =3D kunit_filter_subsuite(suite_set->start[i], &filter= ); - if (IS_ERR(filtered_subsuite)) { - *err =3D PTR_ERR(filtered_subsuite); + for (i =3D 0; &suite_set->start[i] !=3D suite_set->end; i++) { + if (!glob_match(filter.suite_glob, suite_set->start[i]->name)) + continue; + + filtered_suite =3D kunit_filter_tests(suite_set->start[i], filter.test_g= lob); + if (IS_ERR(filtered_suite)) { + *err =3D PTR_ERR(filtered_suite); return filtered; } - if (filtered_subsuite) - *copy++ =3D filtered_subsuite; + if (!filtered_suite) + continue; + + *copy++ =3D filtered_suite; } filtered.end =3D copy; =20 @@ -199,52 +160,33 @@ static void kunit_handle_shutdown(void) =20 } =20 -static void kunit_print_tap_header(struct suite_set *suite_set) -{ - struct kunit_suite * const * const *suites, * const *subsuite; - int num_of_suites =3D 0; - - for (suites =3D suite_set->start; suites < suite_set->end; suites++) - for (subsuite =3D *suites; *subsuite !=3D NULL; subsuite++) - num_of_suites++; - - pr_info("TAP version 14\n"); - pr_info("1..%d\n", num_of_suites); -} - static void kunit_exec_run_tests(struct suite_set *suite_set) { - struct kunit_suite * const * const *suites; + size_t num_suites =3D suite_set->end - suite_set->start; =20 - kunit_print_tap_header(suite_set); + pr_info("TAP version 14\n"); + pr_info("1..%zu\n", num_suites); =20 - for (suites =3D suite_set->start; suites < suite_set->end; suites++) - __kunit_test_suites_init(*suites); + __kunit_test_suites_init(suite_set->start, num_suites); } =20 static void kunit_exec_list_tests(struct suite_set *suite_set) { - unsigned int i; - struct kunit_suite * const * const *suites; + struct kunit_suite * const *suites; struct kunit_case *test_case; =20 /* Hack: print a tap header so kunit.py can find the start of KUnit outpu= t. */ pr_info("TAP version 14\n"); =20 for (suites =3D suite_set->start; suites < suite_set->end; suites++) - for (i =3D 0; (*suites)[i] !=3D NULL; i++) { - kunit_suite_for_each_test_case((*suites)[i], test_case) { - pr_info("%s.%s\n", (*suites)[i]->name, test_case->name); - } + kunit_suite_for_each_test_case((*suites), test_case) { + pr_info("%s.%s\n", (*suites)->name, test_case->name); } } =20 int kunit_run_all_tests(void) { - struct suite_set suite_set =3D { - .start =3D __kunit_suites_start, - .end =3D __kunit_suites_end, - }; + struct suite_set suite_set =3D {__kunit_suites_start, __kunit_suites_end}; int err =3D 0; =20 if (filter_glob_param) { @@ -262,11 +204,10 @@ int kunit_run_all_tests(void) else pr_err("kunit executor: unknown action '%s'\n", action_param); =20 - if (filter_glob_param) { /* a copy was made of each array */ + if (filter_glob_param) { /* a copy was made of each suite */ kunit_free_suite_set(suite_set); } =20 - out: kunit_handle_shutdown(); return err; diff --git a/lib/kunit/executor_test.c b/lib/kunit/executor_test.c index eac6ff480273..0cea31c27b23 100644 --- a/lib/kunit/executor_test.c +++ b/lib/kunit/executor_test.c @@ -9,8 +9,6 @@ #include =20 static void kfree_at_end(struct kunit *test, const void *to_free); -static void free_subsuite_at_end(struct kunit *test, - struct kunit_suite *const *to_free); static struct kunit_suite *alloc_fake_suite(struct kunit *test, const char *suite_name, struct kunit_case *test_cases); @@ -41,126 +39,80 @@ static void parse_filter_test(struct kunit *test) kfree(filter.test_glob); } =20 -static void filter_subsuite_test(struct kunit *test) +static void filter_suites_test(struct kunit *test) { - struct kunit_suite *subsuite[3] =3D {NULL, NULL, NULL}; - struct kunit_suite * const *filtered; - struct kunit_test_filter filter =3D { - .suite_glob =3D "suite2", - .test_glob =3D NULL, - }; + struct kunit_suite *subsuite[3] =3D {NULL, NULL}; + struct suite_set suite_set =3D {.start =3D subsuite, .end =3D &subsuite[2= ]}; + struct suite_set got; + int err =3D 0; =20 subsuite[0] =3D alloc_fake_suite(test, "suite1", dummy_test_cases); subsuite[1] =3D alloc_fake_suite(test, "suite2", dummy_test_cases); =20 /* Want: suite1, suite2, NULL -> suite2, NULL */ - filtered =3D kunit_filter_subsuite(subsuite, &filter); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered); - free_subsuite_at_end(test, filtered); + got =3D kunit_filter_suites(&suite_set, "suite2", &err); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, got.start); + KUNIT_ASSERT_EQ(test, err, 0); + kfree_at_end(test, got.start); =20 /* Validate we just have suite2 */ - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered[0]); - KUNIT_EXPECT_STREQ(test, (const char *)filtered[0]->name, "suite2"); - KUNIT_EXPECT_FALSE(test, filtered[1]); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, got.start[0]); + KUNIT_EXPECT_STREQ(test, (const char *)got.start[0]->name, "suite2"); + + /* Contains one element (end is 1 past end) */ + KUNIT_ASSERT_EQ(test, got.end - got.start, 1); } =20 -static void filter_subsuite_test_glob_test(struct kunit *test) +static void filter_suites_test_glob_test(struct kunit *test) { - struct kunit_suite *subsuite[3] =3D {NULL, NULL, NULL}; - struct kunit_suite * const *filtered; - struct kunit_test_filter filter =3D { - .suite_glob =3D "suite2", - .test_glob =3D "test2", - }; + struct kunit_suite *subsuite[3] =3D {NULL, NULL}; + struct suite_set suite_set =3D {.start =3D subsuite, .end =3D &subsuite[2= ]}; + struct suite_set got; + int err =3D 0; =20 subsuite[0] =3D alloc_fake_suite(test, "suite1", dummy_test_cases); subsuite[1] =3D alloc_fake_suite(test, "suite2", dummy_test_cases); =20 /* Want: suite1, suite2, NULL -> suite2 (just test1), NULL */ - filtered =3D kunit_filter_subsuite(subsuite, &filter); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered); - free_subsuite_at_end(test, filtered); + got =3D kunit_filter_suites(&suite_set, "suite2.test2", &err); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, got.start); + KUNIT_ASSERT_EQ(test, err, 0); + kfree_at_end(test, got.start); =20 /* Validate we just have suite2 */ - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered[0]); - KUNIT_EXPECT_STREQ(test, (const char *)filtered[0]->name, "suite2"); - KUNIT_EXPECT_FALSE(test, filtered[1]); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, got.start[0]); + KUNIT_EXPECT_STREQ(test, (const char *)got.start[0]->name, "suite2"); + KUNIT_ASSERT_EQ(test, got.end - got.start, 1); =20 /* Now validate we just have test2 */ - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered[0]->test_cases); - KUNIT_EXPECT_STREQ(test, (const char *)filtered[0]->test_cases[0].name, "= test2"); - KUNIT_EXPECT_FALSE(test, filtered[0]->test_cases[1].name); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, got.start[0]->test_cases); + KUNIT_EXPECT_STREQ(test, (const char *)got.start[0]->test_cases[0].name, = "test2"); + KUNIT_EXPECT_FALSE(test, got.start[0]->test_cases[1].name); } =20 -static void filter_subsuite_to_empty_test(struct kunit *test) +static void filter_suites_to_empty_test(struct kunit *test) { - struct kunit_suite *subsuite[3] =3D {NULL, NULL, NULL}; - struct kunit_suite * const *filtered; - struct kunit_test_filter filter =3D { - .suite_glob =3D "not_found", - .test_glob =3D NULL, - }; + struct kunit_suite *subsuite[3] =3D {NULL, NULL}; + struct suite_set suite_set =3D {.start =3D subsuite, .end =3D &subsuite[2= ]}; + struct suite_set got; + int err =3D 0; =20 subsuite[0] =3D alloc_fake_suite(test, "suite1", dummy_test_cases); subsuite[1] =3D alloc_fake_suite(test, "suite2", dummy_test_cases); =20 - filtered =3D kunit_filter_subsuite(subsuite, &filter); - free_subsuite_at_end(test, filtered); /* just in case */ + got =3D kunit_filter_suites(&suite_set, "not_found", &err); + KUNIT_ASSERT_EQ(test, err, 0); + kfree_at_end(test, got.start); /* just in case */ =20 - KUNIT_EXPECT_FALSE_MSG(test, filtered, - "should be NULL to indicate no match"); -} - -static void kfree_subsuites_at_end(struct kunit *test, struct suite_set *s= uite_set) -{ - struct kunit_suite * const * const *suites; - - kfree_at_end(test, suite_set->start); - for (suites =3D suite_set->start; suites < suite_set->end; suites++) - free_subsuite_at_end(test, *suites); -} - -static void filter_suites_test(struct kunit *test) -{ - /* Suites per-file are stored as a NULL terminated array */ - struct kunit_suite *subsuites[2][2] =3D { - {NULL, NULL}, - {NULL, NULL}, - }; - /* Match the memory layout of suite_set */ - struct kunit_suite * const * const suites[2] =3D { - subsuites[0], subsuites[1], - }; - - const struct suite_set suite_set =3D { - .start =3D suites, - .end =3D suites + 2, - }; - struct suite_set filtered =3D {.start =3D NULL, .end =3D NULL}; - int err =3D 0; - - /* Emulate two files, each having one suite */ - subsuites[0][0] =3D alloc_fake_suite(test, "suite0", dummy_test_cases); - subsuites[1][0] =3D alloc_fake_suite(test, "suite1", dummy_test_cases); - - /* Filter out suite1 */ - filtered =3D kunit_filter_suites(&suite_set, "suite0", &err); - kfree_subsuites_at_end(test, &filtered); /* let us use ASSERTs without le= aking */ - KUNIT_EXPECT_EQ(test, err, 0); - KUNIT_ASSERT_EQ(test, filtered.end - filtered.start, (ptrdiff_t)1); - - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered.start); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered.start[0]); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, filtered.start[0][0]); - KUNIT_EXPECT_STREQ(test, (const char *)filtered.start[0][0]->name, "suite= 0"); + KUNIT_EXPECT_PTR_EQ_MSG(test, got.start, got.end, + "should be empty to indicate no match"); } =20 static struct kunit_case executor_test_cases[] =3D { KUNIT_CASE(parse_filter_test), - KUNIT_CASE(filter_subsuite_test), - KUNIT_CASE(filter_subsuite_test_glob_test), - KUNIT_CASE(filter_subsuite_to_empty_test), KUNIT_CASE(filter_suites_test), + KUNIT_CASE(filter_suites_test_glob_test), + KUNIT_CASE(filter_suites_to_empty_test), {} }; =20 @@ -190,20 +142,6 @@ static void kfree_at_end(struct kunit *test, const voi= d *to_free) (void *)to_free); } =20 -static void free_subsuite_res_free(struct kunit_resource *res) -{ - kunit_free_subsuite(res->data); -} - -static void free_subsuite_at_end(struct kunit *test, - struct kunit_suite *const *to_free) -{ - if (IS_ERR_OR_NULL(to_free)) - return; - kunit_alloc_resource(test, NULL, free_subsuite_res_free, - GFP_KERNEL, (void *)to_free); -} - static struct kunit_suite *alloc_fake_suite(struct kunit *test, const char *suite_name, struct kunit_case *test_cases) diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 246645eb3cef..b73d5bb5c473 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -586,11 +586,11 @@ static void kunit_init_suite(struct kunit_suite *suit= e) suite->suite_init_err =3D 0; } =20 -int __kunit_test_suites_init(struct kunit_suite * const * const suites) +int __kunit_test_suites_init(struct kunit_suite * const * const suites, in= t num_suites) { unsigned int i; =20 - for (i =3D 0; suites[i] !=3D NULL; i++) { + for (i =3D 0; i < num_suites; i++) { kunit_init_suite(suites[i]); kunit_run_tests(suites[i]); } @@ -603,11 +603,11 @@ static void kunit_exit_suite(struct kunit_suite *suit= e) kunit_debugfs_destroy_suite(suite); } =20 -void __kunit_test_suites_exit(struct kunit_suite **suites) +void __kunit_test_suites_exit(struct kunit_suite **suites, int num_suites) { unsigned int i; =20 - for (i =3D 0; suites[i] !=3D NULL; i++) + for (i =3D 0; i < num_suites; i++) kunit_exit_suite(suites[i]); =20 kunit_suite_counter =3D 1; @@ -617,18 +617,12 @@ EXPORT_SYMBOL_GPL(__kunit_test_suites_exit); #ifdef CONFIG_MODULES static void kunit_module_init(struct module *mod) { - unsigned int i; - - for (i =3D 0; i < mod->num_kunit_suites; i++) - __kunit_test_suites_init(mod->kunit_suites[i]); + __kunit_test_suites_init(mod->kunit_suites, mod->num_kunit_suites); } =20 static void kunit_module_exit(struct module *mod) { - unsigned int i; - - for (i =3D 0; i < mod->num_kunit_suites; i++) - __kunit_test_suites_exit(mod->kunit_suites[i]); + __kunit_test_suites_exit(mod->kunit_suites, mod->num_kunit_suites); } =20 static int kunit_module_notify(struct notifier_block *nb, unsigned long va= l, --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 26 08:21:15 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 C679BC433EF for ; Sat, 9 Jul 2022 03:20:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229619AbiGIDUj (ORCPT ); Fri, 8 Jul 2022 23:20:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229570AbiGIDU1 (ORCPT ); Fri, 8 Jul 2022 23:20:27 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 867547E827 for ; Fri, 8 Jul 2022 20:20:20 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id gg8-20020a17090b0a0800b001efa2036d5fso329280pjb.4 for ; Fri, 08 Jul 2022 20:20:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=3UgqiERe4708PPmUCP4gASuMkT8EzAEhHtaVeGThrRE=; b=HrDQnG8us26mJ2YAoor+6KrTHMLNjUfKeb1RpTwQrywreVTSsr7GQrBYn4UXAQNlJ3 oC6ykm4IvasRmUg8ADqyzsFpPSqwc0keB9rk5G/FJ2ieTx1MhxcR3oQs5bDudDxQcxJR 89wVur6V4Q3ZE+hWcNAquew/0kLJJeyC6pXgHduTz816x77g/UJn3hV9FYC3GeWublXe wVQi6oSvR9trf2SPwZAhedaKnxmoMp6Ou2k1SRyLSTj2+CEzRAcVB13DPonVk9ix7/8L oyrqxyqwmG9daewfXZkx5D+E2m/2iEf9FxvENuwl2PgCfMt36QB5e3F1RXIfesUIEPVx o5yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=3UgqiERe4708PPmUCP4gASuMkT8EzAEhHtaVeGThrRE=; b=l5tVoWGbKk2bqCaGQvMSrm8RSk1BxZoohsVSl4S8UPPA5KYCbscKkNUCMGqA7UvEjV 5pYNpPDOxrCsmW08Jlw/zhwXG5uzqZ5UgwINfMcMaSd+vGHABPP5lS/t628dSPdhnye6 3MvT8QTLaGq4/vOJMtGelQbrrO5af1NYrXAHDG09VBTzydVPTTDsedkYnRmlkZ6dxDK+ HzHVVV6BJN7czcHQ12qq1vr/ZFHBDvQCQeTNeznWit/Ja9vJCdTyTVVZuNaULYN+XWoW OlpHVkGJ+XxbqoyKQJsW0sqZBfgGTwiS2LLXAnWQV7yp56jYIYrDLFQDPm9352EWMJUG dzBw== X-Gm-Message-State: AJIora+DGFSUTlehJUAEJWGXnswWVFHLUcETEq4SPfj5j9iVgGa+HfsB dueLA24zMIr4wJrSamURk4eQCHUQANx36Q== X-Google-Smtp-Source: AGRyM1vKvq6yqyd6aJtlfnt1xgtTYaUqbYA51L/d3teKgb9KIKerezki/TfB587ENKF0KEBSJ6QDvuCNlkgzkA== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a17:90b:896:b0:1ef:935c:f326 with SMTP id bj22-20020a17090b089600b001ef935cf326mr3462419pjb.193.1657336819983; Fri, 08 Jul 2022 20:20:19 -0700 (PDT) Date: Sat, 9 Jul 2022 11:19:59 +0800 In-Reply-To: <20220709032001.819487-1-davidgow@google.com> Message-Id: <20220709032001.819487-4-davidgow@google.com> Mime-Version: 1.0 References: <20220709032001.819487-1-davidgow@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v4 3/5] thunderbolt: test: Use kunit_test_suite() macro From: David Gow To: Brendan Higgins , Luis Chamberlain , Jeremy Kerr , Daniel Latypov , Shuah Khan , Andrew Jeffery , Mika Westerberg , Andra Paraschiv , Longpeng , Greg KH Cc: David Gow , kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "=?UTF-8?q?Ma=C3=ADra=20Canal?=" , linux-mmc@vger.kernel.org, linux-aspeed@lists.ozlabs.org, openbmc@lists.ozlabs.org, linux-usb@vger.kernel.org, linux-modules@vger.kernel.org, Matt Johnston Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The new implementation of kunit_test_suite() for modules no longer conflicts with module_init, so can now be used by the thunderbolt tests. Also update the Kconfig entry to enable the test when KUNIT_ALL_TESTS is enabled. This means that kunit_tool can now successfully run and parse the test results with, for example: ./tools/testing/kunit/kunit.py run --arch=3Dx86_64 \ --kconfig_add CONFIG_PCI=3Dy --kconfig_add CONFIG_USB4=3Dy \ 'thunderbolt' Acked-by: Mika Westerberg Acked-by: Daniel Latypov Acked-by: Brendan Higgins Signed-off-by: David Gow --- Changes since v3: https://lore.kernel.org/linux-kselftest/20220625050838.1618469-4-davidgow@g= oogle.com/ - Rebase on top of the TAINT_TEST patch series. This should now apply cleanly on top of the kunit branch: https://lore.kernel.org/linux-kselftest/20220708044847.531566-1-davidgow@= google.com/T/#u - Add Brendan's Acked-by tag. Changes since v2: https://lore.kernel.org/linux-kselftest/20220621085345.603820-4-davidgow@go= ogle.com/ - Don't permit USB4_KUNIT_TESTS to be enabled when USB4=3Dy and KUNIT=3Dm i.e., add a dependency on (USB4=3Dm || KUNIT=3Dy) This would result in undefined kunit symbols being used, otherwise. - Add Daniel's Acked-by Changes since v1: https://lore.kernel.org/linux-kselftest/20220618090310.1174932-4-davidgow@g= oogle.com/ - Actually include the Kconfig changes, which were mistakenly added to the next patch in the series in v1. - Add Acked-by tag from Mika Westerberg --- drivers/thunderbolt/Kconfig | 6 ++++-- drivers/thunderbolt/domain.c | 3 --- drivers/thunderbolt/tb.h | 8 -------- drivers/thunderbolt/test.c | 12 +----------- 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/drivers/thunderbolt/Kconfig b/drivers/thunderbolt/Kconfig index 4bfec8a28064..e76a6c173637 100644 --- a/drivers/thunderbolt/Kconfig +++ b/drivers/thunderbolt/Kconfig @@ -28,8 +28,10 @@ config USB4_DEBUGFS_WRITE this for production systems or distro kernels. =20 config USB4_KUNIT_TEST - bool "KUnit tests" - depends on KUNIT=3Dy + bool "KUnit tests" if !KUNIT_ALL_TESTS + depends on (USB4=3Dm || KUNIT=3Dy) + depends on KUNIT + default KUNIT_ALL_TESTS =20 config USB4_DMA_TEST tristate "DMA traffic test driver" diff --git a/drivers/thunderbolt/domain.c b/drivers/thunderbolt/domain.c index 2889a214dadc..99211f35a5cd 100644 --- a/drivers/thunderbolt/domain.c +++ b/drivers/thunderbolt/domain.c @@ -872,7 +872,6 @@ int tb_domain_init(void) { int ret; =20 - tb_test_init(); tb_debugfs_init(); tb_acpi_init(); =20 @@ -890,7 +889,6 @@ int tb_domain_init(void) err_acpi: tb_acpi_exit(); tb_debugfs_exit(); - tb_test_exit(); =20 return ret; } @@ -903,5 +901,4 @@ void tb_domain_exit(void) tb_xdomain_exit(); tb_acpi_exit(); tb_debugfs_exit(); - tb_test_exit(); } diff --git a/drivers/thunderbolt/tb.h b/drivers/thunderbolt/tb.h index 4602c69913fa..a831faa50f65 100644 --- a/drivers/thunderbolt/tb.h +++ b/drivers/thunderbolt/tb.h @@ -1271,12 +1271,4 @@ static inline void tb_service_debugfs_init(struct tb= _service *svc) { } static inline void tb_service_debugfs_remove(struct tb_service *svc) { } #endif =20 -#ifdef CONFIG_USB4_KUNIT_TEST -int tb_test_init(void); -void tb_test_exit(void); -#else -static inline int tb_test_init(void) { return 0; } -static inline void tb_test_exit(void) { } -#endif - #endif diff --git a/drivers/thunderbolt/test.c b/drivers/thunderbolt/test.c index ee37f8b58f50..24c06e7354cd 100644 --- a/drivers/thunderbolt/test.c +++ b/drivers/thunderbolt/test.c @@ -2817,14 +2817,4 @@ static struct kunit_suite tb_test_suite =3D { .test_cases =3D tb_test_cases, }; =20 -static struct kunit_suite *tb_test_suites[] =3D { &tb_test_suite, NULL }; - -int tb_test_init(void) -{ - return __kunit_test_suites_init(tb_test_suites); -} - -void tb_test_exit(void) -{ - return __kunit_test_suites_exit(tb_test_suites); -} +kunit_test_suite(tb_test_suite); --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 26 08:21:15 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 7843AC43334 for ; Sat, 9 Jul 2022 03:21:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229629AbiGIDVA (ORCPT ); Fri, 8 Jul 2022 23:21:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229556AbiGIDUc (ORCPT ); Fri, 8 Jul 2022 23:20:32 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3D3F820D8 for ; Fri, 8 Jul 2022 20:20:24 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-31d436816e1so2025257b3.15 for ; Fri, 08 Jul 2022 20:20:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=Lx/BiL2O9zbe0le6J+dFZQuPgX8f+rnEW9RXPsfjH4c=; b=Rt56sVzazgxUE4QrMIanz54Ve8L3LbCLYF38E3qyJV7pg0PipkP6/hyHSXjMdt8V/C KG7Lp6VXMHkHZ4JXXR5suNFExjbLppwBmpYv7ze8XIufUdxa34t7RN9HLUr88AB7055J jr3FJ39Llf9M1cc4Qg7XRtfvmKRG9s7EHlf6E/h3qUJ/8un4hheMEwtnRbVcAvx6I2/J RSP9of124wzIWrBXEcU7KoVpWWj3wMhPJhJooAIAi5EzKFcUKKg1y2iNx0dCBvRxKDZ0 GCJi0noM4NRw205GVev6FR9YIprIkX1RyjIWpGRw3DUQIE8LVCUmfINHIAwHRBaO2YmQ 8lew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Lx/BiL2O9zbe0le6J+dFZQuPgX8f+rnEW9RXPsfjH4c=; b=qP5O782/aXRzF0+Ufz+un7eeYoVFP9nHMTIQjyJJ/iOPOmcbtUHH3KHx8FzqBBECKR dQwCW3kekTL1ruhvUdTp6g39cftjGQRqKm51qK/nQsILMb2Xm66L7YI+qE8c70SmEnyc Pkr/dpzJhTnFzJpv/2JDUSw6MqHYaFapvJNU6SCBRy+Xn0xQoJl+nwSETrr4qvyvej7l 2w0aA9t1UEPj9RXh/K9SBvxVkj8QOjpmg3YfreSl2x5KPXW1VVWlNGmZINE6ESBDR8an c6gqe7ZuLtEp7zVgrT+P7ULJgU+JyBBVVL9/TflZo2LKO60Dm+cqBqc49NO5rnbLlvXM ZkBA== X-Gm-Message-State: AJIora+vFlff0zJXgMQscg0fV9WjCSw7f4AaJkRzfajYEvMVFe/U3/Ei QuHWmFAoBchQXad+JpEJAi9Lk1V3Hpoe9A== X-Google-Smtp-Source: AGRyM1sb4RyLCMh9MpLdNin9MkXDwjf+mS9BNT7RWoG9P0GBF2yfUlddIR+CcqW0f5128Pg1eSLJcBHVFGP6YA== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a0d:f544:0:b0:317:f98a:8702 with SMTP id e65-20020a0df544000000b00317f98a8702mr7586257ywf.229.1657336824450; Fri, 08 Jul 2022 20:20:24 -0700 (PDT) Date: Sat, 9 Jul 2022 11:20:00 +0800 In-Reply-To: <20220709032001.819487-1-davidgow@google.com> Message-Id: <20220709032001.819487-5-davidgow@google.com> Mime-Version: 1.0 References: <20220709032001.819487-1-davidgow@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v4 4/5] nitro_enclaves: test: Use kunit_test_suite() macro From: David Gow To: Brendan Higgins , Luis Chamberlain , Jeremy Kerr , Daniel Latypov , Shuah Khan , Andrew Jeffery , Mika Westerberg , Andra Paraschiv , Longpeng , Greg KH Cc: David Gow , kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "=?UTF-8?q?Ma=C3=ADra=20Canal?=" , linux-mmc@vger.kernel.org, linux-aspeed@lists.ozlabs.org, openbmc@lists.ozlabs.org, linux-usb@vger.kernel.org, linux-modules@vger.kernel.org, Matt Johnston Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The kunit_test_suite() macro previously conflicted with module_init, making it unsuitable for use in the nitro_enclaves test. Now that it's fixed, we can use it instead of a custom call into internal KUnit functions to run the test. As a side-effect, this means that the test results are properly included with other suites when built-in. To celebrate, enable the test by default when KUNIT_ALL_TESTS is set (and NITRO_ENCLAVES enabled). The nitro_enclave tests can now be run via kunit_tool with: ./tools/testing/kunit/kunit.py run --arch=3Dx86_64 \ --kconfig_add CONFIG_PCI=3Dy --kconfig_add CONFIG_SMP=3Dy \ --kconfig_add CONFIG_HOTPLUG_CPU=3Dy \ --kconfig_add CONFIG_VIRT_DRIVERS=3Dy \ --kconfig_add CONFIG_NITRO_ENCLAVES=3Dy \ 'ne_misc_dev_test' (This is a pretty long command, so it may be worth adding a .kunitconfig file at some point, instead.) Reviewed-by: Andra Paraschiv Acked-by: Brendan Higgins Signed-off-by: David Gow --- Changes since v3: https://lore.kernel.org/linux-kselftest/20220625050838.1618469-5-davidgow@g= oogle.com/ - Rebase on top of the TAINT_TEST patch series. This should now apply cleanly on top of the kunit branch: https://lore.kernel.org/linux-kselftest/20220708044847.531566-1-davidgow@= google.com/T/#u - Add Brendan's Acked-by tag. Changes since v2: https://lore.kernel.org/linux-kselftest/20220621085345.603820-5-davidgow@go= ogle.com/ - Add Andra's Reviewed-by tag. Changes since v1: https://lore.kernel.org/linux-kselftest/20220618090310.1174932-5-davidgow@g= oogle.com/ - Move the mistakenly-added thunderbolt Kconfig to the previous patch (Thanks Andra) - Add Andra's Acked-by tag. --- drivers/virt/nitro_enclaves/Kconfig | 5 ++-- drivers/virt/nitro_enclaves/ne_misc_dev.c | 27 ------------------- .../virt/nitro_enclaves/ne_misc_dev_test.c | 5 +--- 3 files changed, 4 insertions(+), 33 deletions(-) diff --git a/drivers/virt/nitro_enclaves/Kconfig b/drivers/virt/nitro_encla= ves/Kconfig index 2d3d98158121..ce91add81401 100644 --- a/drivers/virt/nitro_enclaves/Kconfig +++ b/drivers/virt/nitro_enclaves/Kconfig @@ -16,8 +16,9 @@ config NITRO_ENCLAVES The module will be called nitro_enclaves. =20 config NITRO_ENCLAVES_MISC_DEV_TEST - bool "Tests for the misc device functionality of the Nitro Enclaves" - depends on NITRO_ENCLAVES && KUNIT=3Dy + bool "Tests for the misc device functionality of the Nitro Enclaves" if != KUNIT_ALL_TESTS + depends on NITRO_ENCLAVES && KUNIT + default KUNIT_ALL_TESTS help Enable KUnit tests for the misc device functionality of the Nitro Enclaves. Select this option only if you will boot the kernel for diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev.c b/drivers/virt/nitro= _enclaves/ne_misc_dev.c index 20c881b6a4b6..241b94f62e56 100644 --- a/drivers/virt/nitro_enclaves/ne_misc_dev.c +++ b/drivers/virt/nitro_enclaves/ne_misc_dev.c @@ -1759,35 +1759,10 @@ static long ne_ioctl(struct file *file, unsigned in= t cmd, unsigned long arg) =20 #if defined(CONFIG_NITRO_ENCLAVES_MISC_DEV_TEST) #include "ne_misc_dev_test.c" - -static inline int ne_misc_dev_test_init(void) -{ - return __kunit_test_suites_init(ne_misc_dev_test_suites); -} - -static inline void ne_misc_dev_test_exit(void) -{ - __kunit_test_suites_exit(ne_misc_dev_test_suites); -} -#else -static inline int ne_misc_dev_test_init(void) -{ - return 0; -} - -static inline void ne_misc_dev_test_exit(void) -{ -} #endif =20 static int __init ne_init(void) { - int rc =3D 0; - - rc =3D ne_misc_dev_test_init(); - if (rc < 0) - return rc; - mutex_init(&ne_cpu_pool.mutex); =20 return pci_register_driver(&ne_pci_driver); @@ -1798,8 +1773,6 @@ static void __exit ne_exit(void) pci_unregister_driver(&ne_pci_driver); =20 ne_teardown_cpu_pool(); - - ne_misc_dev_test_exit(); } =20 module_init(ne_init); diff --git a/drivers/virt/nitro_enclaves/ne_misc_dev_test.c b/drivers/virt/= nitro_enclaves/ne_misc_dev_test.c index 265797bed0ea..74df43b925be 100644 --- a/drivers/virt/nitro_enclaves/ne_misc_dev_test.c +++ b/drivers/virt/nitro_enclaves/ne_misc_dev_test.c @@ -151,7 +151,4 @@ static struct kunit_suite ne_misc_dev_test_suite =3D { .test_cases =3D ne_misc_dev_test_cases, }; =20 -static struct kunit_suite *ne_misc_dev_test_suites[] =3D { - &ne_misc_dev_test_suite, - NULL -}; +kunit_test_suite(ne_misc_dev_test_suite); --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 26 08:21:15 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 BB88EC433EF for ; Sat, 9 Jul 2022 03:21:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229648AbiGIDVH (ORCPT ); Fri, 8 Jul 2022 23:21:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229625AbiGIDUp (ORCPT ); Fri, 8 Jul 2022 23:20:45 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 961F27AC3A for ; Fri, 8 Jul 2022 20:20:29 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id 5-20020a620605000000b00527ca01f8a3so45283pfg.19 for ; Fri, 08 Jul 2022 20:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=0uk9B4iBCc1DStciW4cIjZgeCzcpo0HpP5e4tEE/Rl8=; b=nG41Cf/zf7u/sNTdf7Cq7xkL6MwV2j9mNk/je+VAD8dJVe9tTCtvzxVUFtyVny5Btq x1Ahnkjlg1ZJP0i/o40I0agXWzyjfVJ67zJnOTVgyBA3BpBqdQfv306NhXPG7cBH6z0b 5Jn3a76uHAReJMB6C82+3IlzI+hV76RWnd/MpwIBghPNvqEHfssIGDHylf1QKDRZOt7n yqd7FwgKuQIeCu+n/LUwVlJDQfooV9o38TE36mJNDYxQopTcJPb3RqWFpOJ4KFfHvt59 srcH1okBUBcl/7iN9v5P7TbQmO+GJdwbNLUBj65K9m+zurkKaY56ZdTcQEVqi15/o9Wr YthQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=0uk9B4iBCc1DStciW4cIjZgeCzcpo0HpP5e4tEE/Rl8=; b=BFBaSRu/gY/JRswSxpsDtPngumAxjZHn1bulHIMqI/ysp8stpkkQdqoT7sygDjDcPG iTRmkaKMMNajUnLI6zdkMQYFLkhF0WxBkU0ikmzs2NLcq9KpwhEFdN/XSxa90aBudp5c JiEfBIr4riWsPGCisYmAYGA8kAOuc/+vX6mPq77Q0Fg7S+UQP86XGuewcz1rc9/1mzK1 1s00iGtu/ffvzRyhz+mjGBCAqL1ekyguXOa0aMmW01en4UHe2iq7yL5PIBbZ3GCRq+Tt 9T34CmqFaqT7W0zST9z1qKt5ArX5qB50wzez427YhV1lTLVqnB+lBzGgH3IDyJk1KrvJ 1TPQ== X-Gm-Message-State: AJIora/nXcIjN8jnwMHjxsCl/Q0BlTBuxSXkjsicD7XjPjdnCHpIkloz EClOGvmK9EPgzB/TVNv2j1XgtlRdkcHI8g== X-Google-Smtp-Source: AGRyM1vb6KdixOSRAr8QjZwc+RJeF7pVnk5EV/2mWAv2L+en8WMRLFL1aQm31W9Ny8aQAjNB+SWrLAXzTPEPcg== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a17:902:8a82:b0:16c:3024:69c2 with SMTP id p2-20020a1709028a8200b0016c302469c2mr2056322plo.154.1657336828917; Fri, 08 Jul 2022 20:20:28 -0700 (PDT) Date: Sat, 9 Jul 2022 11:20:01 +0800 In-Reply-To: <20220709032001.819487-1-davidgow@google.com> Message-Id: <20220709032001.819487-6-davidgow@google.com> Mime-Version: 1.0 References: <20220709032001.819487-1-davidgow@google.com> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog Subject: [PATCH v4 5/5] mmc: sdhci-of-aspeed: test: Use kunit_test_suite() macro From: David Gow To: Brendan Higgins , Luis Chamberlain , Jeremy Kerr , Daniel Latypov , Shuah Khan , Andrew Jeffery , Mika Westerberg , Andra Paraschiv , Longpeng , Greg KH Cc: David Gow , kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, "=?UTF-8?q?Ma=C3=ADra=20Canal?=" , linux-mmc@vger.kernel.org, linux-aspeed@lists.ozlabs.org, openbmc@lists.ozlabs.org, linux-usb@vger.kernel.org, linux-modules@vger.kernel.org, Matt Johnston , Ulf Hansson Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The kunit_test_suite() macro is no-longer incompatible with module_add, so its use can be reinstated. Since this fixes parsing with builtins and kunit_tool, also enable the test by default when KUNIT_ALL_TESTS is enabled. The test can now be run via kunit_tool with: ./tools/testing/kunit/kunit.py run --arch=3Dx86_64 \ --kconfig_add CONFIG_OF=3Dy --kconfig_add CONFIG_OF_ADDRESS=3Dy \ --kconfig_add CONFIG_MMC=3Dy --kconfig_add CONFIG_MMC_SDHCI=3Dy \ --kconfig_add CONFIG_MMC_SDHCI_PLTFM=3Dy \ --kconfig_add CONFIG_MMC_SDHCI_OF_ASPEED=3Dy \ 'sdhci-of-aspeed' (It may be worth adding a .kunitconfig at some point, as there are enough dependencies to make that command scarily long.) Acked-by: Daniel Latypov Acked-by: Ulf Hansson Acked-by: Brendan Higgins Signed-off-by: David Gow --- Changes since v3: https://lore.kernel.org/linux-kselftest/20220625050838.1618469-6-davidgow@g= oogle.com/ - Rebase on top of the TAINT_TEST patch series. This should now apply cleanly on top of the kunit branch: https://lore.kernel.org/linux-kselftest/20220708044847.531566-1-davidgow@= google.com/T/#u - Add Brendan's Acked-by tag. Changes since v2: https://lore.kernel.org/linux-kselftest/20220621085345.603820-6-davidgow@go= ogle.com/ - Clean up the aspeed_sdc_init() function to get rid of an obsolete goto (Thanks Daniel) - Add Daniel and Ulf's Acked-by tags. No changes since v1: https://lore.kernel.org/linux-kselftest/20220618090310.1174932-6-davidgow@g= oogle.com/ --- drivers/mmc/host/Kconfig | 5 ++-- drivers/mmc/host/sdhci-of-aspeed-test.c | 8 +----- drivers/mmc/host/sdhci-of-aspeed.c | 34 +------------------------ 3 files changed, 5 insertions(+), 42 deletions(-) diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index d6144978e32d..10c563999d3d 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -169,8 +169,9 @@ config MMC_SDHCI_OF_ASPEED If unsure, say N. =20 config MMC_SDHCI_OF_ASPEED_TEST - bool "Tests for the ASPEED SDHCI driver" - depends on MMC_SDHCI_OF_ASPEED && KUNIT=3Dy + bool "Tests for the ASPEED SDHCI driver" if !KUNIT_ALL_TESTS + depends on MMC_SDHCI_OF_ASPEED && KUNIT + default KUNIT_ALL_TESTS help Enable KUnit tests for the ASPEED SDHCI driver. Select this option only if you will boot the kernel for the purpose of running diff --git a/drivers/mmc/host/sdhci-of-aspeed-test.c b/drivers/mmc/host/sdh= ci-of-aspeed-test.c index 1ed4f86291f2..ecb502606c53 100644 --- a/drivers/mmc/host/sdhci-of-aspeed-test.c +++ b/drivers/mmc/host/sdhci-of-aspeed-test.c @@ -96,10 +96,4 @@ static struct kunit_suite aspeed_sdhci_test_suite =3D { .test_cases =3D aspeed_sdhci_test_cases, }; =20 -static struct kunit_suite *aspeed_sdc_test_suite_array[] =3D { - &aspeed_sdhci_test_suite, - NULL, -}; - -static struct kunit_suite **aspeed_sdc_test_suites - __used __section(".kunit_test_suites") =3D aspeed_sdc_test_suite_array; +kunit_test_suite(aspeed_sdhci_test_suite); diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of= -aspeed.c index 6e4e132903a6..ba6677bf7372 100644 --- a/drivers/mmc/host/sdhci-of-aspeed.c +++ b/drivers/mmc/host/sdhci-of-aspeed.c @@ -606,25 +606,6 @@ static struct platform_driver aspeed_sdc_driver =3D { =20 #if defined(CONFIG_MMC_SDHCI_OF_ASPEED_TEST) #include "sdhci-of-aspeed-test.c" - -static inline int aspeed_sdc_tests_init(void) -{ - return __kunit_test_suites_init(aspeed_sdc_test_suites); -} - -static inline void aspeed_sdc_tests_exit(void) -{ - __kunit_test_suites_exit(aspeed_sdc_test_suites); -} -#else -static inline int aspeed_sdc_tests_init(void) -{ - return 0; -} - -static inline void aspeed_sdc_tests_exit(void) -{ -} #endif =20 static int __init aspeed_sdc_init(void) @@ -637,18 +618,7 @@ static int __init aspeed_sdc_init(void) =20 rc =3D platform_driver_register(&aspeed_sdc_driver); if (rc < 0) - goto cleanup_sdhci; - - rc =3D aspeed_sdc_tests_init(); - if (rc < 0) { - platform_driver_unregister(&aspeed_sdc_driver); - goto cleanup_sdhci; - } - - return 0; - -cleanup_sdhci: - platform_driver_unregister(&aspeed_sdhci_driver); + platform_driver_unregister(&aspeed_sdhci_driver); =20 return rc; } @@ -656,8 +626,6 @@ module_init(aspeed_sdc_init); =20 static void __exit aspeed_sdc_exit(void) { - aspeed_sdc_tests_exit(); - platform_driver_unregister(&aspeed_sdc_driver); platform_driver_unregister(&aspeed_sdhci_driver); } --=20 2.37.0.rc0.161.g10f37bed90-goog