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 B871BC3ABA9 for ; Tue, 29 Apr 2025 09:07:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 159AD6B0005; Tue, 29 Apr 2025 05:07:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 105F16B0006; Tue, 29 Apr 2025 05:07:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F35086B0007; Tue, 29 Apr 2025 05:07:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id CF0BE6B0005 for ; Tue, 29 Apr 2025 05:07:25 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 7EC00BCBE8 for ; Tue, 29 Apr 2025 09:07:27 +0000 (UTC) X-FDA: 83386502934.21.9A64316 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by imf11.hostedemail.com (Postfix) with ESMTP id C1C4B40008 for ; Tue, 29 Apr 2025 09:07:25 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eVq6U8IB; spf=pass (imf11.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.41 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=1745917645; 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:references:dkim-signature; bh=oOgSDV/bcpxRmLDQ1XOU5EVIQgVB/YDdw/If1JXjV3g=; b=pG92lJRktxAEnzrr8z+mFVgbkyKciAqhXVZjinXcYcllJVGeY4mXy84GPXL4UNA+c7DJlB JA8ppcxuiIbhLJNJvdAyE8EzvN/GdyKuv61wqy1w5FwOmmWkFsyV7SxqcL3f/PbWUeAobu IQoXztgD9KG018qqFMDFZx4inbDIdQ8= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=eVq6U8IB; spf=pass (imf11.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.41 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=1745917645; a=rsa-sha256; cv=none; b=6W2rgSZ/ZNlSFcS1JNPRdYWPyeOEQLTCoPa2smhkJC07zqNuIy/m3pjp7vAqDNOHpIm8Zs X6LTuroPPJ0A4vIJdLIbosnLmqbedWmfWrc5ZmKOk8FOnnT6PUUc60drIkW0TDL5gVOJTR XiQoxkIZYBel+7VdtX9iisrzSoK+7lc= Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-5f4ca707e31so9544229a12.2 for ; Tue, 29 Apr 2025 02:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745917644; x=1746522444; darn=kvack.org; h=message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oOgSDV/bcpxRmLDQ1XOU5EVIQgVB/YDdw/If1JXjV3g=; b=eVq6U8IBpfG5AUUb9KCzHSFfiBGkAcO0a+pSbnTnC4BrUWUxK29ybW2FYrFCWhxJth qS8eDiwrCLA01DiA5p+jGtVf4vYs6+j6fMbe49ZOsY+3TbuINOFVI/EJIO/oC2O8RlGU ifADA+3nfp2xV0+MrFhwVT2u5S5ICXCf5Y/t7MZFd1GfkPsSFXt7hAmupIzR/JdyXhdJ FE5rgybFKcAiFXKpmBzn1d/31ngZbthkiCLg/CGgSCocIQt4uX0xG9yxWUZiSDmOoRVN jocp4Y2DFoSiTWDF55s98bxYplcQ6yBXU/KhUpQo5U1rAggssvZj5weHLf0K8FJdE+t3 zhag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745917644; x=1746522444; h=message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oOgSDV/bcpxRmLDQ1XOU5EVIQgVB/YDdw/If1JXjV3g=; b=ElNtM5ARZk/xDWmB6dPlC7T6K7/Pk6gTKg0LyxwBMdZtXgUi5/KqXYtVllE1SUfvIE dNCFRcEVzK+0sSvR72Gp10ttm9WRCDTT6jYGTmnusVBzJmkuBfQOk2XsjcEUH4oUZvVA KvR0lN7wbDx7K1RcpVpgVUOz+rkzqk6T21o+5LHiLVnjV8XPz/wgoAYFjTAG0onqi7Fk F0OGS9hAiK6K1zmki006vTDKCnI6gKpIVTXsW4bh5MGnMUbr/X8XfjnZ+1keb3NaCxqS 2oVagVxhaK7YbBYWucgcFLGzNbbj8U094E323l7a4i22u7+mrSI04hS5jMIpOZRBdkBb OrZg== X-Forwarded-Encrypted: i=1; AJvYcCXGlrwZskkgqT1CN/JiSsGnggrGW8mfQmn7ZhKCaevlrhM8aNh4JodCNUYofr59Ll7IV3qlXIR4NA==@kvack.org X-Gm-Message-State: AOJu0YyqsPd68r06OU9lna8p2pJHKTO3/2w/2U4e6ISEO7eanOKDbyd7 +CmFPUzwkX5sHJHrRXZlDvFJ5k2VvD6yU9lvMX+gUKHkbvs94FPT X-Gm-Gg: ASbGncsQNH4kaaMmkeUfl/Ly/ceNUhaongtKctJLcxAO19f8fDQF5C8QtyPxtsfGf7z 02dd/wcfEnEiJCHVoZjvwowVzpxq07HMKIfcExdWyF2B3wuinTVbAnkmfS5csDJGzxC7uj17lAH ho+qiBAEuKd4zx4o6jT//Eqan8UwkF/tumFwuKHMaMwpB7mbCYTt+y6N3rUYW5FysyTVZxqk4tG pO7T5iCxDk3swVNfSvVbQezVoizf0u2rO8K0Y+XmQXIfspFPhvt1EkYdpFiSFl84+99jAVYpIa2 Eszybz5E8eSAM2vtqJSwLlp34VR66/Y7lsSVamaY X-Google-Smtp-Source: AGHT+IGLG4IcIEae9kUJntP4bRGsEon4WkiSgdjH/zRBbp8+DdhrWYZ8FRzK+65rbPSpyw3RAidspQ== X-Received: by 2002:a05:6402:3496:b0:5f4:d4e7:3c37 with SMTP id 4fb4d7f45d1cf-5f739594b2fmr9843570a12.6.1745917643992; Tue, 29 Apr 2025 02:07:23 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5f7f81f4dc1sm2276597a12.5.2025.04.29.02.07.23 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 Apr 2025 02:07:23 -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 0/5] Make anon_vma operations testable Date: Tue, 29 Apr 2025 09:06:34 +0000 Message-Id: <20250429090639.784-1-richard.weiyang@gmail.com> X-Mailer: git-send-email 2.11.0 X-Stat-Signature: ie44ai9tsfa1aaxqg1majy5me3e119n9 X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: C1C4B40008 X-Rspam-User: X-HE-Tag: 1745917645-443033 X-HE-Meta: U2FsdGVkX1/c2GP1RhkyD2e9AOrf1ViWJqCmJ98D6KLFSwhN6qm95/ozLZ1JL/wxCwQ57OOulqvWQx7qDrXECo7uBWrWQJF7IEVKu9Pv1a421+7RmE49W+lCwt+qSdCBQjuFa3TM3se+Ca2wK6eDIylLawL8Gix7i1KGzjt9lP8LyETJk3Ag4ksrdd0AX20yUGBbdixsXuS8XGRxrUVlnP0MsNIeE1fZKkMw87BPcqADR7o7Tdv7FTGh0fehcs8Slk/ezgxyW8FffSpf4h9rXF03fgu2fPd7A6JXVhJyfuPPMi7/TfwpyB0XtXqA3oU7zwSqJoAkDxLUDc4IxiWamIDmzSlM5VilMXGlyQmJgClW0whSqIP1JmJkHgYW1e0jzWzUsHUH5F0ZJh9V4EP6JLTwIs6pJc4V6Lug92aaN/KizqIiKhY81t2A3eqbCUtQcwd6eVXNmnJ9GRhJoWfhil2d0ZOjjRtQPrARk0CH3NNzAMAF03qn3ArCpCPdK4laYAQO9kvFclLL0EHsA9+BTElprjC0tJHXW0QatQoIwVgOS/OQEJYe3Qy0369YaV+qJY3AQ8KKR/+V8rTaQaCQLYE2oTBgmfW8bbKiGwBIahpSjYKlusAfX0cL+L5wGO5/dtIXD95yDl/i1juyMy/G3r85t4caHJ311rInwPpCNBpkvm09DIVYi7lpaR8Jd2mefO0tny7Q1ZZPZNjzZgQ+e3pu307Za2uJFABLJJ/5TiBfTEG/QURgsMENAhaSn2x7Ot3aSVgGmm3jXj0r82pnAdm491AQtfY4Prl+ummnax583AwP8OSHUeCAk3nu2MMhpGN+oqhiyr0yflaHZRzWsJ2GBKQMIbF6BC2Zz2gvugAlfIxyHe8A04klSQ49bc+Vwoz/iTz6XGNlwAq8frkEPvZ1qBZCzAP+GJQuV0v1Ko3Y1rHCOABh4oFReev4J4gFkjMxq3Fbd+HSYaJyglv 5MUumrdi kZRgACzbJN/cabBddYzcznfPNAbHdAsHqqPyxYWbKaQCzvlylIBFJsDyZt+itfny88AgJDIUMSUviNfxwAIkKnUyI/45q5BZBYQu75yBvbVJfp7cR0/EVwhjpRa0NzhaK9jJ1VQsCyv6PuJM3PUbRmYjiPTzzLo4eDU65AE6FN6bMJngdVKwDtyTwhRy3jrCgQuvr8Dtnjx58B+e231UgqRI4hJF672ZbYeMbC0tddKY+QUOlvTWfn5amADz8uT1N37AjFxqPAkkDDJYB0x3V9SFT/asdEoINhlXHc4wy1nOW5xdbKEavn9nhqu0T9N+VJhxwR0Fm+kKofFu0pT94zLJwUbt4nLYDIfQlR8mSieIN+SlC+fqELsmVO0pDOv7h+P8UjWU7jO2UAYQsOPH+tUA9wVoigsuThyD/y2isV4DT/c7N1VypdFBr/Aq4TdW9j/OIMEQQQMqPmpLTGZWur9HGlK6otdxNbnjAyjjiQTfPsIrjtnZuwIdv+0AD3wH1o3O3 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: There are several anon_vma manipulation functions implemented in mm/rmap.c, those concerning anon_vma preparing, cloning and forking, which logically could be stand-alone. This patch series isolates anon_vma manipulation functionality into its own file, mm/anon_vma.c, and provides an API to the rest of the kernel in include/linux/anon_vma.h. It also introduce mm/anon_vma_internal.h, which specifies which headers need to be imported by anon_vma.c, leading to the very useful property that anon_vma.c depends only on include/linux/anon_vma.h and mm/anon_vma_internal.h. This means we can then re-implement anon_vma_internal.h in userland, adding shims for kernel mechanisms as required, allowing us to unit test internal anon_vma functionality. This patch series takes advantage of existing shim logic and full userland interval tree support contained in tools/testing/rbtree/ and tools/include/linux/. Kernel functionality is stubbed and shimmed as needed in tools/testing/anon_vma/ which contains a fully functional userland anon_vma_internal.h file and which imports mm/anon_vma.c to be directly tested from userland. Patch 1 split anon_vma related logic to mm/anon_vma.c Patch 2 add a simple skeleton testing on simple fault and fork Patch 3/4 add tests for mergeable and reusable anon_vma Patch 5 assert the anon_vma double-reuse is fixed Wei Yang (5): mm: move anon_vma manipulation functions to own file anon_vma: add skeleton code for userland testing of anon_vma logic anon_vma: add test for mergeable anon_vma anon_vma: add test for reusable anon_vma anon_vma: add test to assert no double-reuse MAINTAINERS | 3 + include/linux/anon_vma.h | 163 +++++ include/linux/rmap.h | 147 +--- mm/Makefile | 2 +- mm/anon_vma.c | 396 +++++++++++ mm/anon_vma_internal.h | 14 + mm/rmap.c | 391 ----------- tools/include/linux/rwsem.h | 10 + tools/include/linux/slab.h | 4 + tools/testing/anon_vma/.gitignore | 3 + tools/testing/anon_vma/Makefile | 25 + tools/testing/anon_vma/anon_vma.c | 773 +++++++++++++++++++++ tools/testing/anon_vma/anon_vma_internal.h | 88 +++ tools/testing/anon_vma/interval_tree.c | 53 ++ tools/testing/anon_vma/linux/atomic.h | 18 + tools/testing/anon_vma/linux/fs.h | 6 + tools/testing/anon_vma/linux/mm.h | 44 ++ tools/testing/anon_vma/linux/mm_types.h | 57 ++ tools/testing/anon_vma/linux/mmzone.h | 6 + tools/testing/anon_vma/linux/rmap.h | 8 + tools/testing/shared/linux/anon_vma.h | 7 + 21 files changed, 1680 insertions(+), 538 deletions(-) create mode 100644 include/linux/anon_vma.h create mode 100644 mm/anon_vma.c create mode 100644 mm/anon_vma_internal.h create mode 100644 tools/testing/anon_vma/.gitignore create mode 100644 tools/testing/anon_vma/Makefile create mode 100644 tools/testing/anon_vma/anon_vma.c create mode 100644 tools/testing/anon_vma/anon_vma_internal.h create mode 100644 tools/testing/anon_vma/interval_tree.c create mode 100644 tools/testing/anon_vma/linux/atomic.h create mode 100644 tools/testing/anon_vma/linux/fs.h create mode 100644 tools/testing/anon_vma/linux/mm.h create mode 100644 tools/testing/anon_vma/linux/mm_types.h create mode 100644 tools/testing/anon_vma/linux/mmzone.h create mode 100644 tools/testing/anon_vma/linux/rmap.h create mode 100644 tools/testing/shared/linux/anon_vma.h -- 2.34.1