From patchwork Wed Dec 13 01:01:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177719 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8103528vqy; Tue, 12 Dec 2023 17:02:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IG1VStZIgdEJSCqbF/lkxyvpqEOcGUZkfb7eUHoRHZHUPgKdS0CGAFUJE6MN37J3XWzZTq8 X-Received: by 2002:a05:6808:3995:b0:3b9:b8ee:8380 with SMTP id gq21-20020a056808399500b003b9b8ee8380mr9976545oib.37.1702429334721; Tue, 12 Dec 2023 17:02:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429334; cv=none; d=google.com; s=arc-20160816; b=vOH5NseHRo17SVstcjp0bNFnaE9TeenHYuJ0/Yoa4/mMm9e2srU7ikMvbFORVe/Hmi Abi1qQ5Pxk9hm/SBlCs1sHPUgHJO8hqHVh9o/TlSO40r/wjixNTRsIjnib02gd+1y8aC 3J3t43YrNBcLUzS7jDUqw3w6f0pg0b02TVkyrdw5p3kYMc3ckU6bkm4bTMiaiLGuk5A6 9MahJCNIoCTMEPFTeSzxAZkkIE95u8/82wzg1hvyx2iLWhXkEL25f+Cbcc2MYe+KpxLS KtrnHd9V3yhCntNlC5Oy5qL5OBMYLA5kGwvs1JESg4AwqdGI5K1BcwmolML0hvcBZh+p tT6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :dkim-signature; bh=kZ407BZUjf1nTaNFv/lydV9QLh6SjAtGxOmdW2rHzpg=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=vthsHR6dfbhPc2LQ99buDJq70M6TyDQEpwOnySkGazjxqKhDE3gCCYIe6inkdaCK3A QovXJ4fWz9DKO+ysIDz1zrPPJQCaq0l1+Fa5PS3d14fzsiggY5zse1Ph/vk6UgDOQvZl pLz/Ygg3VPHu+1LzPhgCk1p5hVBFgPkiuPAcxHGIgKN4J3S9H2ZuZF3YKgZSi6xzxR0Q sELOl4kfcFVLd1Bw9nQ/8K/8icuGGv2vhFP6SP2fPc4e0Rsi2ruh4DrNTu0K/RPFT/ee FYowNg0UNEL6XjZDCX4zl0qelprrhvFI8zPwJbThTrNP7bt/JA6g2cqx7SX8m5vKYElF eh9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=i53XthTO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id pm17-20020a17090b3c5100b002869aab8f55si8986346pjb.52.2023.12.12.17.02.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:02:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=i53XthTO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 40F818068222; Tue, 12 Dec 2023 17:02:12 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235178AbjLMBCE (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232724AbjLMBCD (ORCPT ); Tue, 12 Dec 2023 20:02:03 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 58C90A6 for ; Tue, 12 Dec 2023 17:02:09 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-dbc1f00dc35so7150769276.3 for ; Tue, 12 Dec 2023 17:02:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429328; x=1703034128; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=kZ407BZUjf1nTaNFv/lydV9QLh6SjAtGxOmdW2rHzpg=; b=i53XthTOpyTBdUW+WiFagcPjBQVVp1FQbf/Ac6dvZRCLoO214u+pR88jZvpPunzb/j 6ogryEcMMLo7NnnI/1Hi2dwpnTTzvp133rdOtzdcAdJiUqwGH1BUc9pN7I1RGKl7JMEm fEjV79dNoj2OZObewmepN2iIyQ0aw/mAYBpkId06kaKdh1dvLaun0GmrS5D9pphhAyuy yyaBTcvenIIbm1DtdJM9nBFad3k7LfKK5+wL7Aip2tsviBQFOhaW/M3Hxir3f7XgmQIp A5iVEa1iap5Seut+NPBVGk3guo3ww84uO0kvk6cxn++AQPiUBoUET3QLaS6X438YJD87 zPkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429328; x=1703034128; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=kZ407BZUjf1nTaNFv/lydV9QLh6SjAtGxOmdW2rHzpg=; b=hlT3hMctrgGjbOZG8KL47OMRQRpw8Mbz6G2DB23wkc7zBNY9OMwp7hjV/pCUxNmRST OcLLjCYua26clYQoxafJmHoN4A0klRNLll61XXn0Kkxg1a/yhw4+upSdU+dr5tFxY3HU OI1hu6++/Hj6kKRMPvnYLRm0KkQpTH9VLgX0Z6vZT33LDUxDb9VKC3OaaAVo1BroDJYv JtkF4empg52J+zlcfMNy9XPSBwloMrSNRwKb9Kh4QYLu0XN6RAFaVT+QBnhnm5ZLIHf4 JoCxrfBkObJnWArddBo7ODatXLeD/T65YEdDI8qlJme22rUvULZ9vXoKZ7do6o4sKy+h rM+g== X-Gm-Message-State: AOJu0YwdIeDe32fxavJlntL3rdLVbiBeaFBXxI9T6Ng2BkB+7+wDf4ej aNuLNuVqnfl+4pT7CACVoVOwOWkkUA== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a05:6902:343:b0:db5:f536:17d4 with SMTP id e3-20020a056902034300b00db5f53617d4mr46384ybs.11.1702429328425; Tue, 12 Dec 2023 17:02:08 -0800 (PST) Date: Wed, 13 Dec 2023 01:01:56 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-1-rmoar@google.com> Subject: [PATCH v4 1/6] kunit: move KUNIT_TABLE out of INIT_DATA From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:12 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126542020362189 X-GMAIL-MSGID: 1785126542020362189 Alter the linker section of KUNIT_TABLE to move it out of INIT_DATA and into DATA_DATA. Data for KUnit tests does not need to be in the init section. In order to run tests again after boot the KUnit data cannot be labeled as init data as the kernel could write over it. Add a KUNIT_INIT_TABLE in the next patch for KUnit tests that test init data/functions. Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes since v3: - No changes include/asm-generic/vmlinux.lds.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) base-commit: b285ba6f8cc1b2bfece0b4350fdb92c8780bc698 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index bae0fe4d499b..1107905d37fc 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -370,7 +370,8 @@ BRANCH_PROFILE() \ TRACE_PRINTKS() \ BPF_RAW_TP() \ - TRACEPOINT_STR() + TRACEPOINT_STR() \ + KUNIT_TABLE() /* * Data section helpers @@ -699,8 +700,7 @@ THERMAL_TABLE(governor) \ EARLYCON_TABLE() \ LSM_TABLE() \ - EARLY_LSM_TABLE() \ - KUNIT_TABLE() + EARLY_LSM_TABLE() #define INIT_TEXT \ *(.init.text .init.text.*) \ From patchwork Wed Dec 13 01:01:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177723 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8104030vqy; Tue, 12 Dec 2023 17:03:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IHxrNwvJOrTqRc9fUUSYjJIFKNj+A0jmpLqUJGj4y5sWUVJwjDr/KTLIp9bM41LozqclKQV X-Received: by 2002:a05:6e02:b4f:b0:35d:57de:1e42 with SMTP id f15-20020a056e020b4f00b0035d57de1e42mr11712769ilu.6.1702429381131; Tue, 12 Dec 2023 17:03:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429381; cv=none; d=google.com; s=arc-20160816; b=MUcFv7rpnJwOcEYyEItGti2+MznS7jL3Nhez3qZ8BTOxiCOAdK9cZqxLOOYQGfVtYi G93ry+Kkcq1qVw8TpYYToxoHC8nk8fEtdtSqowyzRhgmdNF/Dsq6DPKcDKwRNbacZZ1X 2d9dGCbTH4mDUo0rZKrEvt5MYKHCFOJ6tp1eYav5BoNgyyfNGCEPo2MgVS+DouifgyBF 5I8rd9JJHYUJS6B8rh0oPEZgc0dUbEkhkJdyw+fbhKx5IfFYVEYlm79jLzLF5KB6NXrZ yyYZu5jm5HY+dRVHJkSMi4YljFkCqv8sGuLMNEbP60jmAgvorInIdKJeayjyfv4NnaXu zOIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=QnfG8xEJfO3fKeHnOTgYGr2nu3+gdj/tGQcmsxOIRL8=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=Iq/dXm0PDLFupesA0iOgy5tsZMwFZcJpbm/s3IuzsDSG6QNGAE7iapNbp46Ok1SgUF +qfxlI5bXTKKlCmMy2PmE0uoH9AITDAIMp2mAazrKKRv/t1FzqMsZOGlyGsgYhhBlH/C z2uVoc5//lOS8RMUEPuWOExunkNd250lOigATnyO/Cy8b90GW56MyU/Fy6iHu0SWw2Tc nbYn67fpzkyGdAE5O98j4Zf0W+ZaFClUsAUF0apmaO48hOc/5Hy03dnbRKW2Zk9HGStu KQ9JMnbCWJQ2PMB9ARgrzXbMQsmIBY5Zs9NC04yooJq4LLtHRqMCdvDQluEmj+XVmEsa 6UpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=zb+yrmp4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id bw24-20020a056a02049800b005c6689f9d81si8685604pgb.215.2023.12.12.17.03.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:03:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=zb+yrmp4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id DF383801D9F8; Tue, 12 Dec 2023 17:02:56 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377727AbjLMBCH (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377662AbjLMBCG (ORCPT ); Tue, 12 Dec 2023 20:02:06 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 99B7EA6 for ; Tue, 12 Dec 2023 17:02:12 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-db53919e062so7179362276.0 for ; Tue, 12 Dec 2023 17:02:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429332; x=1703034132; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=QnfG8xEJfO3fKeHnOTgYGr2nu3+gdj/tGQcmsxOIRL8=; b=zb+yrmp4RSYa1HCURlwf2QPhQoQCycIWuvfHTpHhWAoE+PNNiXAJQRLEW/PTzULLV6 jBut3WB/PmBveFkMPycN5KyHgx7PetDQCXHSON+D0YQaBntIs/FiLLRwWRfyxEmadh0q yU3QKvWUR/hOzwQ1/55wnJ3jSmxMmYzFCFVTQz1lLaCDtFX20IN3LG2QWOmhYaFmr69Q 1D/2//83zsvpR4Y3YbiVQ2Sky6eKWEoLfzZusmGsKWXv20BKL+6H64hDWXY39tBbHXfz QhE87dURwHcHZvVuQi7Tjy9m7iAqKXdFfbF1ZIutPrAe9VMAEddETuvQREyeS7gAnfaq zNHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429332; x=1703034132; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QnfG8xEJfO3fKeHnOTgYGr2nu3+gdj/tGQcmsxOIRL8=; b=LNT2EnKCdwHS3CYUOnRU/MOuFucxNryDgeS0N+f03Ih7eofEGBGpRyJlfdYiRdlrhH ef8IPXps2kVemTYRoDnc+GCtVCZbiSnNBpQgxEoqdBjFMyzC2yMJgEh0c1k8OoAIINqq U3010p/WbE1xGScSInhgHXwdgtRVbcJEGuLZIi5MjiPfWhbuxYwctV/C5IgXT2PbdvYv wsPbakeXAJF9TdddfwAu3AycF4Zcu2NMILb6xP4oTkE6yeRqprosOuFMOFodzgWe0PZ+ sc6VG6hS6tTavOpgomBYXfOU/HWkpDkuRHMm0BQQ/Q5rkAA+gOqFQ8SqjHWyb+P3sSbo FOQQ== X-Gm-Message-State: AOJu0YzVO4r/a+UcAtbnkLsmkkiz2/dVRT5nbYTuryZWUXYzGAr8C81j nYom5SK+Nt/P9JPiQ53GxcMscnhyUg== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a25:8a04:0:b0:db7:dce9:76cd with SMTP id g4-20020a258a04000000b00db7dce976cdmr47986ybl.9.1702429331766; Tue, 12 Dec 2023 17:02:11 -0800 (PST) Date: Wed, 13 Dec 2023 01:01:57 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-2-rmoar@google.com> Subject: [PATCH v4 2/6] kunit: add KUNIT_INIT_TABLE to init linker section From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:57 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126590458876464 X-GMAIL-MSGID: 1785126590458876464 Add KUNIT_INIT_TABLE to the INIT_DATA linker section. Alter the KUnit macros to create init tests: kunit_test_init_section_suites Update lib/kunit/executor.c to run both the suites in KUNIT_TABLE and KUNIT_INIT_TABLE. Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes since v3: - Add to comments in test.h for kunit_test_init_section_suites macro to note init tests cannot be run after boot and the structs cannot be marked with __initdata include/asm-generic/vmlinux.lds.h | 9 ++++- include/kunit/test.h | 30 +++++++++------ include/linux/module.h | 2 + kernel/module/main.c | 3 ++ lib/kunit/executor.c | 64 ++++++++++++++++++++++++++++--- lib/kunit/test.c | 26 +++++++++---- 6 files changed, 109 insertions(+), 25 deletions(-) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 1107905d37fc..5dd3a61d673d 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -700,7 +700,8 @@ THERMAL_TABLE(governor) \ EARLYCON_TABLE() \ LSM_TABLE() \ - EARLY_LSM_TABLE() + EARLY_LSM_TABLE() \ + KUNIT_INIT_TABLE() #define INIT_TEXT \ *(.init.text .init.text.*) \ @@ -926,6 +927,12 @@ . = ALIGN(8); \ BOUNDED_SECTION_POST_LABEL(.kunit_test_suites, __kunit_suites, _start, _end) +/* Alignment must be consistent with (kunit_suite *) in include/kunit/test.h */ +#define KUNIT_INIT_TABLE() \ + . = ALIGN(8); \ + BOUNDED_SECTION_POST_LABEL(.kunit_init_test_suites, \ + __kunit_init_suites, _start, _end) + #ifdef CONFIG_BLK_DEV_INITRD #define INIT_RAM_FS \ . = ALIGN(4); \ diff --git a/include/kunit/test.h b/include/kunit/test.h index 20ed9f9275c9..fe79cd736e94 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -337,6 +337,9 @@ void __kunit_test_suites_exit(struct kunit_suite **suites, int num_suites); void kunit_exec_run_tests(struct kunit_suite_set *suite_set, bool builtin); void kunit_exec_list_tests(struct kunit_suite_set *suite_set, bool include_attr); +struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_set, + struct kunit_suite_set suite_set); + #if IS_BUILTIN(CONFIG_KUNIT) int kunit_run_all_tests(void); #else @@ -371,6 +374,11 @@ static inline int kunit_run_all_tests(void) #define kunit_test_suite(suite) kunit_test_suites(&suite) +#define __kunit_init_test_suites(unique_array, ...) \ + static struct kunit_suite *unique_array[] \ + __aligned(sizeof(struct kunit_suite *)) \ + __used __section(".kunit_init_test_suites") = { __VA_ARGS__ } + /** * kunit_test_init_section_suites() - used to register one or more &struct * kunit_suite containing init functions or @@ -378,21 +386,21 @@ static inline int kunit_run_all_tests(void) * * @__suites: a statically allocated list of &struct kunit_suite. * - * This functions identically as kunit_test_suites() except that it suppresses - * modpost warnings for referencing functions marked __init or data marked - * __initdata; this is OK because currently KUnit only runs tests upon boot - * during the init phase or upon loading a module during the init phase. + * This functions similar to kunit_test_suites() except that it compiles the + * list of suites during init phase. + * + * This macro also suffixes the array and suite declarations it makes with + * _probe; so that modpost suppresses warnings about referencing init data + * for symbols named in this manner. * - * NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these - * tests must be excluded. + * Note: these init tests are not able to be run after boot so there is no + * "run" debugfs file generated for these tests. * - * The only thing this macro does that's different from kunit_test_suites is - * that it suffixes the array and suite declarations it makes with _probe; - * modpost suppresses warnings about referencing init data for symbols named in - * this manner. + * Also, do not mark the suite or test case structs with __initdata because + * they will be used after the init phase with debugfs. */ #define kunit_test_init_section_suites(__suites...) \ - __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \ + __kunit_init_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \ ##__suites) #define kunit_test_init_section_suite(suite) \ diff --git a/include/linux/module.h b/include/linux/module.h index a98e188cf37b..9cd0009bd050 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -540,6 +540,8 @@ struct module { struct static_call_site *static_call_sites; #endif #if IS_ENABLED(CONFIG_KUNIT) + int num_kunit_init_suites; + struct kunit_suite **kunit_init_suites; int num_kunit_suites; struct kunit_suite **kunit_suites; #endif diff --git a/kernel/module/main.c b/kernel/module/main.c index 98fedfdb8db5..36681911c05a 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2199,6 +2199,9 @@ static int find_module_sections(struct module *mod, struct load_info *info) mod->kunit_suites = section_objs(info, ".kunit_test_suites", sizeof(*mod->kunit_suites), &mod->num_kunit_suites); + mod->kunit_init_suites = section_objs(info, ".kunit_init_test_suites", + sizeof(*mod->kunit_init_suites), + &mod->num_kunit_init_suites); #endif mod->extable = section_objs(info, "__ex_table", diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 1236b3cd2fbb..847329c51e91 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -12,6 +12,8 @@ */ extern struct kunit_suite * const __kunit_suites_start[]; extern struct kunit_suite * const __kunit_suites_end[]; +extern struct kunit_suite * const __kunit_init_suites_start[]; +extern struct kunit_suite * const __kunit_init_suites_end[]; static char *action_param; @@ -292,6 +294,33 @@ void kunit_exec_list_tests(struct kunit_suite_set *suite_set, bool include_attr) } } +struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_set, + struct kunit_suite_set suite_set) +{ + struct kunit_suite_set total_suite_set = {NULL, NULL}; + struct kunit_suite **total_suite_start = NULL; + size_t init_num_suites, num_suites, suite_size; + + init_num_suites = init_suite_set.end - init_suite_set.start; + num_suites = suite_set.end - suite_set.start; + suite_size = sizeof(suite_set.start); + + /* Allocate memory for array of all kunit suites */ + total_suite_start = kmalloc_array(init_num_suites + num_suites, suite_size, GFP_KERNEL); + if (!total_suite_start) + return total_suite_set; + + /* Append init suites and then all other kunit suites */ + memcpy(total_suite_start, init_suite_set.start, init_num_suites * suite_size); + memcpy(total_suite_start + init_num_suites, suite_set.start, num_suites * suite_size); + + /* Set kunit suite set start and end */ + total_suite_set.start = total_suite_start; + total_suite_set.end = total_suite_start + (init_num_suites + num_suites); + + return total_suite_set; +} + #if IS_BUILTIN(CONFIG_KUNIT) static char *kunit_shutdown; @@ -313,21 +342,41 @@ static void kunit_handle_shutdown(void) int kunit_run_all_tests(void) { - struct kunit_suite_set suite_set = { + struct kunit_suite_set suite_set = {NULL, NULL}; + struct kunit_suite_set filtered_suite_set = {NULL, NULL}; + struct kunit_suite_set init_suite_set = { + __kunit_init_suites_start, __kunit_init_suites_end, + }; + struct kunit_suite_set normal_suite_set = { __kunit_suites_start, __kunit_suites_end, }; + size_t init_num_suites = init_suite_set.end - init_suite_set.start; int err = 0; + + if (init_num_suites > 0) { + suite_set = kunit_merge_suite_sets(init_suite_set, normal_suite_set); + if (!suite_set.start) + goto out; + } else + suite_set = normal_suite_set; + if (!kunit_enabled()) { pr_info("kunit: disabled\n"); - goto out; + goto free_out; } if (filter_glob_param || filter_param) { - suite_set = kunit_filter_suites(&suite_set, filter_glob_param, + filtered_suite_set = kunit_filter_suites(&suite_set, filter_glob_param, filter_param, filter_action_param, &err); + + /* Free original suite set before using filtered suite set */ + if (init_num_suites > 0) + kfree(suite_set.start); + suite_set = filtered_suite_set; + if (err) { pr_err("kunit executor: error filtering suites: %d\n", err); - goto out; + goto free_out; } } @@ -340,9 +389,12 @@ int kunit_run_all_tests(void) else pr_err("kunit executor: unknown action '%s'\n", action_param); - if (filter_glob_param || filter_param) { /* a copy was made of each suite */ +free_out: + if (filter_glob_param || filter_param) kunit_free_suite_set(suite_set); - } + else if (init_num_suites > 0) + /* Don't use kunit_free_suite_set because suites aren't individually allocated */ + kfree(suite_set.start); out: kunit_handle_shutdown(); diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 0308865194bb..6c082911a85f 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -704,28 +704,40 @@ EXPORT_SYMBOL_GPL(__kunit_test_suites_exit); #ifdef CONFIG_MODULES static void kunit_module_init(struct module *mod) { - struct kunit_suite_set suite_set = { + struct kunit_suite_set suite_set, filtered_set; + struct kunit_suite_set normal_suite_set = { mod->kunit_suites, mod->kunit_suites + mod->num_kunit_suites, }; + struct kunit_suite_set init_suite_set = { + mod->kunit_init_suites, mod->kunit_init_suites + mod->num_kunit_init_suites, + }; const char *action = kunit_action(); int err = 0; - suite_set = kunit_filter_suites(&suite_set, + if (mod->num_kunit_init_suites > 0) + suite_set = kunit_merge_suite_sets(init_suite_set, normal_suite_set); + else + suite_set = normal_suite_set; + + filtered_set = kunit_filter_suites(&suite_set, kunit_filter_glob() ?: "*.*", kunit_filter(), kunit_filter_action(), &err); if (err) pr_err("kunit module: error filtering suites: %d\n", err); - mod->kunit_suites = (struct kunit_suite **)suite_set.start; - mod->num_kunit_suites = suite_set.end - suite_set.start; + mod->kunit_suites = (struct kunit_suite **)filtered_set.start; + mod->num_kunit_suites = filtered_set.end - filtered_set.start; + + if (mod->num_kunit_init_suites > 0) + kfree(suite_set.start); if (!action) - kunit_exec_run_tests(&suite_set, false); + kunit_exec_run_tests(&filtered_set, false); else if (!strcmp(action, "list")) - kunit_exec_list_tests(&suite_set, false); + kunit_exec_list_tests(&filtered_set, false); else if (!strcmp(action, "list_attr")) - kunit_exec_list_tests(&suite_set, true); + kunit_exec_list_tests(&filtered_set, true); else pr_err("kunit: unknown action '%s'\n", action); } From patchwork Wed Dec 13 01:01:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177720 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8103648vqy; Tue, 12 Dec 2023 17:02:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IG7u2D3mQT/9HK4aLuuS9OPcpXO8n/sEtAOBUTimbxc6x1m5IyAEOWUE+cz0zPL1Fg3JYSF X-Received: by 2002:a17:90b:f88:b0:28a:cb5f:90ab with SMTP id ft8-20020a17090b0f8800b0028acb5f90abmr1169836pjb.20.1702429346039; Tue, 12 Dec 2023 17:02:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429346; cv=none; d=google.com; s=arc-20160816; b=N6xq7itJHzmX3NTEwA+vinMkcquRYC+/yc6WJifk5AJkNfVDwF2pyB+6/s25TyqESu +CeuhMXHTgluAbh1nmWEJHyKEdxHlsLMrl1N9wwnblkr+/IQAi8if/YlL3Fy2yYHwxt0 0UZ+sPXYmWwOTdt3kSdpsVw7eiuw6cVpVU5sR6hipQX9MNW6Hb0UjIudwKr9Y5wpzg+D IHpdZLsQmnmlDQAwYsvB3Oh3ZHo3JcB1RJMQI6PimZQE+Hazd0JdEpiT8/wsmFSLAa/9 bDWJZccrcRhypMxems2MwPl7h7DUISHQUtMQXMf7Ceu1pf2hSaevCYlDuOwdJF4HLVGW UFlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=E22eCM3LpsQRbUKK8mf1gNlUuS672sImUrgswyDx+34=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=aObMMsbvowKb5s8j4QaF9VmhDFIA9nXDiIp1nYCMggh670/jNTVIjogiBbkg9JCjFE OMMM3ULrNoERx9Z+c1hm68FjcNelqZ/ysvKpOjchr9gPT3WvctKR91P71DYccqc2jUWz 87PYPKV5ghTthO+7/1cNx6X80wu80PEv3rN77ZjcNJbDomM1RIsj5jnK96z5c7ilEV7A A84R3qoOn3HW/F42vZLdduzUDvG7JWRYyrYsi1NXKPByCQXVF9UyPRsAPzbue8ZRTpt5 XK+fDuLfgAvcQOHMt6+kmDy5ux/7/nMyPuxqvfefchZ+iynYvnhAFRaxEYljSXhuW1kU vQdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=HrZF9X5Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id w13-20020a17090a8a0d00b00286c34f1dc6si9981857pjn.162.2023.12.12.17.02.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:02:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=HrZF9X5Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 1522380ACCF0; Tue, 12 Dec 2023 17:02:23 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377882AbjLMBCO (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378076AbjLMBCN (ORCPT ); Tue, 12 Dec 2023 20:02:13 -0500 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 67027D3 for ; Tue, 12 Dec 2023 17:02:18 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5e2677b9d3dso8609747b3.0 for ; Tue, 12 Dec 2023 17:02:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429337; x=1703034137; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=E22eCM3LpsQRbUKK8mf1gNlUuS672sImUrgswyDx+34=; b=HrZF9X5YmvD0GskdZCZQpePwImD3tsPLvsOosEn2DDBbrl4XjLQEBLzeKmtRHiKvX5 dyeZHJBuemQ/bCbdoXpdFjaQWnGh4xWXxbSS14vLrDNSeg7I0TtLruqHMjKtiv4MquiE 4nM2n91CYSxUfziR1Q+K3UGkpfUvmfDBaIrP+uJmSxjjOnDP5V3TrlaMSuVYinIn2drJ DKfVsJ44V80B2DmAj55XqXOaZb4DvQ6//C3RecfrA7Dt8LDtJ3oQNuMf4kPNmp+3wd73 moVa3uZKIop4xYIfblTX2nUM/h6IoKB0dky9frLonJdC5oQ2l6TuLLfzrraZtflN31Na cHkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429337; x=1703034137; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=E22eCM3LpsQRbUKK8mf1gNlUuS672sImUrgswyDx+34=; b=ZcO6auSevcVgn6yt88/BqDdyiJeLbm52veWD8b29mASBfWRslvL165TK0NfZdZBy8M Cw7foeRF+Wid9dgOTMEjUIz1fG27GTICd9oYjOqMeZwNC6VvOxmen/ME7z1Oh+KHE+Au cTBP6wNhH+aU+KBfC6hQ17qWjwKKQXVhrFkxLn3AX71T2kfle37BmnIPAgebaGQRR3hK oNrndZDUHLBUP1JrXpbrbfcz2DI+aFx2forbgtMI2g3L2jmvOiLjjC30/m8oJkiSsuoJ UkrCyYQ5r1umCyKOgbKB16xsuEu2PtJlAKEpvjYTuGbYrVS26UXIWM491MGdqgHhlRb1 M7VA== X-Gm-Message-State: AOJu0YznRkthddJ9iIRIJyXzV5yF/qM/V799bPRcvxML0lBnLoKY8H+L jrCghbaG/uZraRJ2vsfhRagBxaW3fw== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a05:6902:4b1:b0:dbc:bfb7:1f48 with SMTP id r17-20020a05690204b100b00dbcbfb71f48mr7176ybs.9.1702429337531; Tue, 12 Dec 2023 17:02:17 -0800 (PST) Date: Wed, 13 Dec 2023 01:01:58 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-3-rmoar@google.com> Subject: [PATCH v4 3/6] kunit: add example suite to test init suites From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:23 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126553906278791 X-GMAIL-MSGID: 1785126553906278791 Add example_init_test_suite to allow for testing the feature of running test suites marked as init to indicate they use init data and/or functions. This suite should always pass and uses a simple init function. This suite can also be used to test the is_init attribute introduced in the next patch. Signed-off-by: Rae Moar --- Changes since v3: - I ended up not changing anything as adding __init to the test gave a build warning. It did still work so I could add it back if wanted. lib/kunit/kunit-example-test.c | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c index 6bb5c2ef6696..18495778de7c 100644 --- a/lib/kunit/kunit-example-test.c +++ b/lib/kunit/kunit-example-test.c @@ -287,4 +287,41 @@ static struct kunit_suite example_test_suite = { */ kunit_test_suites(&example_test_suite); +static int __init init_add(int x, int y) +{ + return (x + y); +} + +/* + * This test should always pass. Can be used to test init suites. + */ +static void example_init_test(struct kunit *test) +{ + KUNIT_EXPECT_EQ(test, init_add(1, 1), 2); +} + +/* + * The kunit_case struct cannot be marked as __initdata as this will be + * used in debugfs to retrieve results after test has run + */ +static struct kunit_case example_init_test_cases[] = { + KUNIT_CASE(example_init_test), + {} +}; + +/* + * The kunit_suite struct cannot be marked as __initdata as this will be + * used in debugfs to retrieve results after test has run + */ +static struct kunit_suite example_init_test_suite = { + .name = "example_init", + .test_cases = example_init_test_cases, +}; + +/* + * This registers the test suite and marks the suite as using init data + * and/or functions. + */ +kunit_test_init_section_suites(&example_init_test_suite); + MODULE_LICENSE("GPL v2"); From patchwork Wed Dec 13 01:01:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177722 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8103901vqy; Tue, 12 Dec 2023 17:02:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IEdOf5HGkNFr4VtSUEpdJXKUbUd9tAXG2EL6EYXc3mIrB/UO9eRYj8SXx2rjP7ezc6VUCcQ X-Received: by 2002:a05:6870:7d0d:b0:1fb:75a:6d46 with SMTP id os13-20020a0568707d0d00b001fb075a6d46mr9233126oab.109.1702429371194; Tue, 12 Dec 2023 17:02:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429371; cv=none; d=google.com; s=arc-20160816; b=JOZp9No6YyY2LlOL4jMvRqqZzA8A4TsekGzYUCxIrdNdOzTuMoS5hYB1zry7rYt24D oGI5s5X8Y2i3TC/NTPKQpXR4WFp3+1ZY9KkJjScGfIuHH9wyxVLIcgnnz3vUteHbFLj7 O9urTkMNCxb9E2evqHVVXnVcbppDWIjx0DO/e+Yi6CwAogjcLNRUGFaN9Y1huwwtD9NJ Lwm9SPHyUsC9jdeflJ7O2vNy8iTGa0UHwELxafBui+qNMxpXywz1RwZ+CP0Bee4Gzwgc zkoylm20w5OM75zYIXDZveZg2Q7ip2K7HJ1EK4v6bHZR7tjiEdSTEq+aEvBA5OB5QA4E mSdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=W+i0eplhyaM8wdIbUQxyxBK3T+y6k/kiFIs1IqVjteCE/zJVsrm//RsaQvtO55EeQT XrtoUpEF7WBhHLbNLa7DrxuQoeAwV8E2bOlZg9HkgM69bkfwCE7WKH4sqzTPx3poZCF3 mvJdp4rARlxuaRGJD0LdJ4O5tWD4ZODnkXO46Jb9gZHa6E7sX2Dy5WkRpMB2mjkrf7AD CaWy/j8tbm1vgim8gZD/9dSF2ObpzoXjbZCzYL1yf0H2SDcFrXc63bPWtKwBfqunM+sL e3IvT/9h+HoDsSqO+/F126ADYb3kUMgDyqI0/s8alVUj10J/GMgoIFT3uw6PqqE3sMAW 0iJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=012TB4M3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id 13-20020a63124d000000b005c6e820b5e5si8419978pgs.781.2023.12.12.17.02.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:02:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=012TB4M3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 49C8680ACCF0; Tue, 12 Dec 2023 17:02:48 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378056AbjLMBCV (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235185AbjLMBCR (ORCPT ); Tue, 12 Dec 2023 20:02:17 -0500 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 BCAE3B9 for ; Tue, 12 Dec 2023 17:02:22 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5d064f9e2a1so71858187b3.1 for ; Tue, 12 Dec 2023 17:02:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429342; x=1703034142; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; b=012TB4M3JqhrqJe3aHxlkb3DMPWqzzglnP9QkBZ5E6tkX5Ga/5UwMR8tegmkxDJr7j ybxLsL/Ba1HRYyxcAb1S5mN3drKEOt2u/fulzw5Vvp5xDPAraFGDp1VcMd1aM0rg3pnO SmE4Dv/mkn0J0+ZGOehRzhThlFU0VEUsOXzELdZoqJaRicgTxtnmodTpiQFlU8WGW6rz QJogVYIbTXMYcbfEkH+utGIJz/ELDGODJab5AKy8BAzO0OqNB0Cjcl/QydzBKAzhU9a8 i4pQxWVzvPnvSDIWJSPlBNvDocqIiBfdfTCBwEh2kGMVJWVTBCrJ0Wl6k+Rscln0WUEt wgSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429342; x=1703034142; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LfjrfaL0BTdFLEXX617pYnIT5bq+UfvN0h2MwzqxRag=; b=L4RwN6SCgZ9Tn0d8I7W12LGoxuqCmu8Ej/CiRB+/JJrQokGS7ugqhfDvxkt9RIwB96 OSkD7Wc3ijOLvD3FBZjGE1mOZKWv21CCDhXyObJtWXk6JVCCYKsvy9OO0UOcwfmTjeGq qFEIPOLlO+6k6CWLLQs/COILuKOcWZlpxeB3uDojufQVOzrm6RxtrYxCiX7jNkZKkOdz YEDIXRyT6FoeddRCsvmN21LbUCq6uf29Kwctox7Xp9iLdvpZU4SBryGpsHorMGy5Ed3N 8D2qxIQrKXZb9xV8LUkqLer06PN5qUf8h+fAjNB4VYi7n42zkqSNAW2aF7KM4V5MgZFQ AKHQ== X-Gm-Message-State: AOJu0YzCHPXdVVnQ0BFqHAswwbn7SJ74hevCDmuYPVOYpUaUd6Sa14Cy NNk9mi1ELczEyUN+H9Bzh2nq2CYOBQ== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a05:690c:fd5:b0:5d6:daf7:b53b with SMTP id dg21-20020a05690c0fd500b005d6daf7b53bmr60192ywb.9.1702429341847; Tue, 12 Dec 2023 17:02:21 -0800 (PST) Date: Wed, 13 Dec 2023 01:01:59 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-4-rmoar@google.com> Subject: [PATCH v4 4/6] kunit: add is_init test attribute From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:48 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126580286025681 X-GMAIL-MSGID: 1785126580286025681 Add is_init test attribute of type bool. Add to_string, get, and filter methods to lib/kunit/attributes.c. Mark each of the tests in the init section with the is_init=true attribute. Add is_init to the attributes documentation. Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes since v3: - Move the attribute from kunit_attributes to a suite field. .../dev-tools/kunit/running_tips.rst | 7 +++ include/kunit/test.h | 1 + lib/kunit/attributes.c | 60 +++++++++++++++++++ lib/kunit/executor.c | 6 +- 4 files changed, 73 insertions(+), 1 deletion(-) diff --git a/Documentation/dev-tools/kunit/running_tips.rst b/Documentation/dev-tools/kunit/running_tips.rst index 766f9cdea0fa..024e9ad1d1e9 100644 --- a/Documentation/dev-tools/kunit/running_tips.rst +++ b/Documentation/dev-tools/kunit/running_tips.rst @@ -428,3 +428,10 @@ This attribute indicates the name of the module associated with the test. This attribute is automatically saved as a string and is printed for each suite. Tests can also be filtered using this attribute. + +``is_init`` + +This attribute indicates whether the test uses init data or functions. + +This attribute is automatically saved as a boolean and tests can also be +filtered using this attribute. diff --git a/include/kunit/test.h b/include/kunit/test.h index fe79cd736e94..b163b9984b33 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -253,6 +253,7 @@ struct kunit_suite { struct dentry *debugfs; struct string_stream *log; int suite_init_err; + bool is_init; }; /* Stores an array of suites, end points one past the end */ diff --git a/lib/kunit/attributes.c b/lib/kunit/attributes.c index 1b512f7e1838..2cf04cc09372 100644 --- a/lib/kunit/attributes.c +++ b/lib/kunit/attributes.c @@ -58,6 +58,16 @@ static const char *attr_enum_to_string(void *attr, const char * const str_list[] return str_list[val]; } +static const char *attr_bool_to_string(void *attr, bool *to_free) +{ + bool val = (bool)attr; + + *to_free = false; + if (val) + return "true"; + return "false"; +} + static const char *attr_speed_to_string(void *attr, bool *to_free) { return attr_enum_to_string(attr, speed_str_list, to_free); @@ -166,6 +176,37 @@ static int attr_string_filter(void *attr, const char *input, int *err) return false; } +static int attr_bool_filter(void *attr, const char *input, int *err) +{ + int i, input_int = -1; + long val = (long)attr; + const char *input_str = NULL; + + for (i = 0; input[i]; i++) { + if (!strchr(op_list, input[i])) { + input_str = input + i; + break; + } + } + + if (!input_str) { + *err = -EINVAL; + pr_err("kunit executor: filter value not found: %s\n", input); + return false; + } + + if (!strcmp(input_str, "true")) + input_int = (int)true; + else if (!strcmp(input_str, "false")) + input_int = (int)false; + else { + *err = -EINVAL; + pr_err("kunit executor: invalid filter input: %s\n", input); + return false; + } + + return int_filter(val, input, input_int, err); +} /* Get Attribute Methods */ @@ -194,6 +235,17 @@ static void *attr_module_get(void *test_or_suite, bool is_test) return (void *) ""; } +static void *attr_is_init_get(void *test_or_suite, bool is_test) +{ + struct kunit_suite *suite = is_test ? NULL : test_or_suite; + struct kunit_case *test = is_test ? test_or_suite : NULL; + + if (test) + return ((void *) NULL); + else + return ((void *) suite->is_init); +} + /* List of all Test Attributes */ static struct kunit_attr kunit_attr_list[] = { @@ -212,6 +264,14 @@ static struct kunit_attr kunit_attr_list[] = { .filter = attr_string_filter, .attr_default = (void *)"", .print = PRINT_SUITE, + }, + { + .name = "is_init", + .get_attr = attr_is_init_get, + .to_string = attr_bool_to_string, + .filter = attr_bool_filter, + .attr_default = (void *)false, + .print = PRINT_SUITE, } }; diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 847329c51e91..717b9599036b 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -300,6 +300,7 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_ struct kunit_suite_set total_suite_set = {NULL, NULL}; struct kunit_suite **total_suite_start = NULL; size_t init_num_suites, num_suites, suite_size; + int i = 0; init_num_suites = init_suite_set.end - init_suite_set.start; num_suites = suite_set.end - suite_set.start; @@ -310,8 +311,11 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_ if (!total_suite_start) return total_suite_set; - /* Append init suites and then all other kunit suites */ + /* Append and mark init suites and then append all other kunit suites */ memcpy(total_suite_start, init_suite_set.start, init_num_suites * suite_size); + for (i = 0; i < init_num_suites; i++) + total_suite_start[i]->is_init = true; + memcpy(total_suite_start + init_num_suites, suite_set.start, num_suites * suite_size); /* Set kunit suite set start and end */ From patchwork Wed Dec 13 01:02:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177721 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8103838vqy; Tue, 12 Dec 2023 17:02:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IEXVoURYeoHc7HSJz6ts+6e1xmgGnENBtRmWtmoNgjhLVcjkSUrcjWKF5/zhmfESl/N/IP9 X-Received: by 2002:a05:6870:82ab:b0:203:21bc:d87e with SMTP id q43-20020a05687082ab00b0020321bcd87emr198209oae.64.1702429363649; Tue, 12 Dec 2023 17:02:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429363; cv=none; d=google.com; s=arc-20160816; b=lFzf7m1rU7qgXaFH19WjS8yshqOctk0BB9LAro3JYx6wkCndX6XGIfDBLqYq5MdOBW X8ghXsquFnwCRXT7SKEtRkQ5N/sKJOb7IJogpRfnG6of+gOkYVND5gdcauGHIg1QC4Q4 xHR4JIOKXkwA9P/UDDLOxnAOVOOK40VyYpDiWlfqkwag+pFh6B0Cc5G8yt2/hYalse90 sfEZowCl0buFsLm4ILXhJaJtTLRmlVbW9RLIlqyU+ob5qnFvWWvRaCnCiAb1wJilkAc6 NiLecNwRqCXduydHmRFonpWxRHqeDjDIHNtg9QwXL3ThGIDOrUAklt2Wt2yA0yk/d4eF N/Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=tj6TQQ0qLgemf+TVeyTzuqlDzUQzS2HQ7MPicsFC5VQ=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=D4L6WHi/6PGJ6PZhqzl6EMElzWtZEjbCs+m76K24BXraiQLHbthAKfjzgDxLio/8iO qqOqU0wLZeFXjxRQaz/umgVNOl6mESsIZ00dXTVeEGhGPho4ZeWe/uO6Cqek0aMPBi7/ otamrz5DUtSsETfh0pw6hCpdjqhNHgYmrWTpPOIn9cn9TFZI3p0kpR3ReNqXKr0W6NF4 jF3d2bXoJ6fWOkBlsiRTDCt/Jv4qb5MRHmsG7k59kDWcVi6gpez+ZOKw9PYcFL5rx3SY zXAMSknli/4m8ttdJsy0781bYUokmRA3AVHAeq+QZgg+3kOYjivK6gujIsRPt9IiVwUO it3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=ieXAHqrY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id bv186-20020a632ec3000000b005859aec9406si8570734pgb.16.2023.12.12.17.02.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:02:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=ieXAHqrY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id 0C57B801B426; Tue, 12 Dec 2023 17:02:41 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378100AbjLMBCX (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235190AbjLMBCU (ORCPT ); Tue, 12 Dec 2023 20:02:20 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45870E9 for ; Tue, 12 Dec 2023 17:02:26 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-db547d41413so5038814276.0 for ; Tue, 12 Dec 2023 17:02:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429344; x=1703034144; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tj6TQQ0qLgemf+TVeyTzuqlDzUQzS2HQ7MPicsFC5VQ=; b=ieXAHqrYKFPjMIfeqanXk80g5+6gbnvG76UXf0A4qepdouo77uuPKb/HJfDYMAnLwy QxvJ1N0huKyOESwixFn7DnMLSVJg7uUk7SfcnUEu8ejCRYo6tdJQBkH5TAJnBc3HnOin 3PIPJpHLIIqRBuuEH2a+w8F89da+i5cOU3mCJA45NPAMQUdhw4656pqYWoZRqI5pnj/i ZXkvfo+88wntxeC9YApMl26J1Dzbs/LnOFKhTV/T9oRbH0f+B923sEPxTYH+aCkMH5L2 d1dzVbxqdRE0yEZ1JXy+uUnu5NOj2mT0ItqdmvyeI90DZ9kS4zTKLUvIKZ2dJO0gCcqV Ea2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429344; x=1703034144; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tj6TQQ0qLgemf+TVeyTzuqlDzUQzS2HQ7MPicsFC5VQ=; b=ZNA1QVUR2wg+BJERzzMd0nFGPumkK9gnlvqcl+NQ2bF7Ia82ZZvP/JwG90FQxEauxp Ghb97Z5joJzSRYH8/0hz/yLsRlYM/dLF0SnxftOlV+qeUbvsEqmOhm8nWJ4RvWwYDfSr OuDWXg+tUeGgoo9OcO+FZqI5f31VvuWL3H/3EHz9dsvYicjgtwkVl/drpopR7lEPfA3B HJiMeuab0S8tsSM8dkxaTJsX5qxAdWNQ/7hDFq5935IUT0MIWjXzJXT6cI2EMbf6R4SG BWnNhmowiQn2j6PhkTDLYrGCJ1aJR4HjZID7jFkRK3bU0gjqs777E6Nb4Pva5m2a+T6q K2Uw== X-Gm-Message-State: AOJu0YxYM9oHP+PJoqZczvVFbza4XudqkgOkEseer+SIpfFrVQtLU26Z KbKlrfRmAFnLYC5tSFCB9CJq5NRyXQ== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a5b:c89:0:b0:dbc:c5f8:ae16 with SMTP id i9-20020a5b0c89000000b00dbcc5f8ae16mr11109ybq.5.1702429344411; Tue, 12 Dec 2023 17:02:24 -0800 (PST) Date: Wed, 13 Dec 2023 01:02:00 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-5-rmoar@google.com> Subject: [PATCH v4 5/6] kunit: add ability to run tests after boot using debugfs From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:02:41 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126572183859277 X-GMAIL-MSGID: 1785126572183859277 Add functionality to run built-in tests after boot by writing to a debugfs file. Add a new debugfs file labeled "run" for each test suite to use for this purpose. As an example, write to the file using the following: echo "any string" > /sys/kernel/debugfs/kunit//run This will trigger the test suite to run and will print results to the kernel log. To guard against running tests concurrently with this feature, add a mutex lock around running kunit. This supports the current practice of not allowing tests to be run concurrently on the same kernel. This new functionality could be used to design a parameter injection feature in the future. Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes since v4: - Rebased series causing a few small changes in debugfs.c in this patch lib/kunit/debugfs.c | 68 +++++++++++++++++++++++++++++++++++++++++++++ lib/kunit/test.c | 10 +++++++ 2 files changed, 78 insertions(+) diff --git a/lib/kunit/debugfs.c b/lib/kunit/debugfs.c index 382706dfb47d..d548750a325a 100644 --- a/lib/kunit/debugfs.c +++ b/lib/kunit/debugfs.c @@ -8,12 +8,14 @@ #include #include +#include #include "string-stream.h" #include "debugfs.h" #define KUNIT_DEBUGFS_ROOT "kunit" #define KUNIT_DEBUGFS_RESULTS "results" +#define KUNIT_DEBUGFS_RUN "run" /* * Create a debugfs representation of test suites: @@ -21,6 +23,8 @@ * Path Semantics * /sys/kernel/debug/kunit//results Show results of last run for * testsuite + * /sys/kernel/debug/kunit//run Write to this file to trigger + * testsuite to run * */ @@ -101,6 +105,51 @@ static int debugfs_results_open(struct inode *inode, struct file *file) return single_open(file, debugfs_print_results, suite); } +/* + * Print a usage message to the debugfs "run" file + * (/sys/kernel/debug/kunit//run) if opened. + */ +static int debugfs_print_run(struct seq_file *seq, void *v) +{ + struct kunit_suite *suite = (struct kunit_suite *)seq->private; + + seq_puts(seq, "Write to this file to trigger the test suite to run.\n"); + seq_printf(seq, "usage: echo \"any string\" > /sys/kernel/debugfs/kunit/%s/run\n", + suite->name); + return 0; +} + +/* + * The debugfs "run" file (/sys/kernel/debug/kunit//run) + * contains no information. Write to the file to trigger the test suite + * to run. + */ +static int debugfs_run_open(struct inode *inode, struct file *file) +{ + struct kunit_suite *suite; + + suite = (struct kunit_suite *)inode->i_private; + + return single_open(file, debugfs_print_run, suite); +} + +/* + * Trigger a test suite to run by writing to the suite's "run" debugfs + * file found at: /sys/kernel/debug/kunit//run + * + * Note: what is written to this file will not be saved. + */ +static ssize_t debugfs_run(struct file *file, + const char __user *buf, size_t count, loff_t *ppos) +{ + struct inode *f_inode = file->f_inode; + struct kunit_suite *suite = (struct kunit_suite *) f_inode->i_private; + + __kunit_test_suites_init(&suite, 1); + + return count; +} + static const struct file_operations debugfs_results_fops = { .open = debugfs_results_open, .read = seq_read, @@ -108,11 +157,23 @@ static const struct file_operations debugfs_results_fops = { .release = debugfs_release, }; +static const struct file_operations debugfs_run_fops = { + .open = debugfs_run_open, + .read = seq_read, + .write = debugfs_run, + .llseek = seq_lseek, + .release = debugfs_release, +}; + void kunit_debugfs_create_suite(struct kunit_suite *suite) { struct kunit_case *test_case; struct string_stream *stream; + /* If suite log already allocated, do not create new debugfs files. */ + if (suite->log) + return; + /* * Allocate logs before creating debugfs representation. * The suite->log and test_case->log pointer are expected to be NULL @@ -140,6 +201,13 @@ void kunit_debugfs_create_suite(struct kunit_suite *suite) debugfs_create_file(KUNIT_DEBUGFS_RESULTS, S_IFREG | 0444, suite->debugfs, suite, &debugfs_results_fops); + + /* Do not create file to re-run test if test runs on init */ + if (!suite->is_init) { + debugfs_create_file(KUNIT_DEBUGFS_RUN, S_IFREG | 0644, + suite->debugfs, + suite, &debugfs_run_fops); + } return; err: diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 6c082911a85f..a52fcb9a4457 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,8 @@ #include "string-stream.h" #include "try-catch-impl.h" +static DEFINE_MUTEX(kunit_run_lock); + /* * Hook to fail the current test and print an error message to the log. */ @@ -654,6 +657,7 @@ static void kunit_init_suite(struct kunit_suite *suite) kunit_debugfs_create_suite(suite); suite->status_comment[0] = '\0'; suite->suite_init_err = 0; + string_stream_clear(suite->log); } bool kunit_enabled(void) @@ -670,6 +674,11 @@ int __kunit_test_suites_init(struct kunit_suite * const * const suites, int num_ return 0; } + /* Use mutex lock to guard against running tests concurrently. */ + if (mutex_lock_interruptible(&kunit_run_lock)) { + pr_err("kunit: test interrupted\n"); + return -EINTR; + } static_branch_inc(&kunit_running); for (i = 0; i < num_suites; i++) { @@ -678,6 +687,7 @@ int __kunit_test_suites_init(struct kunit_suite * const * const suites, int num_ } static_branch_dec(&kunit_running); + mutex_unlock(&kunit_run_lock); return 0; } EXPORT_SYMBOL_GPL(__kunit_test_suites_init); From patchwork Wed Dec 13 01:02:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 177724 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8104072vqy; Tue, 12 Dec 2023 17:03:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IEk0Qd9xz88kj8axlgkzor/Dui2sjBWhTajbd8Nyf4kC5zr8JFJ7eeMFcaSVOI6raWDxfmp X-Received: by 2002:a05:6e02:1646:b0:35d:a84e:f729 with SMTP id v6-20020a056e02164600b0035da84ef729mr11361354ilu.63.1702429384997; Tue, 12 Dec 2023 17:03:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702429384; cv=none; d=google.com; s=arc-20160816; b=EyMddHP6MvU617UCk7hSfoXepywDQ2PV/k46jx7fHAxcp/Ojzw36OPzRmto/pMTmU8 iyhW2pngwAdEbMVhR0sFjlig3CtjNQBZXrW90n47d4AlCsi4wrVpDxKcE5xVNnEqAN30 47No+KM3G88zyYEgo/as6F6+8RHMEjjAIyWuXwzzDW54w0XzDJyqefKucIUddOC1F58+ nf9pw0dB1sjjbAhPRrV47j3uh06Lp90/9j5VxXAvaGNG2aJ5wP9XBWkJt2/uQkI/YkZ7 owkRSDrK7rUdqC9+3Fnibzs6rqJ2ESoROc9YHuptoKSeByAZDO3usBuZvPv8v68+oVEi pgzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=Q5lVM/dVKeVFErFd3K5fREWS3rUw2b6FfvKCy8RqIqw=; fh=6RrXC9a42eRtUq33jTxbdw6zXjl3feewHokQkvv5rHU=; b=AI4BPXy3xlVRuTv7gD435mrYlfAzUF/Hl+m9nmu5kiizc5v2JL778ABVHF3IoPPxlv jV0Vcn6U6tcs4e2NCgWo9CFr68HbwLzgF4a0E1Zt+FUrS049H1/OcoF0zgPYa6qW/+/y PMGlc91zl+fym2pt8NEKogYmFGX2Zup81yAzNfb3ZAkpHZi8nKPs/CaNwc279voRGfoP ec4rXV2i7bn+EHi10NeHRGNim1sjSGee1TiduKogcwkVcqHXVux6POmwNNidXgq0NGbI ToWkaEXCfav0dDQ7p5fsv8uX5Xbi0soJEVscJDdi9FReySXBcge338e43ThUBKf6ia0J LE0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=35b7wDiI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id bs2-20020a632802000000b005c6b59c91bbsi8668950pgb.654.2023.12.12.17.03.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 17:03:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=35b7wDiI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 1AC15801B3C4; Tue, 12 Dec 2023 17:03:00 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235183AbjLMBCb (ORCPT + 99 others); Tue, 12 Dec 2023 20:02:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378099AbjLMBCX (ORCPT ); Tue, 12 Dec 2023 20:02:23 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E2130F7 for ; Tue, 12 Dec 2023 17:02:27 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-dbcbd789ddcso645253276.0 for ; Tue, 12 Dec 2023 17:02:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702429347; x=1703034147; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Q5lVM/dVKeVFErFd3K5fREWS3rUw2b6FfvKCy8RqIqw=; b=35b7wDiIAe5ALWKl2T7A/ZPjqEPfv8jasQy6+XoPJzR9nnFNYtFZOmRc2FKIa7Ypl8 VhOIkJ1MoQ2jwnuLMfmuzXfhCGM5n3kOMIqjIYx4qjwXrSGcqakVwFdiGei/HgxTuWZX HOHT+0wan4r5P9fgiwkVwGX1SZLgv7ZvcewzhoSt72c1KpB375K3O7nZsOLCk1T2KYAD IIXmxTqnSezpsTBHJiUizo9nf0ESrCMEuvRnSbF9Oj+HxkLc7/udGj/KhP2cE0Xk/eN/ BlUgpJDBlMqycWDGTRTEzEADMQw9Y5ouPQeCGJ/WsKE93kPvIkb618Uf4/muR+d4CuSG 71AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702429347; x=1703034147; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Q5lVM/dVKeVFErFd3K5fREWS3rUw2b6FfvKCy8RqIqw=; b=WLVMfkanna2bf5bDOfuXpTjFv8zCx9FMFkrF9mM9gls+Bv2AnSRuVmQr1UmApwHOJ2 ul+NXp8P0xIVqk0ZfLpFY5SlYjphSLT5nZLhoDmMcGDDjEblYZvTnuzRzqF7SG+edMhs UvVQt/LV+OkwaovDJiGJZqxxaRQLCUHViZE6003FMoet9qvFuzXimD5VXOPNiFFK8chu TlNeCmYsw3xQC4u7otc/VmQgP4Uy0cy5h3lsa+EDgnOmAI7ddxI/woZCLg43+eBHXXfN lD85LQRnuCTwETrw70beRSVvgbkwT7U+Zc3k3nEhu5+nAFUGGSlp58Zurqt0pC11WfoM oSbg== X-Gm-Message-State: AOJu0Ywk/UPAS3n9UsRxO4DtpyTrRG7lSeufWqgsqQ9uWLCQOLE6mt8v kEiJU7UBeCW0oh6+KC2/1y8WsPjPfQ== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a05:6902:f10:b0:dbc:b4dc:fdfc with SMTP id et16-20020a0569020f1000b00dbcb4dcfdfcmr15137ybb.8.1702429346872; Tue, 12 Dec 2023 17:02:26 -0800 (PST) Date: Wed, 13 Dec 2023 01:02:01 +0000 In-Reply-To: <20231213010201.1802507-1-rmoar@google.com> Mime-Version: 1.0 References: <20231213010201.1802507-1-rmoar@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231213010201.1802507-6-rmoar@google.com> Subject: [PATCH v4 6/6] Documentation: Add debugfs docs with run after boot From: Rae Moar To: shuah@kernel.org, davidgow@google.com, dlatypov@google.com, brendan.higgins@linux.dev, sadiyakazi@google.com Cc: keescook@chromium.org, arnd@arndb.de, linux-kselftest@vger.kernel.org, linux-arch@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Rae Moar X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Tue, 12 Dec 2023 17:03:00 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785126594994471493 X-GMAIL-MSGID: 1785126594994471493 Expand the documentation on the KUnit debugfs filesystem on the run_manual.rst page. Add section describing how to access results using debugfs. Add section describing how to run tests after boot using debugfs. Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes since v3: - Change the introduction of the debugfs section - Add detail to not being able to run concurrently or run with init data Documentation/dev-tools/kunit/run_manual.rst | 51 ++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/Documentation/dev-tools/kunit/run_manual.rst b/Documentation/dev-tools/kunit/run_manual.rst index e7b46421f247..699d92885075 100644 --- a/Documentation/dev-tools/kunit/run_manual.rst +++ b/Documentation/dev-tools/kunit/run_manual.rst @@ -49,9 +49,52 @@ loaded. The results will appear in TAP format in ``dmesg``. +debugfs +======= + +KUnit can be accessed from userspace via the debugfs filesystem (See more +information about debugfs at Documentation/filesystems/debugfs.rst). + +If ``CONFIG_KUNIT_DEBUGFS`` is enabled, the KUnit debugfs filesystem is +mounted at /sys/kernel/debug/kunit. You can use this filesystem to perform +the following actions. + +Retrieve Test Results +===================== + +You can use debugfs to retrieve KUnit test results. The test results are +accessible from the debugfs filesystem in the following read-only file: + +.. code-block :: bash + + /sys/kernel/debug/kunit//results + +The test results are printed in a KTAP document. Note this document is separate +to the kernel log and thus, may have different test suite numbering. + +Run Tests After Kernel Has Booted +================================= + +You can use the debugfs filesystem to trigger built-in tests to run after +boot. To run the test suite, you can use the following command to write to +the ``/sys/kernel/debug/kunit//run`` file: + +.. code-block :: bash + + echo "any string" > /sys/kernel/debugfs/kunit//run + +As a result, the test suite runs and the results are printed to the kernel +log. + +However, this feature is not available with KUnit suites that use init data, +because init data may have been discarded after the kernel boots. KUnit +suites that use init data should be defined using the +kunit_test_init_section_suites() macro. + +Also, you cannot use this feature to run tests concurrently. Instead a test +will wait to run until other tests have completed or failed. + .. note :: - If ``CONFIG_KUNIT_DEBUGFS`` is enabled, KUnit test results will - be accessible from the ``debugfs`` filesystem (if mounted). - They will be in ``/sys/kernel/debug/kunit//results``, in - TAP format. + For test authors, to use this feature, tests will need to correctly initialise + and/or clean up any data, so the test runs correctly a second time.