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 B4174C05027 for ; Thu, 26 Jan 2023 19:38:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 53E336B0078; Thu, 26 Jan 2023 14:38:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4C6F46B007B; Thu, 26 Jan 2023 14:38:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 340B68E0001; Thu, 26 Jan 2023 14:38:05 -0500 (EST) 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 1EAE66B0078 for ; Thu, 26 Jan 2023 14:38:05 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id BF015A0EDF for ; Thu, 26 Jan 2023 19:38:04 +0000 (UTC) X-FDA: 80397960888.21.91B84DC Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by imf21.hostedemail.com (Postfix) with ESMTP id 0F3AB1C000E for ; Thu, 26 Jan 2023 19:38:01 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=FW4bnh2D; spf=pass (imf21.hostedemail.com: domain of 3mdbSYwYKCLYoqnajXckkcha.Ykihejqt-iigrWYg.knc@flex--surenb.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3mdbSYwYKCLYoqnajXckkcha.Ykihejqt-iigrWYg.knc@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674761882; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=t7f+nWaJs+UY1hAFqCQPugwXAUkaJjblKaIiT0PAHag=; b=s04+vrXaVuBgXYAWZP2U3Ii3IL79ZZ9j031g6yhdKDQbGelxCHZGhShaMANSNxXYhON5FM 9Cq0eDSCipyznQTMEL0GFUMNXQRTx3W62qLWNR5b47P9LE7vfpyc9drwUAm/yTns1QOOkG 5IiXd9DxV+X9aUM7iOmDbXT3WB3D2oA= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=FW4bnh2D; spf=pass (imf21.hostedemail.com: domain of 3mdbSYwYKCLYoqnajXckkcha.Ykihejqt-iigrWYg.knc@flex--surenb.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3mdbSYwYKCLYoqnajXckkcha.Ykihejqt-iigrWYg.knc@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674761882; a=rsa-sha256; cv=none; b=N1u5Kepsh6lp+0leM3T6yiWi1CvPFIQJKVwpMXUVvyA4/YVSVw8knuNOiAPJh59jyX9+tK 86pzAhG0yRrzhf9fnQsazWM8NnveK38SeXQ/UgUejLv8vDnWSnomt7Oa/YvE25eeBJ5wNB Nu3pNaT+ave38weMct4pW+uel5gp1no= Received: by mail-yb1-f201.google.com with SMTP id 2-20020a250b02000000b0080b9a77383fso2952138ybl.22 for ; Thu, 26 Jan 2023 11:38:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=t7f+nWaJs+UY1hAFqCQPugwXAUkaJjblKaIiT0PAHag=; b=FW4bnh2DtF5SN3S+ptflTidC3AwPB8hrKnXJfdusod4jzvXR1Q3bgv6S2FnIbbr/1k kJaCqO4VxuyGKMdYHqVT8hWkVv8xNy02JRI3nNYqz01mL8SL7V6Po3J4OaEcUTdV8T6d U8bwK2pvUhNc4ZsP459X8uhyyARwEseFOldN8jMmy9goPH8eegJ1oz/nmy4A87viAEed K1sFh2Ag5W16Q+oAksyomuvnpJ/IlE09ePBZTWNlxXbxGwhIaOL4Mw2hapKtgyiO9CrJ c0Zt54OumFKZIa1lT5MaZ/SF4EVN57QK9Y/mYR+xXLnWjhZNPHDb8wMQuopuM5SuNw1J FF0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=t7f+nWaJs+UY1hAFqCQPugwXAUkaJjblKaIiT0PAHag=; b=w75FDO9WTMXFSilinvlh15liMS1fKZN/Pj5Bi5GqvAoQZVAXW2oM/BJYc0eMb0oYLo Umo/aLm5/YwUpPrw6d6RFnzosT5pqj4GjW2NQlam1AhIj9dgd5YOoEccfl56iM5fEWnn VQMj7ROTfH9cOhtyPCjUB4urZuPnZIEgF6QIPnzCOvy8Fa8krNz13t4pUe/HnlnLVVNV 48k32iPXR9TuU2UM+Lp3XMajdWIdN0WNH9JuqdXiMlsTaPzS97yTRHyrmuuV2kyMwYpv 37OuKg6xEibea7JwHkPc10VEBm+iiDkVbAhWjLBVSy1xqWoLqcBqkilh5ECLx8GSMGqF 9qXw== X-Gm-Message-State: AFqh2kqj14JAnYBTV+gyCB121oGFdy1M0LRZwp1/C28s6F9ifr5GIinP ToaDRZcuFbKncPPNOlJFBjOrN00w+n0= X-Google-Smtp-Source: AMrXdXuUQZvJuxuPHIjcp5S1LAlHZTJ1MRrC82bz6slpJcdsTdAd3IG1wthp4gNFz/h3B6xbzxEKZLVeMx4= X-Received: from surenb-desktop.mtv.corp.google.com ([2620:15c:211:200:d774:88af:bab3:648d]) (user=surenb job=sendgmr) by 2002:a25:1fd4:0:b0:7d4:712e:2852 with SMTP id f203-20020a251fd4000000b007d4712e2852mr3883476ybf.628.1674761881114; Thu, 26 Jan 2023 11:38:01 -0800 (PST) Date: Thu, 26 Jan 2023 11:37:47 -0800 In-Reply-To: <20230126193752.297968-1-surenb@google.com> Mime-Version: 1.0 References: <20230126193752.297968-1-surenb@google.com> X-Mailer: git-send-email 2.39.1.456.gfc5497dd1b-goog Message-ID: <20230126193752.297968-3-surenb@google.com> Subject: [PATCH v4 2/7] mm: introduce vma->vm_flags wrapper functions From: Suren Baghdasaryan To: akpm@linux-foundation.org Cc: michel@lespinasse.org, jglisse@google.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mgorman@techsingularity.net, dave@stgolabs.net, willy@infradead.org, liam.howlett@oracle.com, peterz@infradead.org, ldufour@linux.ibm.com, paulmck@kernel.org, mingo@redhat.com, will@kernel.org, luto@kernel.org, songliubraving@fb.com, peterx@redhat.com, david@redhat.com, dhowells@redhat.com, hughd@google.com, bigeasy@linutronix.de, kent.overstreet@linux.dev, punit.agrawal@bytedance.com, lstoakes@gmail.com, peterjung1337@gmail.com, rientjes@google.com, axelrasmussen@google.com, joelaf@google.com, minchan@google.com, rppt@kernel.org, jannh@google.com, shakeelb@google.com, tatashin@google.com, edumazet@google.com, gthelen@google.com, gurua@google.com, arjunroy@google.com, soheil@google.com, leewalsh@google.com, posk@google.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, x86@kernel.org, linux-kernel@vger.kernel.org, kernel-team@android.com, surenb@google.com Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 0F3AB1C000E X-Stat-Signature: 3kxm6eox8fmyya1d7ri3h3k47ccs5iwy X-HE-Tag: 1674761881-362951 X-HE-Meta: U2FsdGVkX1/G9wT4KdP5xfDVTdzQEZp7pGlgWy8VT+x8jdMn7O8n2FK9rfsmUVOuKD0CtQZFK36LbxC3AGMcJoUw6BE2+xzxMD2C0/6XfhweavrS8+sBRGPCkKWfH1f4zy3rb35S5X7p38Mgud7ntBlGpCZ0OQSrRVN3JyLNSBfi/mHVov91G9zgGD53rmBZRWpijPZYtW5fRL9KxMpRt37/lBSSjQFrLtVMP9/mC2zMuKpKznDQd4xmQGzc79m30sy3OUDOagxbnosxeKDInkTygCYAA7DXIIYpmz4qQOVjhquvr0GJ/mU3TkkvOpVXtau5SMLqYYj3qxZzZ1039a0DEnymXXqpimfE6Ra7PDtylFr2lSw47v+TVtiVkt66KHtZRB0KsLIlBITuKcp0YepANwCmtEmq/dSbJ2lKOmAm47UVKGKu/cbF007DKtJ54z/Kbu24VMYQBZ2GicQYx1q75a6Vx/t0t8o7VuXbzHEAfCaY0TcGOT21Hc4YewoCMADN/vG79KbYVskpa/8omx1CWnnFgkm4spwkzyWEpD7DFbu4t3DrNaMmUBQnEC8PjyiT/c6JDcS4uVJsD0sAFmc+0p6TTM/pV8jXrhPoBh3MHkRgQ/+UEN0dpkJmwcoBKrTtpXYLYBDW+z48cMozUvmUNccRL7fkDBnOaT1Bd+kUPA5l8bGEEQDbohuLN8ov78Tsjogcx1DNwvWA0Tgx3f40RMZkwaAj01frVxhMW4oV0G049exDMFmw1qCdDS5XPNOVsMvfqy1zJujrtV6qZgh2dew9lH3ebfsikrOSP34hSUHCe/lCXSL867gt/l7yvvRLeSELFA9dcEhb4S6CJi4SyG8dzlSRJ7rNXaGHf/yt5sxACy5dxDziZdMPlJck2WQv4WFNOsR2WA1MNc+axWW2/uwUBOm8f6m78yuPgTkILKH67rMcmX6asA6p0W8QgxIX5CWG7DpaFQtzdWS fIKtGV27 +zl5UiZTAI3SoF+9patG0DuS0e8OrRQS679N5xq0itfomLk6hRZiD+mH08LUYjj4tkj2BHFhMsUZadJaheZl0tD4LRtWxDKB03MCJcO81/kZTyH2Cv60XPaCZGmTO40cAEsQDZ2RPxRclcuzdKtJZofY+Q3/jYoG4sv8reT4g0W/os3PwkR6S01wpDOnUuZ0l4FrSlUb/7MJv9Nd3JYZaeScxRPJqgE1WqeRpaf+D516lIwYwVjVmtSN+prOqmL5uEAWsN/YuON0Wnxz1T10xVtUi5wKKXQJi8VlWvGFw/04drIRrBpf96qbcBGb0JkLvvfW7o4L2ulW6X1IFn82dM4PCbrBaiCH+bY3pbRS3RS9fUH2mKu6y6hoNGdfNIxbbEly3re7CREdvIcaODy3Abjzr/BxXsuLs1WfV/3bA0L3MDbDJ7WQk/A/OnBEk8+Ls/mgfawzqxMhNTcCxbZkv3M/SDwU+zm1TSGb/nshItDYydrMCLDoXffwSgtLH62SmX21MJZHyqwAYn/tcM3X7I5uuQ4Kivg7bQGCOTr9TPdX7zDJxkxs4Jaa20SZS8UKbfVwnlTD5Btf432N0r+p//c1OsVk7gSzyzXOzr3+5/p7X9j3rcfbDgagMOy/Cx8P8uKDTthGE1LtgcWV3PQPTcnB0diPVuDofnPKLySAk0jE/8IdbOn6M8mqXgaNsspy2roqvI29KL6EZ4NbIcx2n2v6wSn5bI1BPStp1sxG2G4i0MV2KI92zpgGfiRq8lLbMUtc/WKATKU/Rgd+kGMFUswYRI1ts0Dx8u0YjVme9a4ATCGBM0G+c/VtcmGvx1HoxIz+bH5Na9doK8OzZaEIr9gFzf/8XHhc7DkRW 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: vm_flags are among VMA attributes which affect decisions like VMA merging and splitting. Therefore all vm_flags modifications are performed after taking exclusive mmap_lock to prevent vm_flags updates racing with such operations. Introduce modifier functions for vm_flags to be used whenever flags are updated. This way we can better check and control correct locking behavior during these updates. Signed-off-by: Suren Baghdasaryan Reviewed-by: Davidlohr Bueso Acked-by: Michal Hocko Acked-by: Mel Gorman --- include/linux/mm.h | 40 ++++++++++++++++++++++++++++++++++++++++ include/linux/mm_types.h | 10 +++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 8d636e895ee9..abb31103d060 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -627,6 +627,46 @@ static inline void vma_init(struct vm_area_struct *vma, struct mm_struct *mm) INIT_LIST_HEAD(&vma->anon_vma_chain); } +/* Use when VMA is not part of the VMA tree and needs no locking */ +static inline void vm_flags_init(struct vm_area_struct *vma, + vm_flags_t flags) +{ + ACCESS_PRIVATE(vma, __vm_flags) = flags; +} + +/* Use when VMA is part of the VMA tree and modifications need coordination */ +static inline void vm_flags_reset(struct vm_area_struct *vma, + vm_flags_t flags) +{ + mmap_assert_write_locked(vma->vm_mm); + vm_flags_init(vma, flags); +} + +static inline void vm_flags_set(struct vm_area_struct *vma, + vm_flags_t flags) +{ + mmap_assert_write_locked(vma->vm_mm); + ACCESS_PRIVATE(vma, __vm_flags) |= flags; +} + +static inline void vm_flags_clear(struct vm_area_struct *vma, + vm_flags_t flags) +{ + mmap_assert_write_locked(vma->vm_mm); + ACCESS_PRIVATE(vma, __vm_flags) &= ~flags; +} + +/* + * Use only when the order of set/clear operations is unimportant, otherwise + * use vm_flags_{set|clear} explicitly. + */ +static inline void vm_flags_mod(struct vm_area_struct *vma, + vm_flags_t set, vm_flags_t clear) +{ + mmap_assert_write_locked(vma->vm_mm); + vm_flags_init(vma, (vma->vm_flags | set) & ~clear); +} + static inline void vma_set_anonymous(struct vm_area_struct *vma) { vma->vm_ops = NULL; diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 2d6d790d9bed..da983aedb741 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -491,7 +491,15 @@ struct vm_area_struct { * See vmf_insert_mixed_prot() for discussion. */ pgprot_t vm_page_prot; - unsigned long vm_flags; /* Flags, see mm.h. */ + + /* + * Flags, see mm.h. + * To modify use vm_flags_{init|reset|set|clear|mod} functions. + */ + union { + const vm_flags_t vm_flags; + vm_flags_t __private __vm_flags; + }; /* * For areas with an address space and backing store, -- 2.39.1