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 6A1BFC369DC for ; Tue, 29 Apr 2025 09:07:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 384766B000C; Tue, 29 Apr 2025 05:07:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 310A36B000D; Tue, 29 Apr 2025 05:07:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0EDFF6B000E; Tue, 29 Apr 2025 05:07:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id DC37E6B000C for ; Tue, 29 Apr 2025 05:07:30 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A00E71416A0 for ; Tue, 29 Apr 2025 09:07:32 +0000 (UTC) X-FDA: 83386503144.20.52C5F30 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf16.hostedemail.com (Postfix) with ESMTP id CA815180013 for ; Tue, 29 Apr 2025 09:07:30 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZLhKupu5; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745917650; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:in-reply-to: references:references:dkim-signature; bh=l/CTNliEOqJwTU56T4iaHbVnC/zJ+GYRPKR+LThviOU=; b=YFRXI32U/oCEIpyhVW5BMI3J1rcEArF8+pEzbD/zwVl/cjGRJnA/KmYeTXj24U9GYPE4oK s+Y8rEPy79zsyD3pTxSnhRBii1KlfevRSfIn116+u4c3PklowMua3tgA46ZJ+bBAGeIhay jUe8rScyV6TkbySX9dE2YlqlTzKjdl4= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ZLhKupu5; spf=pass (imf16.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745917650; a=rsa-sha256; cv=none; b=55GPe/U3VlTkxD0/l+XsBffTT49Fkxnqd6aspFWDD682S6cHY9Q40VdEB4cZ91gOrz1RZa bhR+q1ClZ18BKE/aCbYFQzrS1XVmZLgm7zhWnQ6rWmQVJfoOE/aW7AH2HKWfqACFW9xU77 gTd6EMUXwsH7BG+nTLz6f/y5k30ZuvU= Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5f7ec0e4978so4502594a12.1 for ; Tue, 29 Apr 2025 02:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745917649; x=1746522449; darn=kvack.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=l/CTNliEOqJwTU56T4iaHbVnC/zJ+GYRPKR+LThviOU=; b=ZLhKupu5dx8Ar+jKhsFmzEQu2f2lJWvKF3MzY08T+acWtynzHRGEaAF/e5IA2Jz49G wBe4G0+kr/qDqHgEmoTgAWcoPxDjS0J/PhImWJjH2GmQwLKrjLir0aSDtdHVhijUZdOy qvqN4SmDDGOC6ydfHHENoF7HAVNUC8XDNIX5Q5KssL3ho1lgOO4NhSs2b5gjyXuKb0dA EFelsyct+KIa29UsaR/86jZ2BaekIVC8ju8eGyCkfxX/+8aXk2Q8HursyNmp7a2KPC2C YT/yJqRix56M1mccmZBnG2bpdpnsc72tY03jDXq59RFHNijfxtIlJAWlOSqYlwcxrqPk K2lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745917649; x=1746522449; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=l/CTNliEOqJwTU56T4iaHbVnC/zJ+GYRPKR+LThviOU=; b=xTIig/xwkvzWwFMnhGdTna0V+ssRhGtoIRDjkl3Axs2dtv46dm6l3JcYsihh/eUzo/ II20/pzihEHrMl9dluyUZcaGgxdJ5MZxBCVtCIwc6i6M0QN7XXy+DLCqs1zIP6QrynAL MmpIbhK7U4s2FgXzAo4IwlVcQYm8xQkftbIOo/H3RKYOwBo/Y/aRjDzBIE0cJhWgaZPc NcE6QI3xpJpNGlRubrN7hUe867rexgELAM+IXzd0YYfaLJP0gEbKXlDpS4uoSRYpfVUu y/O2nxLJ9RuF7Gr677oltq2GaTb1I4G5Giu4PYLdH7UdKgZSoc+4ZGBFh3hgiZP0wIEc GqvA== X-Forwarded-Encrypted: i=1; AJvYcCXE+M/0zE3I3htwI/FmYIeDSo29Wwc6/CjMtohDUpMDZaKiyLG8xGbC5z/ajJJglm7556EmrqW+Kg==@kvack.org X-Gm-Message-State: AOJu0YyX1Stx9e59Tw95Ed6fU2Iub3uBiLOdZtDr91QCj1hRr32zYUJW dv2RCMqfeEAFbur09D0OYzfMYAAm5ZKQY7ykNoOdxlMFw9ywJU9F X-Gm-Gg: ASbGnctL5YNuyCQix16x9HFjw/2Wk0LG5ZJgfTXwreKw/0Y1dkiMl48un84imJHHQsq IRcebb6+a6QT4N7Ufl5erdcUeqJBVALMuinaGtDPTZ1BzLkMDsHR9J5fv67EUdUJ31J5Lmgs2rD PrVeKsZjOXlnzqa/0qBd/NPNntK0DgU3caFOf0p4IKVt9JOKaNkQ4QoU16kft/xEc5ydiJiHkd5 bSBlerf7JtlBgW6fGS20otHzIumFmc2BFQB7khMY3o+ocDul0QMHzp+ia6zYQLFuA6mN92mlv4l jC9hOjUF8GNum4IDwY56pTWYNQjV1011GRVmehBT X-Google-Smtp-Source: AGHT+IFP3d8g6UkMXh2S41zSqgoHjrMtHpCWy1Cxazc8JqY0+YiFC385phZUHjSUajlRv6zFNDEcJg== X-Received: by 2002:a17:906:7954:b0:acb:6edd:b255 with SMTP id a640c23a62f3a-acec87bb9bfmr185125066b.56.1745917649152; Tue, 29 Apr 2025 02:07:29 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-acec57bece2sm108954866b.10.2025.04.29.02.07.28 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 Apr 2025 02:07:28 -0700 (PDT) From: Wei Yang To: akpm@linux-foundation.org Cc: david@redhat.com, lorenzo.stoakes@oracle.com, riel@surriel.com, vbabka@suse.cz, harry.yoo@oracle.com, jannh@google.com, baohua@kernel.org, linux-mm@kvack.org, Wei Yang Subject: [RFC Patch 4/5] anon_vma: add test for reusable anon_vma Date: Tue, 29 Apr 2025 09:06:38 +0000 Message-Id: <20250429090639.784-5-richard.weiyang@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20250429090639.784-1-richard.weiyang@gmail.com> References: <20250429090639.784-1-richard.weiyang@gmail.com> X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: CA815180013 X-Stat-Signature: 543nor6aq1pfriagsoo1x7u6z41xceax X-HE-Tag: 1745917650-873723 X-HE-Meta: U2FsdGVkX1/ogIVP/ymICocX8oOY6fNN26Hb8z0m/FZouV3fTtucJY734FaB55u6KE/mx1QyKpgqgOFpOAnCsd6m9vd4KY+VHGdmhtmaEU3jJrPsHobzTJYMw/QHsojxWT/rO+Gv+Ob08uUBNXLjNFBfq+Q0J4S1/NeV7GLQfSUDfYJWmVDMkNUMtZBq3qKuYCBL4y/AyL4C+9zOKgTczTB7q64rrTuUfLEbjGGSYa3+cgo64PhdDnYyjOmAtx2dV85d0tLNYwETLGreeCpilNQhn42eyZKZvkiiFT3bpemT8zuR+6wOpTfe8hLHxyNM2RssFuI/ebzevcI6i8ro/lD+A+cBwN2xgfumvyStvJTK/wo9Emj2QAirDa4qfHhi7tHktahNB+yTdlI/ld263TTuR2cecki70Bl1TlRYLCL86d84iWMJlrHrtQFLrrTZKiRQxtinzQqhl8Xcyu3qv6IAF7ANDb2Rvw07mwep2jzXpdW3LfkrF+3FPsvHdrh4sBWPnpX6GCopi90TkqvQ9W9bsIqaabHAJHW7LU9Y0M1PhZ8EC1F+7ZFh6yIvw/7gXmTTmMQoUDQ6f3xDacCFKXuJmFuy6z6D+BJ8zyji1Rb3+T61ecDHb51yqeTZY0/8+NI7cWsdkkzy29+JpTKIWdVzxL2Lia/1I6csQzFWhDijjAzT0jV/CEckvdxqCp1MYhwNVBF4NObF1rRqKSiHqCwPoLhg8WlNPcouexBAzZwOx0qEy4ESfshUJDStdmXUYVMCN34dCKi5LhLIUW2GOgtzYoC6qwlA3ks20S2+O91qJ+yWWHb5JSDrRxS7/XaqVMXBw9KAAS/+Xamss9ZgWSlMedGZ2Li3FJuUHq6azrqNiQAp61Z3wv7aORUL71A9RJAyN8Qhg/T+yAnBkb79T+vX7OPP5bap8L1q7kX1fwNFEk0sgxpa2r7fobXamN8kkncsy3JW7tf/40SrTN6 NFqzVFuP UWdmTsWlb3ibV3DXyk+0J8xWhjuNkWi9ztolO6x3kMbeuLD/LIzKT+zN8VldN8zVp/YQ1nEc/hb3wLnaVAsy8PG82ejOqt67MVWmMl6cGSIZ1qwYHvt6dgxD+9TRcIXg2atTcMUTPdvV4o/KmFXyDCe88ljvOnSngovAxTta4p9fT0lYEgd85k3qgyqwEVxNVsL63pbXw0sGj3MZif7wnsvGvrV1fyLRYVHyz6iWMw5KoEhxpAH+tTqw2x+mU4Izt3JIfds9PBBNgD35F9UIsyqBlxqjIE1h11vvQoJ9aCcwqvgb1jES6/EzfQUVgz4zL70X8PwPvt32hKZsshFTUU4wFCEd+UNQO4osrMQDqrZ/IbmmHCtIvd57armRGFiygvnERQunfSHnA6Lo70ta9KfOuRBh2i1mif4ucTjYahZIPzikKWQ1//uziVhSjaRlqMPM/odRo0hFDc2a96XlDRGgCo0rz6+fi3KDGCPLQ87FvNgANNz3uE2xe78CeWpee3XNCq0hGHF1sKAzyR9+zZ5SLfhvLtyQQTyNSK1mi2NjiTGpEp7NiHPYjj6nuP3WfH0dUoPa8yxS+xeKvG3k1CxoSDCO4roTJzoFNA4xam35KFUqg0HonEp2llrM7fXQiAEDNEKJs3g6Yp8Xuxyt82iJ0PahQHy06gMDz1XBFNaB7yjmpYmzzp4zNYw== 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: List-Subscribe: List-Unsubscribe: Add test to assert anon_vma is reusable when there is no active vma, except root anon_vma. Signed-off-by: Wei Yang Cc: Lorenzo Stoakes Cc: Jann Horn Cc: David Hildenbrand Cc: Barry Song Cc: Rik van Riel Cc: Vlastimil Babka Cc: Harry Yoo --- tools/testing/anon_vma/anon_vma.c | 141 ++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/tools/testing/anon_vma/anon_vma.c b/tools/testing/anon_vma/anon_vma.c index 2e6a1200e6c7..495cd02ea661 100644 --- a/tools/testing/anon_vma/anon_vma.c +++ b/tools/testing/anon_vma/anon_vma.c @@ -556,6 +556,146 @@ static bool test_mergeable_vma(void) return true; } +static bool test_reuse_anon_vma(void) +{ + struct vm_area_struct *root_vma, *vma, *vma1, *vma2; + struct anon_vma *root_anon_vma, *reused_anon_vma; + struct anon_vma_chain *avc; + + /* + * root_anon_vma root_vma + * +-----------+ +-----------+ + * | | ---> | av| = root_anon_vma + * +-----------+ +-----------+ + */ + root_vma = alloc_vma(0x3000, 0x5000, 3); + __anon_vma_prepare(root_vma); + root_anon_vma = root_vma->anon_vma; + ASSERT_NE(NULL, root_anon_vma); + ASSERT_EQ(1, root_anon_vma->num_active_vmas); + + /* First fork */ + /* + * root_anon_vma root_vma + * +-----------+ +-----------+ + * | | ---> | av| = root_anon_vma + * +-----------+ +-----------+ + * \ + * \ vma + * \ +-----------+ + * > | av| != root_anon_vma + * +-----------+ + */ + vma = alloc_vma(0x3000, 0x5000, 3); + anon_vma_fork(vma, root_vma); + ASSERT_NE(NULL, vma->anon_vma); + /* Parent/Root is root_vma->anon_vma */ + ASSERT_EQ(vma->anon_vma->parent, root_vma->anon_vma); + ASSERT_EQ(vma->anon_vma->root, root_vma->anon_vma); + + /* unlink the root */ + /* + * root_anon_vma + * +-----------+ + * | | + * +-----------+ + * \ + * \ vma + * \ +-----------+ + * > | av| != root_anon_vma + * +-----------+ + */ + unlink_anon_vmas(root_vma); + ASSERT_EQ(0, root_anon_vma->num_active_vmas); + + /* Fork grand child from vma */ + /* + * root_anon_vma + * +-----------+ + * | | + * +-----------+ + * \ + * |\ vma + * | \ +-----------+ + * | > | av| != root_anon_vma + * | +-----------+ + * \ + * \ vma1 + * \ +-----------+ + * > | av| != root_anon_vma + * +-----------+ + */ + vma1 = alloc_vma(0x3000, 0x5000, 3); + anon_vma_fork(vma1, vma); + ASSERT_NE(NULL, vma1->anon_vma); + /* Root is root_anon_vma */ + ASSERT_EQ(vma1->anon_vma->root, root_anon_vma); + /* Parent is vma1->anon_vma */ + ASSERT_EQ(vma1->anon_vma->parent, vma->anon_vma); + /* vma1->anon_vma != root_anon_vma, since we don't reuse root */ + ASSERT_NE(vma1->anon_vma, root_anon_vma); + + /* unlink vma */ + /* + * root_anon_vma + * +-----------+ + * | | + * +-----------+ + * \ + * | + * \ + * \ vma1 + * \ +-----------+ + * > | av| != root_anon_vma + * +-----------+ + */ + reused_anon_vma = vma->anon_vma; + unlink_anon_vmas(vma); + ASSERT_EQ(0, reused_anon_vma->num_active_vmas); + + /* Fork from vma1 */ + /* + * root_anon_vma + * +-----------+ + * | | + * +-----------+ + * \ + * | + * \ + * |\ vma1 + * | \ +-----------+ + * | > | av| != root_anon_vma + * | +-----------+ + * \ + * \ vma2 + * \ +-----------+ + * > | av| == reused_anon_vma + * +-----------+ + */ + vma2 = alloc_vma(0x3000, 0x5000, 3); + anon_vma_fork(vma2, vma1); + ASSERT_NE(NULL, vma2->anon_vma); + /* Root is root_vma->anon_vma */ + ASSERT_EQ(vma2->anon_vma->root, root_anon_vma); + /* vma->anon_vma (reused_anon_vma) is reused here */ + ASSERT_EQ(vma2->anon_vma, reused_anon_vma); + + /* Expect to find vma1 and vma2 in reused_anon_vma */ + anon_vma_interval_tree_foreach(avc, &reused_anon_vma->rb_root, 3, 4) { + ASSERT_TRUE(avc->vma == vma1 || avc->vma == vma2); + } + + /* Expect to find vma1 and vma2 in root_anon_vma */ + anon_vma_interval_tree_foreach(avc, &root_anon_vma->rb_root, 3, 4) { + ASSERT_TRUE(avc->vma == vma1 || avc->vma == vma2); + } + + cleanup(); + + ASSERT_EQ(0, nr_allocated); + return true; +} + int main(void) { int num_tests = 0, num_fail = 0; @@ -577,6 +717,7 @@ int main(void) TEST(fork_two); TEST(fork_grand_child); TEST(mergeable_vma); + TEST(reuse_anon_vma); #undef TEST -- 2.34.1