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 8EFC9C369D9 for ; Thu, 1 May 2025 01:31:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6AB476B009C; Wed, 30 Apr 2025 21:31:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 666AD6B009D; Wed, 30 Apr 2025 21:31:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 521716B009E; Wed, 30 Apr 2025 21:31:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 3418D6B009C for ; Wed, 30 Apr 2025 21:31:35 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 37429160A52 for ; Thu, 1 May 2025 01:31:32 +0000 (UTC) X-FDA: 83392611624.28.DDBDF4B Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) by imf02.hostedemail.com (Postfix) with ESMTP id 238998000B for ; Thu, 1 May 2025 01:31:29 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=i+oyk6Lg; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf02.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.52 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746063090; h=from:from:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=l3Jlkn+L6+Vy527xb8cl/aEZHiL3oeX/38kfJCl58mw=; b=t3zm7HuSqzjcic4N/a96+bsEgpJxQ+ddQvuE4LGDTJmOfIRfVBJOtTXsXbgx5sLAO+aIu7 jSXdMfuEgTyRRW4Uygj1UaUJxAbryVfFNuZW0GESyIjhAOillOHuuMgBb44olh4l4xBnsR 98MRgmMP5hzA5MtpgTa7fYu396OYQ5w= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746063090; a=rsa-sha256; cv=none; b=RFPamfSVVg6acoU6GDhSJ7gR3DMtHptsklDUSnvpKOgRt378xIIRvmQHi1stCal5rPn1aS nalTUGlwikjUSOWG1btcbtu8b4KUqDElZ9yW5zt8AOBPgC9VJkaSAN+ccAw58HF1FJzR3i 5ugwxl3XnJQzqYet7RrdZxB/1P03G4M= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=i+oyk6Lg; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf02.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.218.52 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-ac2aeada833so105652466b.0 for ; Wed, 30 Apr 2025 18:31:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746063088; x=1746667888; darn=kvack.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=l3Jlkn+L6+Vy527xb8cl/aEZHiL3oeX/38kfJCl58mw=; b=i+oyk6LgQL1CKn9+UhSDQc/AHzKFfJtbzDTeZvkFJmC1Hmr2eqQ/ylTNohZdOEa1LB qVvsX3YTHMen2eca439Z2x9ykPsNeAAUxFGBuLSN+WX++ScMLQG9f0ptNluF0qBjMY8Z i9BF0W0hho5uPYaxArKov4EtqLkWt4lWZRIsiT52XaLZDPfFw9wuuFYauMqG4nad9Nvc dXZ/70dejhZu1b54xdCu6hcUWcJU2XIOW8vF04Dme9IqQf43dxu/8RU8Y4m+bxS7qn4J qEB1Ob2pRC3jGcKOO2971ePygzKcjWXC0BenWClcTfk50+RidnJ0Fn7fLyoxk6OHjPuT E+RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746063088; x=1746667888; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=l3Jlkn+L6+Vy527xb8cl/aEZHiL3oeX/38kfJCl58mw=; b=iMInsJzmJNa8XLqJccSVbtFdoFEYp9X9ISqcP9Lux+3FwatrDZtT3DtOCVfSGsFhwp ZzGo4myGtVP2wKeAzXeEzOZFIJoQ4sDuH7nm9QdLT7TyAcAVDs2xk8tWDh0TYr1lFZ38 QBF38IsrQU248VLAXq9siobB9Jd5cwf+akahf4Dfej4LSIjj4prDMoVgSz/ErxAmtSko Xu5/UEI7kPi+USJLZAV0AxdsjSuJWJT544biRDz9TBdFEx28DSQn0luvho5LwAIgbr+M NgZTqzHn4IGCVvG+n1QbL+ivyoz31pSyzeYi3UwA/c9ZlcsruxQ/oK2uZmFzm8CT3vf0 2bPg== X-Forwarded-Encrypted: i=1; AJvYcCWoqPWy1WmS697P/IM7y5ktrebQsN3epWBkcR7GJ9aLoUqSeSHP/aO9+bk5zTLVtqBhPhaX31RXuw==@kvack.org X-Gm-Message-State: AOJu0YwHbzvJwlALVVkq//FNxAzotgXVVdj9mLGPROUxOVWbRecpWE6b gKdKwPsx0cGNojp83RPRgnd/QQeuJYnttX30bTDcp02NE4o2elYu X-Gm-Gg: ASbGncsxWVrnpkMuNmbbKsVEuRx5s2kBzHr/ivQV6FcEZNFxPHzAYmIEQbBbvm0H6yG yhqLrsSoltRhROeGNl13dDrdS+MtGle8ZFyGRr+WWIHB2N52Air3A5MhZnGpQX0KGkVviC7pF++ pYXFk7QqaNrxmiFwQxRjGbauS4YNaXiuMRnN+TK+BQcs8r15WCWY29PejqOVCdq4DgTYOyc0O51 /fMjfo+ji2L1Qfbw0j5WPyGu80kr1FIyXMtUW2gC43nwoaoPEg53G7DkXySIyJM7UwyWY9R4Ws4 TVR83imWEtGaVKreAipaIsh06A0HTB7yxb8YVAO8 X-Google-Smtp-Source: AGHT+IG3bH+OM9wXCWjHvrBYn1OCDPZYxnijWI9Av2ZzKZTtfN7hcHwwWdZl3Ouv3sPLYvZDmeTuhg== X-Received: by 2002:a17:907:8e94:b0:acb:aa0e:514c with SMTP id a640c23a62f3a-aceff2c1a67mr71876266b.2.1746063088270; Wed, 30 Apr 2025 18:31:28 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ace6ecf782bsm1006958566b.107.2025.04.30.18.31.27 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Apr 2025 18:31:27 -0700 (PDT) Date: Thu, 1 May 2025 01:31:27 +0000 From: Wei Yang To: Wei Yang Cc: akpm@linux-foundation.org, 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 Subject: Re: [RFC Patch 2/5] anon_vma: add skeleton code for userland testing of anon_vma logic Message-ID: <20250501013127.rzaos7co7b63so4r@master> Reply-To: Wei Yang References: <20250429090639.784-1-richard.weiyang@gmail.com> <20250429090639.784-3-richard.weiyang@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250429090639.784-3-richard.weiyang@gmail.com> User-Agent: NeoMutt/20170113 (1.7.2) X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 238998000B X-Rspam-User: X-Stat-Signature: qi8yeocaznc3psm4t5bwwo6ydjawd6sz X-HE-Tag: 1746063089-145068 X-HE-Meta: U2FsdGVkX1+b8bjnc6/z2OMJEnWZ4bRuMXzXAZ0cM4ak04fahsdI2oe5nqDwdkonw2x5hc5csfMq7gdNzQG4rtoIj6DSUQE27Uuf99a3Yhcn/D0PIEIk739oIXgNQxojQJywyFKE2IffcHRTb6o/6EXcOek5Ael6MkcKo4ZPAK5NgSHC1k+LFe8XCQTON7akwiaE4aKr1K3ob0voXsixUx5VDcLLPszIDEqnenKjtO+wSUMgZrqCjXhQbrfJtdF28BWpDSFScNWI8GPBUsg4teoCYYSGVx4SE7jwO1paKbvLwCZ9LpyusGv0y+73lI2qK7jcF7nvV041nu8rrU5h9cI2VCY4XkuNm1DkpmW/cGS66Flyo/hAoXecKK3UPkOSY+sKXlPchhcXdJANNjzw3QwZQzLASIZ+hRPGJRJXEYwcJbn9uuyQUDQqsnigxSjMesigTFzvOfPWSlxzg/i8GFZc8fYzovRXZxOhmac1jWCjgcX0OK7gBPqlFxCc9l+fnbQyGMJw5oLxuv+1GfnnqIeDNQJK6QYTFPkUxvUMjNDeTAixJPayy6TH3/ANwmbKFHUJt1MzMLSIOG35onBymgNxuCRZtlJlHJwp68EjROLPwBfipd3lzfuPMrj2SPP3qe8iy1RuLyYpwK2NrL6/LwwqZ+3ivGQiv2Sdm8hq1DmvUwU0Eart9xv7O0uJdXcsaOaE8PC4+l/v+R18tPBz3R2g1ev6c+AKSr5AxPYNBluM8cl4WX1kdrecZfP3FsayGYdKlV2wc3u1BT7C/UzXE9YNnqSq29nBQ7Jzj3tNuh8fh1/OfVrqNCjmPz5gTKbFd+6u83Oyl9yof1A3pLSBCF6Su70TVepXBdQHIet4vb2mBudGvixOUxrF/lbK5NP7blvUEYL9+7I/unpmw+w5wFHQJNgKyPBdOPAe0mCra6sC8aIMao9FOa9RAIZ94SUv2PJp731s2pFciPwBBBy WewaMUqW eOeMDL1g/hI9sONexPhj4nZrKMmxF+vYuE5AW4a0bGqON0zM94UXW0A1ze8Q4e3jpyvPtfo9vqhCNMechW2W5U/fUIbEm2cbqgOkC79YX4CaH01Uso2bS6khZPnTjAAyXZoSZoAB+dksjztz+vXxvYsASODEkPYIDsKaLxIIKIYhDRoYO6GkLvecZDq9d3ssB2xUauxRStFXRcGPuR/83qE54larsL8IZiqmHlhGqMduBPoAwO1VFdcCF0UzFwiEUEfQUyJkzzFbp5IKl1xz6/2pOYHx0XgGsHp1YyikxaJijGJphv2kD521+xmUE2oRX+4cw5CCcSKcPXSyx50uUyXAbMej/9GKEef66CEIXbZaOV23XnvUEragEQ/u+lpaWvLOtJG1KzE/QnAoc2ka7Uo8YALz3l9SJyVBSeFGyHenEtsFrQz+YbU2wZWoUMdepuphXoQTzk5nNeDZKPgelk3ckI9N9wVMCBlfB9LzRncAoiL6NS1x4SKBDG+EPEDlb1gjokGhJ0XVzQF6imInghmM8uHixTo654nGpnFJiqAJLS79ZHJ/BsfTSRG2cj98hHzYtqdwU1lSizU/B4znJGu8k2T7rfUsJl4H6wo6CxlkmroSiS1aTbMhsPSgOOqxI2hQ18M30YVPsphDl5W11RUXBo5O20PlsDQTd6T3/DLxO30lJa4CQw5UZkbsftsYNrNUrz/XS0JS+qfxCRB4U0Ma3swKT9ZR6WZ1dpjGpMENo5UQ= 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: On Tue, Apr 29, 2025 at 09:06:36AM +0000, Wei Yang wrote: [...] >+ >+static bool test_fork_grand_child(void) >+{ >+ struct vm_area_struct *root_vma, *grand_vma, *vma1, *vma2; >+ struct anon_vma_chain *avc; >+ struct anon_vma *root_anon_vma; >+ DECLARE_BITMAP(expected, 10); >+ DECLARE_BITMAP(found, 10); >+ >+ bitmap_zero(expected, 10); >+ bitmap_zero(found, 10); >+ >+ /* >+ * root_anon_vma root_vma >+ * +-----------+ +-----------+ >+ * | | ---> | | >+ * +-----------+ +-----------+ >+ */ >+ >+ root_vma = alloc_vma(0x3000, 0x5000, 3); >+ /* First fault on parent anonymous vma. */ >+ __anon_vma_prepare(root_vma); >+ root_anon_vma = root_vma->anon_vma; >+ ASSERT_NE(NULL, root_anon_vma); >+ bitmap_set(expected, root_vma->index, 1); >+ >+ /* First fork */ >+ /* >+ * root_anon_vma root_vma >+ * +-----------+ +-----------+ >+ * | | ---> | | >+ * +-----------+ +-----------+ >+ * \ >+ * \ vma1 >+ * \ +-----------+ >+ * > | | >+ * +-----------+ >+ */ >+ vma1 = alloc_vma(0x3000, 0x5000, 3); >+ anon_vma_fork(vma1, root_vma); >+ ASSERT_NE(NULL, vma1->anon_vma); >+ bitmap_set(expected, vma1->index, 1); >+ /* Parent/Root is root_vma->anon_vma */ >+ ASSERT_EQ(vma1->anon_vma->parent, root_vma->anon_vma); >+ ASSERT_EQ(vma1->anon_vma->root, root_vma->anon_vma); >+ >+ /* Second fork */ >+ /* >+ * root_anon_vma root_vma >+ * +-----------+ +-----------+ >+ * | | ---> | | >+ * +-----------+ +-----------+ >+ * \ >+ * \------------------+ >+ * \ vma1 \ vma2 >+ * \ +-----------+ \ +-----------+ >+ * > | | > | | >+ * +-----------+ +-----------+ >+ */ >+ vma2 = alloc_vma(0x3000, 0x5000, 3); >+ anon_vma_fork(vma2, root_vma); >+ ASSERT_NE(NULL, vma2->anon_vma); >+ bitmap_set(expected, vma2->index, 1); >+ /* Parent/Root is root_vma->anon_vma */ >+ ASSERT_EQ(vma2->anon_vma->parent, root_vma->anon_vma); >+ ASSERT_EQ(vma2->anon_vma->root, root_vma->anon_vma); >+ dump_anon_vma_interval_tree(root_vma->anon_vma); >+ >+ /* Fork grand child from second child */ >+ /* >+ * root_anon_vma root_vma >+ * +-----------+ +-----------+ >+ * | | ---> | | >+ * +-----------+ +-----------+ >+ * \ >+ * \------------------+ >+ * |\ vma1 \ vma2 >+ * | \ +-----------+ \ +-----------+ >+ * | > | | > | | >+ * | +-----------+ +-----------+ >+ * \ >+ * \ grand_vma >+ * \ +-----------+ >+ * > | | >+ * +-----------+ >+ */ >+ grand_vma = alloc_vma(0x3000, 0x5000, 3); >+ anon_vma_fork(grand_vma, vma2); >+ ASSERT_NE(NULL, grand_vma->anon_vma); >+ bitmap_set(expected, grand_vma->index, 1); >+ /* Root is root_vma->anon_vma */ >+ ASSERT_EQ(grand_vma->anon_vma->root, root_vma->anon_vma); >+ /* Parent is vma2->anon_vma */ >+ ASSERT_EQ(grand_vma->anon_vma->parent, vma2->anon_vma); Hi, Lorenzo Here is the case I am talking about in another thread[1]. The naming is a little different from that. * root_vma is VMA A * vma2 is VMA B * grand_vma is VMA C If you add following debug code here. ``` printf("root num_children %d\n", root_vma->anon_vma->num_children); printf("vma2 num_children %d\n", vma2->anon_vma->num_children); printf("grand_vma num_children %d\n", grand_vma->anon_vma->num_children); ``` You would see vma2 num_children is 1, but it has a child. If I missed something, feel free to correct me. [1]: https://lkml.kernel.org/r/20250501011845.ktbfgymor4oz5sok@master >+ >+ /* Expect to find only vmas from second fork */ >+ anon_vma_interval_tree_foreach(avc, &vma2->anon_vma->rb_root, 3, 4) { >+ ASSERT_TRUE(avc->vma == vma2 || avc->vma == grand_vma); >+ } >+ >+ anon_vma_interval_tree_foreach(avc, &root_vma->anon_vma->rb_root, 3, 4) { >+ bitmap_set(found, avc->vma->index, 1); >+ } >+ /* Expect to find all vma including child and grand child. */ >+ ASSERT_TRUE(bitmap_equal(expected, found, 10)); >+ >+ /* Root process exit or unmap root_vma. */ >+ /* >+ * root_anon_vma >+ * +-----------+ >+ * | | >+ * +-----------+ >+ * \ >+ * \------------------+ >+ * |\ vma1 \ vma2 >+ * | \ +-----------+ \ +-----------+ >+ * | > | | > | | >+ * | +-----------+ +-----------+ >+ * \ >+ * \ grand_vma >+ * \ +-----------+ >+ * > | | >+ * +-----------+ >+ */ >+ bitmap_clear(expected, root_vma->index, 1); >+ unlink_anon_vmas(root_vma); >+ ASSERT_EQ(0, root_anon_vma->num_active_vmas); >+ >+ bitmap_zero(found, 10); >+ anon_vma_interval_tree_foreach(avc, &root_anon_vma->rb_root, 3, 4) { >+ bitmap_set(found, avc->vma->index, 1); >+ } >+ /* Expect to find all vmas even root_vma released. */ >+ ASSERT_TRUE(bitmap_equal(expected, found, 10)); >+ >+ cleanup(); >+ >+ ASSERT_EQ(0, nr_allocated); >+ return true; >+} >+ -- Wei Yang Help you, Help me