From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C24FC05027 for ; Mon, 23 Jan 2023 22:05:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B39D36B00A3; Mon, 23 Jan 2023 17:05:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A23F66B00A2; Mon, 23 Jan 2023 17:05:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 876A06B00A3; Mon, 23 Jan 2023 17:05:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7015E6B00A0 for ; Mon, 23 Jan 2023 17:05:43 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4C34A40147 for ; Mon, 23 Jan 2023 22:05:43 +0000 (UTC) X-FDA: 80387446566.17.141BCA2 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by imf05.hostedemail.com (Postfix) with ESMTP id 3351F100011 for ; Mon, 23 Jan 2023 22:05:40 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Th76FMtz; spf=none (imf05.hostedemail.com: domain of kirill.shutemov@linux.intel.com has no SPF policy when checking 192.55.52.115) smtp.mailfrom=kirill.shutemov@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674511541; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=iOJ+KgvrCLkVGQ8VGNwPxdk7HoxrkwZ1NIJieW24rag=; b=JNKHPobyLS+7e/DfFMBBE2sFwayF9PA61Xg6tyVoAUeU3ssaw0q9KPssmx2rlDkGHUQogS YtuLwPV4J3jZEoTmJ4W/EoagEG6RkLFENFdiOSz9HHbqYAY4sJoUdqlMFAZbKD2flKW/d5 gKnFIJrRV/tSxZeU7+DiZCGqszPGCPY= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Th76FMtz; spf=none (imf05.hostedemail.com: domain of kirill.shutemov@linux.intel.com has no SPF policy when checking 192.55.52.115) smtp.mailfrom=kirill.shutemov@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674511541; a=rsa-sha256; cv=none; b=JCcjfg3fwvopHWXf1XgkD8GasLld71NMTHvGB1Pjlcsy0YHDxTCy5rQd7OPojlY5sRMEoy nxzAJK+OKpZhIp4ltNrmLf1Kg+Y0BFV5dsBOY5WtaaPBkatwlDWh+H7eEVrDvp0y8MPL/+ GCTCmluwKP1/m3zic1f0V0JJvpcakX8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674511541; x=1706047541; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aL4h23Fj04DVJyvMyBqOftpxNoBnsmucH0zYgJ3jJBA=; b=Th76FMtzEOD/MQ8Dv2lQLa4n3ELQvkWVI1xHp5iU2qPMq+e94iTKRDSh 18HRj9lIWGS6mHmi5u8NWVeF2LBvHA+I68s3P2sXkW81v1gew0GyZqz+H Jibgg4mKd1o+tUi48pnVLh2r+vL6Xt1M98A2kl7H7BJH/92kgCn2OnWS2 V9QPcyZpBymtq4Lz063lRs6xmZs57T8SrTemGGxXgiUag80btor4lsDOf LSV6aaGeBnJjHYVygiJoBzCFfom8UoA8yOIz2eMfRpW4BD5KIVgb5/btB 6By7TBEhdAG3Df82+RKoG8RYes3mN+M/P2oteCoFW4PVkFp/ykcv7fK7X Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10599"; a="326198286" X-IronPort-AV: E=Sophos;i="5.97,240,1669104000"; d="scan'208";a="326198286" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jan 2023 14:05:35 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10599"; a="694103572" X-IronPort-AV: E=Sophos;i="5.97,240,1669104000"; d="scan'208";a="694103572" Received: from ssauty-mobl1.ger.corp.intel.com (HELO box.shutemov.name) ([10.249.46.171]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jan 2023 14:05:27 -0800 Received: by box.shutemov.name (Postfix, from userid 1000) id D3EA2109B86; Tue, 24 Jan 2023 01:05:03 +0300 (+03) From: "Kirill A. Shutemov" To: Dave Hansen , Andy Lutomirski , Peter Zijlstra Cc: x86@kernel.org, Kostya Serebryany , Andrey Ryabinin , Andrey Konovalov , Alexander Potapenko , Taras Madan , Dmitry Vyukov , "H . J . Lu" , Andi Kleen , Rick Edgecombe , Bharata B Rao , Jacob Pan , Ashok Raj , Linus Torvalds , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCHv15 17/17] selftests/x86/lam: Add test cases for LAM vs thread creation Date: Tue, 24 Jan 2023 01:05:00 +0300 Message-Id: <20230123220500.21077-18-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230123220500.21077-1-kirill.shutemov@linux.intel.com> References: <20230123220500.21077-1-kirill.shutemov@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3351F100011 X-Stat-Signature: jhgjs45skazzge5oawjphzmc7pqnhwoh X-Rspam-User: X-HE-Tag: 1674511540-45083 X-HE-Meta: U2FsdGVkX1/PMBybGKAni2/vnjZL7Ub+GpesYiJgsHUhm1DJ5SDUmoZgDT+NI+ajx/PF8K6mU/OWEn3MlsXC9BOrejJ4XDWHBR3RgNVW8Kc78mn1SnfNooYJSt78YUyxOGfGuxlfsMFMQumyfpkFU5MinhDrx4Qoa3Rmj4VFct8em6Qbdz7YIQrpweijy4prh8q6Ohee9yef4p3mYCt2A0MN6kJoY41xSOoNgYLEmgzS3+uCBVdSOuyXPyyt9A/O0J+QM66e+6zkw1T4dg8BOtfbsgYtsIfVbAILf6RO920Ks9zkO/fDtH09dUASQYElu4JXvUKyzhmicq0lRJK4ygSY3BEGMOKmp6PoSbaixmvsHbX/VoQOexeQiJnHrEMgLdyw3oa0wucAUiAeG4WU93cBLiPwHKB8yqAs4lUZz3RX2g0Ip6iwCYel4eFBB5QzBHnhjw80RC+wBSIjZF5ZHj8VWAVMOChZ49/EDAK9n3PudW0kizl9O1IGuxWdAKGFYvr3hx5EAR5+teUW1qrjsQYSDk/TnOP1Vv5iz0f462cAq9wSNxqy1/Vy/grRcSEHbqRWu93uJGC70OyJhWUjTnQ3iCox1BFN7J6FTsUlGruYHjmPtzjQS0U5kUXVAm3ymDjzDgu3x/ZVk/FBBDuFk/8azz2FUNbkv3SkTGgFULEyAfUN/eYPVfytka3Duqw1PjBxIYah4zlMwNNN+kCyptoUBXYI9X1XbG/G74l42YRTI/3oVGchsncmp4INhUZPhJaW+eQ+ldRSOx3ndNnUbB/VBbahI31s8CjcTjJx6v+WgtVKAYE7ONjUScSlUNWerbi0o8hKIvQoZSzvI5Iul4fNAX49PDpwumZPd89JB2kTfDZr7mDT3uKe0/bVNYJ9OOO6b8ExmqW80VZjlfxVdW0922HZzceNSSwkh3Jx9Js3Db4Ri3veN8y5sBEaMfCWqsTIxf4E+lgAQUY3BUA brQM81j7 UJQy7ptAH/R394lAmsgly7AaJSboAMfgjS8KhgfJCTAO3uQaGoypxyOXK7A4j6+YD6fl5/jOq57LIRQ9gbpvqnn6ypm58q5pPSGT45sO+LdHVo7ObqBGSjZT0OMpj5hWrTeU5vIMuDYEg30FrTv2yyHSfIHO2gAdJW/m6am/rnvnxADuToIrA/anbkrtYd4QLyljtUd/JPFPFCAfpOEFNcZzyNFsjCV88xwR3KFKALoLbk+eAs5gICpjMkgUKIrr0FvR4SIbM0IG6OdUZ1bRidTRPL1i+eHa1YOWf X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: LAM enabling is only allowed when the process has single thread. LAM mode is inherited into child thread. Trying to enable LAM after spawning a thread has to fail. Signed-off-by: Kirill A. Shutemov Acked-by: Peter Zijlstra (Intel) --- tools/testing/selftests/x86/lam.c | 92 +++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/tools/testing/selftests/x86/lam.c b/tools/testing/selftests/x86/lam.c index a8c91829b616..eb0e46905bf9 100644 --- a/tools/testing/selftests/x86/lam.c +++ b/tools/testing/selftests/x86/lam.c @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE #include #include #include @@ -12,6 +13,7 @@ #include #include #include +#include #include #include @@ -50,6 +52,8 @@ #define PAGE_SIZE (4 << 10) +#define STACK_SIZE 65536 + #define barrier() ({ \ __asm__ __volatile__("" : : : "memory"); \ }) @@ -731,6 +735,75 @@ static int handle_inheritance(struct testcases *test) return 0; } +static int thread_fn_get_lam(void *arg) +{ + return get_lam(); +} + +static int thread_fn_set_lam(void *arg) +{ + struct testcases *test = arg; + + return set_lam(test->lam); +} + +static int handle_thread(struct testcases *test) +{ + char stack[STACK_SIZE]; + int ret, child_ret; + int lam = 0; + pid_t pid; + + /* Set LAM mode in parent process */ + if (!test->later) { + lam = test->lam; + if (set_lam(lam) != 0) + return 1; + } + + pid = clone(thread_fn_get_lam, stack + STACK_SIZE, + SIGCHLD | CLONE_FILES | CLONE_FS | CLONE_VM, NULL); + if (pid < 0) { + perror("Clone failed."); + return 1; + } + + waitpid(pid, &child_ret, 0); + ret = WEXITSTATUS(child_ret); + + if (lam != ret) + return 1; + + if (test->later) { + if (set_lam(test->lam) != 0) + return 1; + } + + return 0; +} + +static int handle_thread_enable(struct testcases *test) +{ + char stack[STACK_SIZE]; + int ret, child_ret; + int lam = test->lam; + pid_t pid; + + pid = clone(thread_fn_set_lam, stack + STACK_SIZE, + SIGCHLD | CLONE_FILES | CLONE_FS | CLONE_VM, test); + if (pid < 0) { + perror("Clone failed."); + return 1; + } + + waitpid(pid, &child_ret, 0); + ret = WEXITSTATUS(child_ret); + + if (lam != ret) + return 1; + + return 0; +} static void run_test(struct testcases *test, int count) { int i, ret = 0; @@ -846,6 +919,25 @@ static struct testcases inheritance_cases[] = { .test_func = handle_inheritance, .msg = "FORK: LAM_U57, child process should get LAM mode same as parent\n", }, + { + .expected = 0, + .lam = LAM_U57_BITS, + .test_func = handle_thread, + .msg = "THREAD: LAM_U57, child thread should get LAM mode same as parent\n", + }, + { + .expected = 1, + .lam = LAM_U57_BITS, + .test_func = handle_thread_enable, + .msg = "THREAD: [NEGATIVE] Enable LAM in child.\n", + }, + { + .expected = 1, + .later = 1, + .lam = LAM_U57_BITS, + .test_func = handle_thread, + .msg = "THREAD: [NEGATIVE] Enable LAM in parent after thread created.\n", + }, { .expected = 0, .lam = LAM_U57_BITS, -- 2.39.1