From patchwork Fri Apr 14 00:11:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ackerley Tng X-Patchwork-Id: 13210787 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 52B27C7EE20 for ; Fri, 14 Apr 2023 00:12:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D33E46B007D; Thu, 13 Apr 2023 20:12:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C97F2900002; Thu, 13 Apr 2023 20:12:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A73F76B0080; Thu, 13 Apr 2023 20:12:08 -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 867796B007D for ; Thu, 13 Apr 2023 20:12:08 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 490A9804CD for ; Fri, 14 Apr 2023 00:12:08 +0000 (UTC) X-FDA: 80678069136.22.1944685 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by imf14.hostedemail.com (Postfix) with ESMTP id 8A507100003 for ; Fri, 14 Apr 2023 00:12:06 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=mW9eVt20; spf=pass (imf14.hostedemail.com: domain of 3VZo4ZAsKCJQy082F92MHB44CC492.0CA96BIL-AA8Jy08.CF4@flex--ackerleytng.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3VZo4ZAsKCJQy082F92MHB44CC492.0CA96BIL-AA8Jy08.CF4@flex--ackerleytng.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=1681431126; 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=W+vIzhvgnDTeM5yLC6D6DMUdvSTbR9axXaSgRhroXf8=; b=D8XcP61W1qlW2aZ+wFzeo36nBfNeaLxSJ3q+yIgSgoHWkhLSnlTgGpz8c8Wp1im1hmtjmW yhq2nE9EZsMNF2d0mrj3ze9rahL0M8xc24Pw7rMrYbZQyiA2jbAsufumYdo5NWH80Ojvm9 4pumL6qf3T7ObeELKb8VIGf0qA+d8Rw= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=mW9eVt20; spf=pass (imf14.hostedemail.com: domain of 3VZo4ZAsKCJQy082F92MHB44CC492.0CA96BIL-AA8Jy08.CF4@flex--ackerleytng.bounces.google.com designates 209.85.219.201 as permitted sender) smtp.mailfrom=3VZo4ZAsKCJQy082F92MHB44CC492.0CA96BIL-AA8Jy08.CF4@flex--ackerleytng.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681431126; a=rsa-sha256; cv=none; b=K92eecyirJgWoQmZ//FgolVdfNvZ/XY7+aBmNw6K8CEy8U7ZAr3K/aLj7588DVTr8fVs9k TAZmcTkkeXuoW3tUh1DaAq8tl7JhgzcMPLccl8kMqb41R0wgcsBkfnOmcblMoqBS+LJ+aA lrWZarQ2L2coh4GCuEW2zD4CNIIUMoY= Received: by mail-yb1-f201.google.com with SMTP id 85-20020a250d58000000b00b8f380b2bccso7597087ybn.14 for ; Thu, 13 Apr 2023 17:12:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1681431125; x=1684023125; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=W+vIzhvgnDTeM5yLC6D6DMUdvSTbR9axXaSgRhroXf8=; b=mW9eVt20/JcXUsgxb+xjqD4VG4js+2q/p5hJJDDZIcnukRm0syQv/TXqiec2heBNck /LJ2OaI6hIksRPbp9XAhh99LqDjoZM2pQCkJ+bmJzc8yZHZYkwMAwFEhAsHbl30CzShC AnjRJgdI7su71kGpp2x6zyUwFmi0ZsMW7HG1IhDvuRpLPR8dBsIbCcLfLX3bb41Nf7ID fPGnb4gcd1xumZwEpzLDR6LXrZNMCwms/UiqwFrs/MG66By8fMMhSBTwwbfU9CItCsXE IVTc6CfCREM1gKWUMxH19y2K58Mf0+JvqHllDRZBSVXeFCA0+XBcsiL9bPxv2h5LcfvI JjvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681431125; x=1684023125; 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=W+vIzhvgnDTeM5yLC6D6DMUdvSTbR9axXaSgRhroXf8=; b=NgRXytijMCd6gUpV3j70UU1JdYoqDogH1MEAQjkxU3ON7lg1LWjGf6LO3t6r5ulhA+ LwxjshyM0S90sfVqyzsBcfT3FFyzjOj4MHbIyRB8YZRFlULxFyOxu1OKFtJ6+1CH6OqJ zTbLstR9QHST87EuQ01UI8wMUmQ5uXWYjfFON/igNVMftkGKzMzZlb/uoMFNrTU1IcnC VrRgTlygg7aVJfnBpTsrMq3Usjt/gR+XfbrmMnbQ6aA3Deyos8pxYGgS2QByyNNuMYB/ ArH/NXqTQBBJ9zo/sNDdx4sIxQMS4b6BQrlUyVFEum720QW7bLpLZcXOKc+kq72uiobt ZNjg== X-Gm-Message-State: AAQBX9cSnXWWTmn9biGtc1h10b1euT6giF8jHGERaL1FaxTP7dqY7oOF F/sLMdP32H2KaZ0T8c6/+0ygXxIWPbCOskD5tw== X-Google-Smtp-Source: AKy350b34CBn9n2raOJ+zF+ClQSsfsH/2Lr8AcQiejmlqBPjPibu2aqY4QIJU2kHR7dXtCx3CNEm4OqoAAxVmXTquQ== X-Received: from ackerleytng-cloudtop.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:1f5f]) (user=ackerleytng job=sendgmr) by 2002:a81:4328:0:b0:545:4133:fc40 with SMTP id q40-20020a814328000000b005454133fc40mr2444452ywa.9.1681431125361; Thu, 13 Apr 2023 17:12:05 -0700 (PDT) Date: Fri, 14 Apr 2023 00:11:53 +0000 In-Reply-To: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.40.0.634.g4ca3ef3211-goog Message-ID: <17bb8e925c08f27c627cd1f2bbb2714daf590c1d.1681430907.git.ackerleytng@google.com> Subject: [RFC PATCH 4/6] mm: mempolicy: Add and expose mpol_create From: Ackerley Tng To: kvm@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, qemu-devel@nongnu.org Cc: aarcange@redhat.com, ak@linux.intel.com, akpm@linux-foundation.org, arnd@arndb.de, bfields@fieldses.org, bp@alien8.de, chao.p.peng@linux.intel.com, corbet@lwn.net, dave.hansen@intel.com, david@redhat.com, ddutile@redhat.com, dhildenb@redhat.com, hpa@zytor.com, hughd@google.com, jlayton@kernel.org, jmattson@google.com, joro@8bytes.org, jun.nakajima@intel.com, kirill.shutemov@linux.intel.com, linmiaohe@huawei.com, luto@kernel.org, mail@maciej.szmigiero.name, mhocko@suse.com, michael.roth@amd.com, mingo@redhat.com, naoya.horiguchi@nec.com, pbonzini@redhat.com, qperret@google.com, rppt@kernel.org, seanjc@google.com, shuah@kernel.org, steven.price@arm.com, tabba@google.com, tglx@linutronix.de, vannapurve@google.com, vbabka@suse.cz, vkuznets@redhat.com, wanpengli@tencent.com, wei.w.wang@intel.com, x86@kernel.org, yu.c.zhang@linux.intel.com, muchun.song@linux.dev, feng.tang@intel.com, brgerst@gmail.com, rdunlap@infradead.org, masahiroy@kernel.org, mailhol.vincent@wanadoo.fr, Ackerley Tng X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 8A507100003 X-Rspam-User: X-Stat-Signature: ckw41gb4c7xignen4zfjri6ppjk5jhk5 X-HE-Tag: 1681431126-523512 X-HE-Meta: U2FsdGVkX1+F1s9KIHc2ygcGyya9W+PF/SpFLlM/w3nxSFaCkgSDzKnyAhRkUhQUVK7vEUO/BtDNY8aLfz19nSe4QacdzQV7sBeTqJTLITjVhgx3wgbClw2rXJUXOdUmv/iDQzbly2mKNeDBiGops0Trln6oCsVoqzDjRQaia5Iq9DOOA6lgXHoEdSEA8B9AhL08SAj0DU9e8ceHrNNo588NOYe2/xH+h7cPvB9vQEX4escMz3tL0ql8oVuN2nH2YoN55Jr5myD+FN7YLo6xeLoZpQ/Kyu+RUz6K4tjOJWgUDUUS7OtnHblYfODm1wI2Sz+4LBNHo33qkC/mrTzXBQ837JI+Ms51xbcb2/68OoKwDLr8JlW0S8juGJMxZ82W1h3FgvzoTillng1jNPrNoa8xlFc4ablPDfRLq27rfN1RhrSfMnvs/MyzS8KOoYdN+MF+8LsJlNH6R7k0vrYNsVodVl5xb15kjlJtK5RKwHVIedGtNgqBGKJMgubkEfHx6mmlii1tDQn2jKpHPMxnYuuU5Yn0JAAv9KFr9Nz1B9WoJGMAZgUiwxJqd5+2bBMkLVDN0p6S3hBPWthyTbT45YfuZHlTre+sSZXx0Dj7CFc+WTxt7bnb6fwDyeF5gH6vB1BZ0AEKde2bKC+zCu5tAOcrIIuJFQI/jVvjj87dimY2CUCX/vHevPeO3ODK4Bwrm152KvQll3UzCduXgCe2X4Tt6neSw66F58Kw09oSfuhSt+A9w2sMW6VKsZQvio6xTt8PAAKWwtULnRxKMK1k1vsIR8PnLYt2MUv2yRo7dHxrcmSgLXPkL/HxzUWAiq4jjrVGwdWmInhdfwZjo9m3NG23u3k3ucHC51QwNK4TancUHV+A7t/dmEQFfj3WDxn6T0OXrmGzr2hjJJVa+B1qtl1AKv6UKlN08OABBXI1YYL0L5/CUeYwL9mFs70r1mRWQuu5Z3hbESQhHWk37Jn mMLY/rRh i42jejmbenEmjiBmchGfBgP/E+HVt+IpSzZ6xN2A96cSGn6ZJZXzwlyGttdNkk++KabURtSoH+XlTZX6Yvf6jh4nyU/qiTfVaKBUkvLA0wj0XGX0OG6MhfG4Oy6wm51o7wecCa6Iol2EbANX5kIIFrl49IKVMKciJEZ8IQ3LthE8WWr2ykLTQJreVGprakgvsPNWlAaQXY9a+Iq6qEJOWrvS6AOuUGlOP6WfLlcwYsYSPGF/8hmkMKAVTtmFMOzrocicY+LVxQZ0U8RoNYsAOs/ZK09sI+zRNi0G4x7Du9maLuX6obfZc1MWwqDJYhtZhjFq26M9sqNg4W0cQkrYM9lTs7MlLrnOajw33LWyHTFC385Ga0ImPnPOFrBZepDYYF2YXHDpTIWVmIOR/IFzffhswwJvncxNlXvMWjieHMaurP22itxYsxYhxXMNPqV+JsoVs6ITMqLTrcfk1pKeY9z5CG/SiNlotB9VhVziis9/cQI9zvKeamX7Qx6YQ5+XZ4m1OZ7Pe7BXKxMAVVEqUN5an/iEQ4dMUazFwUdc7w0T2w/w24+VFH8GnlvnjSiaQOEHq2jliR6rHbxEOcVi6YzVKkAy2YlquzbTpJHc4eqruum9Gc6sHwJRymrl7EKQQtytoBLo4dH8m3hqB56PQ/0Sqjap1hCVCVTGSPPp9BX9Jd9L7HgsU2meMoHGzSYLnPcX6DomJGNuI2ZM= 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: mpol_create builds a mempolicy based on mode, nmask and maxnode. mpol_create is exposed for use in memfd_restricted_bind() in a later patch. Signed-off-by: Ackerley Tng --- include/linux/mempolicy.h | 2 ++ mm/mempolicy.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 9a2a2dd95432..15facd9de087 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h @@ -125,6 +125,8 @@ struct shared_policy { }; int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst); +struct mempolicy *mpol_create( + unsigned long mode, const unsigned long __user *nmask, unsigned long maxnode) void mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol); int __mpol_set_shared_policy(struct shared_policy *info, struct mempolicy *mpol, unsigned long pgoff_start, unsigned long npages); diff --git a/mm/mempolicy.c b/mm/mempolicy.c index f3fa5494e4a8..f4fe241c17ff 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3181,3 +3181,42 @@ void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol) p += scnprintf(p, buffer + maxlen - p, ":%*pbl", nodemask_pr_args(&nodes)); } + +/** + * mpol_create - build mempolicy based on mode, nmask and maxnode + * @mode: policy mode, as in MPOL_MODE_FLAGS + * @nmask: node mask from userspace + * @maxnode: number of valid bits in nmask + * + * Will allocate a new struct mempolicy that has to be released with + * mpol_put. Will also take and release the write lock mmap_lock in current->mm. + */ +struct mempolicy *mpol_create( + unsigned long mode, const unsigned long __user *nmask, unsigned long maxnode) +{ + int err; + unsigned short mode_flags; + nodemask_t nodes; + int lmode = mode; + struct mempolicy *mpol; + + err = sanitize_mpol_flags(&lmode, &mode_flags); + if (err) + return ERR_PTR(err); + + err = get_nodes(&nodes, nmask, maxnode); + if (err) + return ERR_PTR(err); + + mpol = mpol_new(mode, mode_flags, &nodes); + if (IS_ERR(mpol)) + return mpol; + + err = mpol_init_from_nodemask(mpol, &nodes, true); + if (err) { + mpol_put(mpol); + return ERR_PTR(err); + } + + return mpol; +}