From patchwork Wed Nov 22 21:11:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465455 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 26E0DC61D97 for ; Wed, 22 Nov 2023 21:12:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C2016B0632; Wed, 22 Nov 2023 16:12:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 871B56B0633; Wed, 22 Nov 2023 16:12:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 69D0F6B0634; Wed, 22 Nov 2023 16:12:11 -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 5DE666B0632 for ; Wed, 22 Nov 2023 16:12:11 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2EDC240501 for ; Wed, 22 Nov 2023 21:12:11 +0000 (UTC) X-FDA: 81486838062.24.5601F48 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by imf14.hostedemail.com (Postfix) with ESMTP id 470CC100020 for ; Wed, 22 Nov 2023 21:12:09 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YT0tcnhx; spf=pass (imf14.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.194 as permitted sender) smtp.mailfrom=gourry.memverge@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=1700687529; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=UftY+9nJn82Vz5RJpbG87UiQLd2iCLBgMyI8O4iubXI=; b=eq/4dX19wL2FHSPBnPlgbfY2yjz3OCuBygCR2mJt+WJTOYH97I4lLknFa7SnwtlJtFLMvD RfCkxF4RDNaGafC7KS0V2kqxucecSLwEL8EErZhv8oy//I3rlHAvndeX+yw5OI6aBXYqL7 NIp27dRlAVduanMYog5McpWXbfTHGdQ= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YT0tcnhx; spf=pass (imf14.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.194 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687529; a=rsa-sha256; cv=none; b=lDBXznbzKSl3sYyHJHWolMBqswJLRpbuduIsrqsgfRtZIh6BaaPlQ9DQx32EfmgRJ+t8oq L+VYFjWlM80QMLJLGByWvOmt1Y9fQJtwJqwi5dBHNoBVQ3LYVqNA/ivQMqKJEBWAeqaqEP +ZM1+XV2TWC//aWny3FqcTaLhRo4+1M= Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-6b20577ef7bso244175b3a.3 for ; Wed, 22 Nov 2023 13:12:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687528; x=1701292328; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UftY+9nJn82Vz5RJpbG87UiQLd2iCLBgMyI8O4iubXI=; b=YT0tcnhxha0mwV6ga2o7OHguSEb5NZkEeZbH6iLugoERexG/O5RLZRsUQc2rOinvHB AH8b5An+EDGAu7Np2mkHl7WDAiugXYvJxP4GaSexOFXbrjfmuZH4oPMfMZ2LhcDC7vhB AAPIceMPOm33/czGAu8IRKPUGE13VnOJWgdFtW9ykFZUSKuiPXkwU0nJ+Ma3+kVzio2X /8qDa82T/SVgMRwqdCtQr0l5LpYMDV/mx4Q6Hh2SVuuBak/ZuMs/Sfs0bEaf7XiN8C7M UX18wmkZ7tn1xglkcLXBx+7LJGZ0nViYCDeTGRQX9r3tWI6p1ZU0a8SsG11OTzn2nXrA o/+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687528; x=1701292328; h=content-transfer-encoding:mime-version: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=UftY+9nJn82Vz5RJpbG87UiQLd2iCLBgMyI8O4iubXI=; b=vJ758Kv/m4FlNiFVP0YRQj+apUoG7II1DTh0y+EapyJ0OQePN+et8O6WOKjGzjBNDo A3mEGqAa2XMq07n+96hEqKAs6CiETQRG6Bl5xrhPByQpLjlIcTS02INYn0VIfQWOH5Ct YAsqDR1mqZis40iU48v2hhOcYQFJ5PyzEmo0+l1rRRKt2YRBxi+0H2p3O/lZe7/r/gAM 9AXZd5fuTiGwXENRpUBNvvGLzOJKyhW/b4cM0WwKxSRxVv+A4e3eT2LYTm3D0MeMFgD7 19VSSens8HK/6rD8jIZgxqKE751yuvAdXwb7cqdA+igEuOeM/WPk+7WmG52QouUzu+Lx ZYfw== X-Gm-Message-State: AOJu0Yw6OOLKwjFTSNVRj/8FxM9EDzQA6NLsHXXWFpd4fKX4SKlWFdhm XlGZ4QvAXbSpDv/Z8qXlxPLhBED33oGD X-Google-Smtp-Source: AGHT+IFApmrVmTMi/koEr4L/CLh547UBRzR9U2yTau9qj52IoeLKDXr1/nWf98+BfkPjiCFsngGxIQ== X-Received: by 2002:a05:6a00:4ac7:b0:6c2:cf23:3e21 with SMTP id ds7-20020a056a004ac700b006c2cf233e21mr4101209pfb.17.1700687527998; Wed, 22 Nov 2023 13:12:07 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:07 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 01/11] mm/mempolicy: refactor do_set_mempolicy for code re-use Date: Wed, 22 Nov 2023 16:11:50 -0500 Message-Id: <20231122211200.31620-2-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 470CC100020 X-Rspam-User: X-Stat-Signature: zyisuz4fe4buezgd7dd8hhadee1ep4ac X-Rspamd-Server: rspam01 X-HE-Tag: 1700687529-760898 X-HE-Meta: U2FsdGVkX1/Nmu4r1W3tDoPfgz17wWnA1ll3z/uO+IPBnQ563yXBepKD0a+kWBeXDAEdUdpFWk9uZX+o2yspN0oGGE12ggCW9row4wtiOxDttWnZEjjvQUIIQ09ptfIer/mhgDGbkT/P+dqld3owdk55O2tc5y7rM3Lkj699tUqUWxJbb8nFwHIYZ56VGIYL+XMFZUlQLZ7jx/N6uwJqdNtEi8pUZa5V7CO+fU9wRxhKVQcC46QST75sCoP0KQibkAHpEL0P9RVxdE8c10gc94UJfWw6yV/ucLC8rQBR4BdOEkk8TUQBTaqgJq7vC2FE8YnMic80EDd1hU5ct/DIi7ss9hHx1ahemmLEcyzsxLDJr7rrt1Qlc4oEBDylyNApFXcoQ+rROUFeM9ZqEi1qHXWDIR3fqeZ8Ulu0YL/k7ED7F08wy51iKJsRzM1WVTO3m4XL5e0FBVMF6SfetXnjVzFRp6hMSUW4rvaBWgP7Xyp/7EVnGmmHOuG7y9zcw3BpkqadxtpiCIwfp66d7mlZ8luCDeY6hcluyNTY65olltqfta3RmU7hi6oafMbeqDpNK1TySX9zBkAOLoxydXbfZD5O6qjBgAPWoNDteuwCd4LFetPxNiYQcbWv+n6X5Vx5O4sZtqrNp6WzuzulauQ5TfNkzLPzZ3Qkt7koo4Tadanah9yEIfJbJdeIBD5yKu+GxgiQa7GDLk2hevpdSMx9zUfMU5qmbd7o07IOrFEt4aZG+theGAbFgBFlRkq3NFlbLJRdUeQVrKpLHg3O7lxICFLdjHPYuv6WsZ6RrgfbfTnT29BPXDpMA4KebObvYAz9gVY1+KeVdag0Y1BJCmVWx377unJCBVsKp+c/1xWHnsurZh4w1wZWx0DM3+VtcU2gOEAC3dLquRY/CLkqkXo2MDurlDA+L+Asx/rSq0czZFddl49vJrQtDFLw62n1CCvoz+3JldwnZ/mgtqkSGpm aKh0noyh Z2mNWtIB6xerLQwc/dV0aYjVxpdC7TMJ5J9lH4LrbEiepcYp84ViT3bxkI0RATHeyX+pgurGK6tBSHRrHx7JZ2E5Y3HH7kWy1Z3H9Ru4E0bsAisFSnXDicBEedF4LA2cYrcddC42L+XEAzexcIPcTm59nBqVQ2AJCjkRKRpCUhwl5V8neyX2ciNKNC2oBSDZLzooty7iGLEXJqO0kSlnAg2AdDRdHUjzIhlp9IfBsNvPiL30A9Zt9Pp1yy07viT1jgoGQiPXgyT9/FgeteccwSFjnvBjULTGga/jtbSUIBFadh9WMmERgG2Jub9QQ1iFkilj0xTGy6UKUOAjFRCPHOpznRCwfeQFHaOKcNt9H8ku0iWu5LFVUGaO6qm/8jwazAEWsI8KjAWohVnBH79YZLC4KRnOR2oZco4BwZQJ0kvSJ/fb60F8WXN+RMnKfhnbU4NBol4L/TyIE75P7U2B3+ds3xEkrgnNv1W/Bu/2D47l7K6Dq2q/tSO0VCQ0vmHDX37SUQOkKm9rW9L4= 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: Refactors do_set_mempolicy into replace_mempolicy and do_set_mempolicy so that replace_mempolicy can be re-used with new code, not just the system call. Signed-off-by: Gregory Price --- mm/mempolicy.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 10a590ee1c89..410754d56e46 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -809,28 +809,20 @@ static int mbind_range(struct vma_iterator *vmi, struct vm_area_struct *vma, return vma_replace_policy(vma, new_pol); } -/* Set the process memory policy */ -static long do_set_mempolicy(unsigned short mode, unsigned short flags, - nodemask_t *nodes) +/* Attempt to replace mempolicy, release the old one if successful */ +static long replace_mempolicy(struct mempolicy *new, nodemask_t *nodes) { - struct mempolicy *new, *old; + struct mempolicy *old = NULL; NODEMASK_SCRATCH(scratch); int ret; if (!scratch) return -ENOMEM; - new = mpol_new(mode, flags, nodes); - if (IS_ERR(new)) { - ret = PTR_ERR(new); - goto out; - } - task_lock(current); ret = mpol_set_nodemask(new, nodes, scratch); if (ret) { task_unlock(current); - mpol_put(new); goto out; } @@ -838,14 +830,32 @@ static long do_set_mempolicy(unsigned short mode, unsigned short flags, current->mempolicy = new; if (new && new->mode == MPOL_INTERLEAVE) current->il_prev = MAX_NUMNODES-1; +out: task_unlock(current); mpol_put(old); - ret = 0; -out: + NODEMASK_SCRATCH_FREE(scratch); return ret; } +/* Set the process memory policy */ +static long do_set_mempolicy(unsigned short mode, unsigned short flags, + nodemask_t *nodes) +{ + struct mempolicy *new; + int ret; + + new = mpol_new(mode, flags, nodes); + if (IS_ERR(new)) + return PTR_ERR(new); + + ret = replace_mempolicy(new, nodes); + if (ret) + mpol_put(new); + + return ret; +} + /* * Return nodemask for policy for get_mempolicy() query * From patchwork Wed Nov 22 21:11:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465456 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 D3685C61D97 for ; Wed, 22 Nov 2023 21:12:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6509B6B0635; Wed, 22 Nov 2023 16:12:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D8D46B0636; Wed, 22 Nov 2023 16:12:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 42BE76B0637; Wed, 22 Nov 2023 16:12:20 -0500 (EST) 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 2907E6B0635 for ; Wed, 22 Nov 2023 16:12:20 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 071ED1CC6F3 for ; Wed, 22 Nov 2023 21:12:20 +0000 (UTC) X-FDA: 81486838440.04.00ED9CC Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by imf15.hostedemail.com (Postfix) with ESMTP id 2BB5CA000F for ; Wed, 22 Nov 2023 21:12:17 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E18UWO+3; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700687538; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=GABulzaAiHjU3X3l/c8xxKNbyTu6XjRf70gPWHFnEeU=; b=qTvQnpQcD7RqFXcg1e2U5DBy7sQ/UCDg+33YOjjF4cHytOCHOAs05JakTcNqqFf2alR9ah /ycThhSf79AIVWGtEmf2SpFLCKOfDTzToHvjJ/FKy96UVSMAAhSxTmXgdCatf8MKPPRygL Krpf3w2RoXxhxETvQ3k2xuzyUQXnTGw= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=E18UWO+3; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687538; a=rsa-sha256; cv=none; b=Hv2jHnkQnaRq9/AjZ8fTDiKIiH9vkG7/dK0VdAqxaQF0TDkLuaj2+b1B1WzXn7nNsfc1VV 0ru9MXy+gClLM3LrbMpRfr6/NYnPdmW0erhP27UfRejHnhjHyyUiaU1EaNQfp1IcZBWpbk pxYooW78LFqPdqAjMNt9Nom7qRcl9AA= Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-6c3363a2b93so257894b3a.3 for ; Wed, 22 Nov 2023 13:12:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687537; x=1701292337; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GABulzaAiHjU3X3l/c8xxKNbyTu6XjRf70gPWHFnEeU=; b=E18UWO+353mha9CH9iZ/Gr3TqmvEd/8SErLjoqR+Vu8CbsBnwUUpNlAsGFwcgrMSNi eZG6Bixm+ky7H7qDyb0dA7EabsNLhDWe/GP7PGhu8Ft3zDzTMLlyBbIfEU3iAYuuhZX4 40zNE5MZIZJHiMs+AFbQNbB2mc/6bjf+fGx8A7iYzklKF2al9boFAGZMHeQjlkLDaKAb SO1gkg4XoR18hv4zydPOvE6HHBS16kIEqZR/94pPpCuBjCbgvlZcwlta2XCWPs0c6K1h 905OgO30gEhSAqSt8tXqTEGmHDhvZ6H8S47RZbG2LV99ska/3ojLJcrg0IkSdvUXkzxl 6o4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687537; x=1701292337; h=content-transfer-encoding:mime-version: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=GABulzaAiHjU3X3l/c8xxKNbyTu6XjRf70gPWHFnEeU=; b=R4pjQdWxk049jlFVzjuNWeRNbJ9wD1Q6oUQxf82i75wee41ifsbtitwrfXa2i38+I+ KvJnYJZtJsBfzEJJHogWCmnMmnIvyYn676Tnx4A9ImL+pvywEVj3lI4OF0KWPwzLZY0L MezBEQJ3ymGLsFTs8xZIpe8IjqKZLCI5m/NnHS1XAMCJQ/U7efISj3vDzhUf7UHFDG86 a+ZdT3hhbYdtpl0H8r0OFmtLNZ758tJ3MJkckCQ7TGIA61WB/ENcmo/ZZ6/+XntMWErm /IbTOT7bgdmX4dsyRw075VJxYIagaHLSYD6OqYgfK81PivUCv47CSqXS83+wvtyd3uaZ WOfQ== X-Gm-Message-State: AOJu0YyhYg/f30GsH51fcalimIMEb3J55sgvsxzSt0Ce6vsvs6COOd9q zmNSRBb2Cpbfcn+PCQ5XaZ5UW13oA6Os X-Google-Smtp-Source: AGHT+IFXvdmudROHD0YlWi+YK0a7lcqiiD79ewyUHoexoGYHQI8f+8OjJBq0l9lLV64qzqt5Crv6dA== X-Received: by 2002:a05:6a00:1916:b0:6cb:bc1a:dcff with SMTP id y22-20020a056a00191600b006cbbc1adcffmr3982392pfi.13.1700687536917; Wed, 22 Nov 2023 13:12:16 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:16 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 04/11] mm/mempolicy: modify get_mempolicy call stack to take a task argument Date: Wed, 22 Nov 2023 16:11:53 -0500 Message-Id: <20231122211200.31620-5-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 2BB5CA000F X-Stat-Signature: yrcdyhynodzo64666h46qfour77ar3dw X-Rspam-User: X-HE-Tag: 1700687537-189479 X-HE-Meta: U2FsdGVkX19yvB7g7jH0H9CyFCC5nvnp0QUPmI5u315Q8LSqDgU2Iql2FZMhJ25jKmYSDt5Cgv5HPSjMameUSAoeXln2woDEUu7OAyT4v7iB7/1yYEYPpb4pwB846jtOZZTQ9dNKuvi1tWL+V9xdqZ74DeqU5lCOOOiPBzJEC3iC3/+ZTITQyV04er7TvQ+cu1fA0/3nAdXuqlgkEbhwxhva9EhMV/UqAwh1GISm9aliD0OPYxAezuN99zA0vl924/xu1blWtjppP6pfpvOXPzJwBfOy508c9V6RoHZZ2oCr+78Kt00m5knKmJB9fQxjO6ARNxx7PgtGLuPr9HhKTP+BTF8fNYjoPMgWMuSx2Esm7jPMMrZGJWn4xwHJ/b0eD/F3Z/+Aqkxqonts0vYOz4ba7RGBr46+uabdKHkznlQrFz6At9PN7EHX0nkbHYVI9OMexnk6WzbjAaJoI87I07nva5ChTMlnk7cowAOiYJgNYekOhKyVOnDHYgkYFD1i1knioo+0zx/ZD9x50NmRBKDONR/tkWpnhL4Rhwmb6lP6ptSeVmBjUw5hXJsj8+EPy9GrLO8Thbgatjdsmxz/5BpGZ9kTmlfQcp77YJlNrUlQWPFETVXbERub0RYcNZSp/8xKF3Lcdf/LFCYvlp8OTuQb036PPFodX/NjGhUkoGExfTQ5psnn3z2FZ9YYKBLtQLRecQCDpa5iCWqFqouHOvTY2msuClNlhimdgZuVBuFv0nBJz/RHkqZgmBaSap/XY0eHD8NSyJMcN/PstjAqVkTGKJo0khLExo0w5Vvr8eKCnhSsf0BGPKhsO5IoKD3mvKJ77y0j3cymHR0PYv0vAO2bJB/CHIicnFm+wN6EJNs5nAbpKXOm/Cb9ppMNNbM30M65KNDYI/S4bKeHdlryqUYDtziz11XvYV3qB7q3AwYR3u4IGi6qGtAJJVeFHLRfTX2AKYWsDy5xcmnWkuj h7D+2QWv Dv9SDhDrZaEK/c3daPVmhHsmFB4ilSe1NPQzJMSOIWBrfWSLUvw9dzFGlo5ZLyRHtJmh+zwIzwj+Bji0F9uM8+nNdshEB30NN7Kl0qIkKGiPfQG4820UP0b1MBP8uLqOjEC6cLzM4yNU5fCUcTj1rjDOhRzDBWos3QCYhgRWAdZ48XQhFRGSYoD+uC36Kv28eF/c2GOsyb+2lHUSfoLGrYQ6r3sda/kdKlUeTaxR/Km/Cx+WSPAcIsZV6nk9StpuWdMT0qHUg80tDI66TIjH8dK588k3z1i9RUtEXAlHF/7MQAFeYdeV6i/VzmJo0gh4mcc4qcnC5PawlozQbbeGVZickbY84YvHU2t1Fw0DyPhEaakIPZql5t+nqIRz+ZyB5Xaf247PEWCLF1YwjQT+ECjAEriMv9YsCY531IZIoa/XP60dzgdCB4g4lrrRjx5nM4YuHQoidQeaHf1pGjY2Kx9ldOoZUafbTsR/c40Mf70k6ABhar+sY0MtF3oEIuh5xJ297Rg6cPk9geUc= 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: To make mempolicy fetchable by external tasks, we must first change the callstack to take a task as an argument. Modify the following functions to require a task argument: do_get_mempolicy kernel_get_mempolicy The way the task->mm is acquired must change slightly to enable this change. Originally, do_get_mempolicy would acquire the task->mm directly via (current->mm). This is unsafe to do in a non-current context. However, utilizing get_task_mm would break the original functionality of do_get_mempolicy due to the following check in get_task_mm: if (mm) { if (task->flags & PF_KTHREAD) mm = NULL; else mmget(mm); } To retain the original behavior, if (task == current) we access the task->mm directly, but if (task != current) we will utilize get_task_mm to safely access the mm. We simplify the get/put mechanics by always taking a reference to the mm, even if we are in the context of (task == current). Additionally, since the mempolicy will become externally modifiable, we need to take the task lock to acquire task->mempolicy safely, regardless of whether we are operating on current or not. Signed-off-by: Gregory Price --- mm/mempolicy.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 9ea3e1bfc002..4519f39b1a07 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -899,8 +899,9 @@ static int lookup_node(struct mm_struct *mm, unsigned long addr) } /* Retrieve NUMA policy */ -static long do_get_mempolicy(int *policy, nodemask_t *nmask, - unsigned long addr, unsigned long flags) +static long do_get_mempolicy(struct task_struct *task, int *policy, + nodemask_t *nmask, unsigned long addr, + unsigned long flags) { int err; struct mm_struct *mm; @@ -915,9 +916,9 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, if (flags & (MPOL_F_NODE|MPOL_F_ADDR)) return -EINVAL; *policy = 0; /* just so it's initialized */ - task_lock(current); - *nmask = cpuset_current_mems_allowed; - task_unlock(current); + task_lock(task); + *nmask = task->mems_allowed; + task_unlock(task); return 0; } @@ -928,7 +929,16 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, * vma/shared policy at addr is NULL. We * want to return MPOL_DEFAULT in this case. */ - mm = current->mm; + if (task == current) { + /* + * original behavior allows a kernel task changing its + * own policy to avoid the condition in get_task_mm, + * so we'll directly access + */ + mm = task->mm; + mmget(mm); + } else + mm = get_task_mm(task); mmap_read_lock(mm); vma = vma_lookup(mm, addr); if (!vma) { @@ -947,8 +957,10 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, return -EINVAL; else { /* take a reference of the task policy now */ - pol = current->mempolicy; + task_lock(task); + pol = task->mempolicy; mpol_get(pol); + task_unlock(task); } if (!pol) { @@ -962,12 +974,13 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, vma = NULL; mmap_read_unlock(mm); err = lookup_node(mm, addr); + mmput(mm); if (err < 0) goto out; *policy = err; - } else if (pol == current->mempolicy && + } else if (pol == task->mempolicy && pol->mode == MPOL_INTERLEAVE) { - *policy = next_node_in(current->il_prev, pol->nodes); + *policy = next_node_in(task->il_prev, pol->nodes); } else { err = -EINVAL; goto out; @@ -987,9 +1000,9 @@ static long do_get_mempolicy(int *policy, nodemask_t *nmask, if (mpol_store_user_nodemask(pol)) { *nmask = pol->w.user_nodemask; } else { - task_lock(current); + task_lock(task); get_policy_nodemask(pol, nmask); - task_unlock(current); + task_unlock(task); } } @@ -1704,7 +1717,8 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, } /* Retrieve NUMA policy */ -static int kernel_get_mempolicy(int __user *policy, +static int kernel_get_mempolicy(struct task_struct *task, + int __user *policy, unsigned long __user *nmask, unsigned long maxnode, unsigned long addr, @@ -1719,7 +1733,7 @@ static int kernel_get_mempolicy(int __user *policy, addr = untagged_addr(addr); - err = do_get_mempolicy(&pval, &nodes, addr, flags); + err = do_get_mempolicy(task, &pval, &nodes, addr, flags); if (err) return err; @@ -1737,7 +1751,8 @@ SYSCALL_DEFINE5(get_mempolicy, int __user *, policy, unsigned long __user *, nmask, unsigned long, maxnode, unsigned long, addr, unsigned long, flags) { - return kernel_get_mempolicy(policy, nmask, maxnode, addr, flags); + return kernel_get_mempolicy(current, policy, nmask, maxnode, addr, + flags); } bool vma_migratable(struct vm_area_struct *vma) From patchwork Wed Nov 22 21:11:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465457 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 1F6AEC61D9C for ; Wed, 22 Nov 2023 21:12:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A487B6B0637; Wed, 22 Nov 2023 16:12:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D0006B0638; Wed, 22 Nov 2023 16:12:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7FCEB6B0639; Wed, 22 Nov 2023 16:12:29 -0500 (EST) 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 6A4386B0637 for ; Wed, 22 Nov 2023 16:12:29 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4BE37A1668 for ; Wed, 22 Nov 2023 21:12:29 +0000 (UTC) X-FDA: 81486838818.05.DE9B14E Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by imf02.hostedemail.com (Postfix) with ESMTP id 5ECA180029 for ; Wed, 22 Nov 2023 21:12:27 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jCoEkyOt; spf=pass (imf02.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@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=1700687547; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=efc4LuxM+YClZeP0rF1BlV0TPdiTLe9TrsONK1dWGk4=; b=JSWBnObUN+STb495i1313vVgxKaLWHUcuMvuUsh9xnbMWlLr9tzjo8/1ZaMMm+/9dVjd3O SGutcbmmFKgzjt02ohbxqjUrG7ojNdHsu+TathbzD8NLbBOe5o2+hg+OQyWFuXtkrN11a/ I221Wmd1056SRAET4kE7KkXrK0ljRz8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687547; a=rsa-sha256; cv=none; b=EdnQqC08YOhsX2ygec6r2DKR+frReaTC0xCV26MFrYa4jnRZ56z3twuaIx7jZ/lePk4lxT pdBP68A5BHQ+u7YYkjcMEVkzlCUjAtiY5yG1B+Xy/ud/+u1Krji/R4WgsD94Uatpbuy1ga UFs8lyGd2TktDhrT4k7lOhQXQnb+DuU= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jCoEkyOt; spf=pass (imf02.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-6bd0e1b1890so229374b3a.3 for ; Wed, 22 Nov 2023 13:12:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687546; x=1701292346; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=efc4LuxM+YClZeP0rF1BlV0TPdiTLe9TrsONK1dWGk4=; b=jCoEkyOttinIe0IikBZWGNwZqHYX2r4ZM030ZzSLQnH1ezgOhcIkGqiyykwDwBa1jr 70YKgq4tio/47AkmWBodA6yI+MqmKHlei3kBum8AFJQupzut2xOEkgv0PNuvPIp0PO3A ZoTM29NVOyEzxRivMYKqCd0mzcMBm59R4p9JotDXakD4U49v+ctO7PbuvBZY1MdsDKQ3 T+AGc0VJqRW2phWto3K6MNwVD4tD00nFQJdnEbE7Z5GScI2MdTcgczNdVCp2Tv0cCuKx C4AsHXShG0rZEynm0Mouc8H9lKnvYBeA/IBAtAGf0YKgPRSMzgK3zNFDGYppmbj9YG7o Z7IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687546; x=1701292346; h=content-transfer-encoding:mime-version: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=efc4LuxM+YClZeP0rF1BlV0TPdiTLe9TrsONK1dWGk4=; b=wKaUle5JO+m/WhB6AKy/xmQ1vaFUbTk1tfhM3+dYs5uRCudXllpK1ROlmXMGMfBXsD ZgNIxt9xrOsbyKwEk/IdKtmt2D8shv3ZJlEmFsiW2TYQ+p7lF3u4ekh/XuiWxPCyiNa0 4jSZv43ScPlurO1lnAFqoiJl7kbPMLilOIzn6aLoJHvTx0PmHPvzoO7dfAj/+RUhEbJ2 8Sp7SDvhLNXZ4qFCXKyNZA/4F0+Qd3YkzuhL5mdEZRhlHjPB0Yw6GGqzd2HA8uobY48j DtMEGwJokr603NRML2VeA2ffqW6HKd+fvdPEBuOuG2Q2kogg69OzoQbHH/8SWdpKvTuq 9wZA== X-Gm-Message-State: AOJu0YzacRqj8zvg/RUMJWA2KF6PN5LrpIJh6+MRnPtnExokqR7ktXAy ke0C+GG0a600RpmZvTvlVPJzHSxN54xe X-Google-Smtp-Source: AGHT+IFyLKi/UX8cG8JtNK31D46LnIz+FKATE0AdMLHzg0L0sgRXSVvqGSyPkTSkfLO98TY33r1+qg== X-Received: by 2002:a05:6a00:800d:b0:6c4:dc5b:5b2b with SMTP id eg13-20020a056a00800d00b006c4dc5b5b2bmr3826752pfb.20.1700687546091; Wed, 22 Nov 2023 13:12:26 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:25 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 07/11] mm/mempolicy: add task mempolicy syscall variants Date: Wed, 22 Nov 2023 16:11:56 -0500 Message-Id: <20231122211200.31620-8-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Stat-Signature: 89q9hsxyih7hwnf5sqgzyt4jo5zggfm3 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 5ECA180029 X-Rspam-User: X-HE-Tag: 1700687547-293092 X-HE-Meta: U2FsdGVkX19D3jSYYFnS+8euFeGfjLexSzPz52ePbu57aTXYBU3vhHQKzcA7JvcjAToiRHkogCaVcBDTRiITXBSHMIkeyM5NOSvjnWrdKdObQLdkpf4xokPbllIxvpq2s2n76l5ivIsGLVhF5zpWkbOd3bLUc3xB6aTGSpnKSaM1oQ9ReqMMo3U0mTN2GbvztBSH6vQeP77LmrAI/l7KsgnMplDAFdjdTt/42Rxwr73dhcA8A0FQfBwTmzBaPlNQ2PokkodvHuMZ3kVwSrwDn+9rnEGMfrzeDJTtL4JjVRn2FW7NwlL7iKP3QCFtD1MDwoQZxnSbTyJowxm4Fcxz9O/whHdqyiT17XO47Sr2Nix1/wjqGEziSNgMepZT3jj22clXdieqzYI8GDvJZbKqMp+8we2tqzmYS9xTFkbeHT8soPY5tabdxzBYpQLXb/0t/bHyW0Brxr1Ulfkw9qCWjrLLOf1CCXczB31z/nTpLKHhuPgI6zGDQ17d8J7nkdjRJ1K+0wbLUMbcsg3VvVp9h2K9R3oQX3R58/0MFl/zlxVuPdw3gsSpGAdUdHdcVodXze/vL2IQwKKiljip4djFcdPZ8dd9/Mj6b/65S9S/4M0oyhvD351UStpCJplVcpXa3pvOI32iWOBM5iMGgOsaqETdGPDqb1noeAiPULNaFcY20/iXVzUctEEs+0NlnoY39l/UzLoNqdcNnCOrGER4acd59JmIh60KQ/bUI46Kxgheo4TE+v6U1fTqtjUx1mshacSVqjHVPsDr3jk3VBD5U55Y/KdnujtAFQELB+RDE6VDKTmEBBKmbm8Bl0G/wopEtWF3+0rsqIDW9rY4lT8IN2VBkaabkpcu7syaQpRZUmi/tX9b5DT41mkRRvs6TCPeonC9xEs+ikfKC7IUEV8YuONYml5d5oWP4/Lx5zu0kuQeAtQtRS1NVvWydS/HNMU0uVL9hsFFclenGj4C5de nDuqaGpL 68nDB9RhbO7ZArMNOJxvjZFXHlgMAuO7qZxPWLR/s0H/oyMEDhlGF2WL+x/1dnqkCnitxBPBngB/FZ6JyNwiz81qWCObEmV2yczQ/4ngMxurZU186hD2nPe5O/IowLnFTmAjubfmKuD2b4YeIgFXonIIiIL6MS+EQUKsR86BpDHM0MsnhQY/exPkNAQ5xG70sc+tJfRzyGqqbQg8k+y07cWPm6ZfaNrOTcmtO17avR9tQhxEoknoeZ4s6zOyvij5ZyoAxAKauJmp4B+CFGzu1bxte+klmNoM+4BbwLvFux/vJM/iCmNKzin6fRXPBLZcMqPhvzUL0EtCyroljzxplyvhUJiLOCwH1uOcR+AjRGiT/vmqWhRVTkkVflm1TcFWFuSuJoDwLUYjq2zvNI6KmR8F00OjPNFOaHc7uZff72XVRYUjtOQmtwZY+HlPGJ7eK8ZvMfDt+EKn0df+WIyLBtvH4gxMODMF5QwVz 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 system calls to allow one task to view or change another task's mempolicy settings. The task mempolicy has traditionally been a feature that could only be changed by the task itself. This creates issues with task migrations between cgroups where cpusets may differ. Attempts were made to allow policy nodemasks to be shifted via a flag (MPOL_F_RELATIVE_NODES), but this is not foolproof. Additionally, as new policies emerge (like weighted interleave), it may be necessary to allow not just the policy to be changed, but individual attributes of the policy (such as a node weight) in response to other system events - such as memory hotplug. If pid is 0, this behaves the same as the original mempolicy syscalls, otherwise this interface requires CAP_SYS_NICE. Syscalls in this patch: sys_set_task_mempolicy sys_get_task_mempolicy sys_set_task_mempolicy_home_node sys_task_mbind Signed-off-by: Gregory Price --- arch/x86/entry/syscalls/syscall_32.tbl | 4 + arch/x86/entry/syscalls/syscall_64.tbl | 4 + include/linux/syscalls.h | 14 +++ include/uapi/asm-generic/unistd.h | 10 ++- include/uapi/linux/mempolicy.h | 10 +++ mm/mempolicy.c | 119 +++++++++++++++++++++++++ 6 files changed, 160 insertions(+), 1 deletion(-) diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl index c8fac5205803..358bd91d7461 100644 --- a/arch/x86/entry/syscalls/syscall_32.tbl +++ b/arch/x86/entry/syscalls/syscall_32.tbl @@ -461,3 +461,7 @@ 454 i386 futex_wake sys_futex_wake 455 i386 futex_wait sys_futex_wait 456 i386 futex_requeue sys_futex_requeue +457 i386 set_task_mempolicy sys_set_task_mempolicy +458 i386 get_task_mempolicy sys_get_task_mempolicy +459 i386 set_task_mempolicy_home_node sys_set_task_mempolicy_home_node +460 i386 task_mbind sys_task_mbind diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl index 8cb8bf68721c..c83b0c5c1ff9 100644 --- a/arch/x86/entry/syscalls/syscall_64.tbl +++ b/arch/x86/entry/syscalls/syscall_64.tbl @@ -378,6 +378,10 @@ 454 common futex_wake sys_futex_wake 455 common futex_wait sys_futex_wait 456 common futex_requeue sys_futex_requeue +457 common set_task_mempolicy sys_set_task_mempolicy +458 common get_task_mempolicy sys_get_task_mempolicy +459 common set_task_mempolicy_home_node sys_set_task_mempolicy_home_node +460 common task_mbind sys_task_mbind # # Due to a historical design error, certain syscalls are numbered differently diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index fd9d12de7e92..fd1a8863b5c1 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -816,12 +816,21 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len, const unsigned long __user *nmask, unsigned long maxnode, unsigned flags); +asmlinkage long sys_task_mbind(const struct mbind_args __user *uargs, + size_t usize); asmlinkage long sys_get_mempolicy(int __user *policy, unsigned long __user *nmask, unsigned long maxnode, unsigned long addr, unsigned long flags); asmlinkage long sys_set_mempolicy(int mode, const unsigned long __user *nmask, unsigned long maxnode); +asmlinkage long sys_get_task_mempolicy(pid_t pid, int __user *policy, + unsigned long __user *nmask, + unsigned long maxnode, + unsigned long addr, unsigned long flags); +asmlinkage long sys_set_task_mempolicy(pid_t pid, int mode, + const unsigned long __user *nmask, + unsigned long maxnode); asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode, const unsigned long __user *from, const unsigned long __user *to); @@ -945,6 +954,11 @@ asmlinkage long sys_memfd_secret(unsigned int flags); asmlinkage long sys_set_mempolicy_home_node(unsigned long start, unsigned long len, unsigned long home_node, unsigned long flags); +asmlinkage long sys_set_task_mempolicy_home_node(pid_t pid, + unsigned long start, + unsigned long len, + unsigned long home_node, + unsigned long flags); asmlinkage long sys_cachestat(unsigned int fd, struct cachestat_range __user *cstat_range, struct cachestat __user *cstat, unsigned int flags); diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index 756b013fb832..f179715f1d59 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h @@ -828,9 +828,17 @@ __SYSCALL(__NR_futex_wake, sys_futex_wake) __SYSCALL(__NR_futex_wait, sys_futex_wait) #define __NR_futex_requeue 456 __SYSCALL(__NR_futex_requeue, sys_futex_requeue) +#define __NR_set_task_mempolicy 457 +__SYSCALL(__NR_set_task_mempolicy, sys_set_task_mempolicy) +#define __NR_get_task_mempolicy 458 +__SYSCALL(__NR_get_task_mempolicy, sys_get_task_mempolicy) +#define __NR_set_task_mempolicy_home_node 459 +__SYSCALL(__NR_set_task_mempolicy_home_node, sys_set_task_mempolicy_home_node) +#define __NR_task_mbind 460 +__SYSCALL(__NR_task_mbind, sys_task_mbind) #undef __NR_syscalls -#define __NR_syscalls 457 +#define __NR_syscalls 461 /* * 32 bit systems traditionally used different diff --git a/include/uapi/linux/mempolicy.h b/include/uapi/linux/mempolicy.h index a8963f7ef4c2..c29cfb25db29 100644 --- a/include/uapi/linux/mempolicy.h +++ b/include/uapi/linux/mempolicy.h @@ -26,6 +26,16 @@ enum { MPOL_MAX, /* always last member of enum */ }; +struct mbind_args { + pid_t pid; + unsigned long start; + unsigned long len; + unsigned long mode; + unsigned long *nmask; + unsigned long maxnode; + unsigned int flags; +}; + /* Flags for set_mempolicy */ #define MPOL_F_STATIC_NODES (1 << 15) #define MPOL_F_RELATIVE_NODES (1 << 14) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 3d2171ac4098..fb295ade8ad7 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1654,6 +1654,32 @@ SYSCALL_DEFINE4(set_mempolicy_home_node, unsigned long, start, unsigned long, le return __set_mempolicy_home_node(current, start, len, home_node, flags); } +SYSCALL_DEFINE5(set_task_mempolicy_home_node, pid_t, pid, unsigned long, start, + unsigned long, len, unsigned long, home_node, + unsigned long, flags) +{ + struct task_struct *task; + int err; + + if (pid && !capable(CAP_SYS_NICE)) + return -EPERM; + + rcu_read_lock(); + task = pid ? find_task_by_vpid(pid) : current; + if (!task) { + rcu_read_unlock(); + err = -ESRCH; + goto out; + } + get_task_struct(task); + rcu_read_unlock(); + + err = __set_mempolicy_home_node(task, start, len, home_node, flags); + put_task_struct(task); +out: + return err; +} + SYSCALL_DEFINE6(mbind, unsigned long, start, unsigned long, len, unsigned long, mode, const unsigned long __user *, nmask, unsigned long, maxnode, unsigned int, flags) @@ -1661,6 +1687,48 @@ SYSCALL_DEFINE6(mbind, unsigned long, start, unsigned long, len, return kernel_mbind(current, start, len, mode, nmask, maxnode, flags); } +static long kernel_task_mbind(const struct mbind_args __user *uargs, + size_t usize) +{ + struct mbind_args kargs; + struct task_struct *task; + int err; + + if (usize < sizeof(kargs)) + return -EINVAL; + + err = copy_struct_from_user(&kargs, sizeof(kargs), uargs, usize); + if (err) + return err; + + + if (kargs.pid && !capable(CAP_SYS_NICE)) + return -EPERM; + + rcu_read_lock(); + task = kargs.pid ? find_task_by_vpid(kargs.pid) : current; + if (!task) { + rcu_read_unlock(); + err = -ESRCH; + goto out; + } + get_task_struct(task); + rcu_read_unlock(); + + err = kernel_mbind(task, kargs.start, kargs.len, kargs.mode, + kargs.nmask, kargs.maxnode, kargs.flags); + + put_task_struct(task); +out: + return err; +} + +SYSCALL_DEFINE2(task_mbind, const struct mbind_args __user *, args, + size_t, size) +{ + return kernel_task_mbind(args, size); +} + /* Set the process memory policy */ static long kernel_set_mempolicy(struct task_struct *task, int mode, const unsigned long __user *nmask, @@ -1688,6 +1756,31 @@ SYSCALL_DEFINE3(set_mempolicy, int, mode, const unsigned long __user *, nmask, return kernel_set_mempolicy(current, mode, nmask, maxnode); } +SYSCALL_DEFINE4(set_task_mempolicy, pid_t, pid, int, mode, + const unsigned long __user *, nmask, unsigned long, maxnode) +{ + struct task_struct *task; + int err; + + if (pid && !capable(CAP_SYS_NICE)) + return -EPERM; + + rcu_read_lock(); + task = pid ? find_task_by_vpid(pid) : current; + if (!task) { + rcu_read_unlock(); + err = -ESRCH; + goto out; + } + get_task_struct(task); + rcu_read_unlock(); + + err = kernel_set_mempolicy(task, mode, nmask, maxnode); + put_task_struct(task); +out: + return err; +} + static int kernel_migrate_pages(pid_t pid, unsigned long maxnode, const unsigned long __user *old_nodes, const unsigned long __user *new_nodes) @@ -1821,6 +1914,32 @@ SYSCALL_DEFINE5(get_mempolicy, int __user *, policy, flags); } +SYSCALL_DEFINE6(get_task_mempolicy, pid_t, pid, int __user *, policy, + unsigned long __user *, nmask, unsigned long, maxnode, + unsigned long, addr, unsigned long, flags) +{ + struct task_struct *task; + int err; + + if (pid && !capable(CAP_SYS_NICE)) + return -EPERM; + + rcu_read_lock(); + task = pid ? find_task_by_vpid(pid) : current; + if (!task) { + rcu_read_unlock(); + err = -ESRCH; + goto out; + } + get_task_struct(task); + rcu_read_unlock(); + + err = kernel_get_mempolicy(task, policy, nmask, maxnode, addr, flags); + put_task_struct(task); +out: + return err; +} + bool vma_migratable(struct vm_area_struct *vma) { if (vma->vm_flags & (VM_IO | VM_PFNMAP)) From patchwork Wed Nov 22 21:11:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465458 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 43A76C61D9C for ; Wed, 22 Nov 2023 21:12:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C1CF96B0639; Wed, 22 Nov 2023 16:12:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BA5416B063A; Wed, 22 Nov 2023 16:12:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9FAC86B063B; Wed, 22 Nov 2023 16:12:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 85CC76B0639 for ; Wed, 22 Nov 2023 16:12:32 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 5C4421A16F5 for ; Wed, 22 Nov 2023 21:12:32 +0000 (UTC) X-FDA: 81486838944.04.8CD7308 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by imf29.hostedemail.com (Postfix) with ESMTP id 8423C120008 for ; Wed, 22 Nov 2023 21:12:30 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=av3aYWds; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700687550; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Ytb+zLJCPBPTeP+HrayDkCJaJ1nmZr7MUC/QCQp0Rn8=; b=X7SqUmAtcUkMEmyBq1tIFQC+Mpb29zx5ILGRKzViVJ6Q7QGVMTKrQh9b0gQBLsxrprKK8L oQrS9qxF8Nn5vaG06vAWYyBx3FhrbSdr07XTTt/MZpYNLK8MTPix3+ckABGZS3hOFP8AjM 4PFCc1bRivY7BAGnXIO8dAmy5bNx7kE= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=av3aYWds; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.193 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687550; a=rsa-sha256; cv=none; b=sPOAz65Vt4a60vBy5xWdyNuhu0Zr7Bw+CBCa3p7ZlPX0J+UFvmQfvFWTd5N04HdSkkugSa 7CcFjQXv5KF5d6I/r8d5OQ0lDO8KWxJqs1Ki+h09Fl9CVnfkRENMaon7LN3HqEAyzgm7FG e6AZdI/qt2AozighZFNfCaJJMAy9fbo= Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-6cbc8199a2aso239286b3a.1 for ; Wed, 22 Nov 2023 13:12:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687549; x=1701292349; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ytb+zLJCPBPTeP+HrayDkCJaJ1nmZr7MUC/QCQp0Rn8=; b=av3aYWdsjxgWjwFJjgqmLHCaQqTnJQPwD9yf5ESpx+E0T4+0wWjyAU7IOF0eZi9I2H xI/BZ0WavoDloVjbm4zElQVCQAb80QAdI+gLvsKdTcUsAmx6zj92B0Js2414UIH/lhmE f0rMckP4Ww1o0R0lcXJHBgrgDOwMNJ4XuMW6OCRdeqOcDH1/mGXxWGVWQaRsgudyynOZ nTxrs3bMBAjbS++yjcPcUMUX0CivsqgHp2OfStcIJ7sLSdeGUA92CPtbH8x79j+/LIDo Qyq6XhUbx1Tz2EFCajpEYyYHB9Tm5NpiXdq5O34lTcuT543cQrkyaVW3yLJrPRQeteTT mVlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687549; x=1701292349; h=content-transfer-encoding:mime-version: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=Ytb+zLJCPBPTeP+HrayDkCJaJ1nmZr7MUC/QCQp0Rn8=; b=ervKZrIa2W0Dulc1tD5OlUX1GjAZbHeRK2069RNF9R8DAtdad5HHDuG9UQm/51/00a pbb7XfQoDcYjKEVFkc+xZQKLfLpUW+r8vc57qGiGQQKSSQhZeyJn0s9T1GjIkFMgZXNX Iaei4ASFqZ+piJmVSAc868rGCLDWDTPiUdhVxbpE3dHV7+SpVMFFJuR3nxcNuOKXeEA+ H6lo/XoAF1csCjljZgvofC8m+ReiTFULjXQtnVuRaAcEQ07YHar5lhEQJJmLueHAyjtN 0dgsKwvLKgqDdtV/HryaHEmX1Siusn4JUl33xYK9N6iK9cV9SAwDI20rATg+m9BiNmCl DmHw== X-Gm-Message-State: AOJu0Yws+Wor1F05GCmCRHFP0Cjl1z0fxQsJhlv03ud/uqGX3hIsooT+ BmgvFVX+gDXMBvFmVuLWzaytmHs4FCEQ X-Google-Smtp-Source: AGHT+IFKLpnDulOr/ZPYNoDPRpcqX2G937AQ6Vr6ejSPK5ZU1d6oIX9/jtBqfVf6LI42wNWwo5Yp6w== X-Received: by 2002:a05:6a20:3d8f:b0:18b:37b4:e4e7 with SMTP id s15-20020a056a203d8f00b0018b37b4e4e7mr3025618pzi.39.1700687549206; Wed, 22 Nov 2023 13:12:29 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:28 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 08/11] mm/mempolicy: export replace_mempolicy for use by procfs Date: Wed, 22 Nov 2023 16:11:57 -0500 Message-Id: <20231122211200.31620-9-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 8423C120008 X-Stat-Signature: pz1nk4td5srryfacc1aiduz8mfue8bfp X-HE-Tag: 1700687550-83072 X-HE-Meta: U2FsdGVkX18xUJ/Z65tNabXK69xAsWeZuhVgBIT8lJzbECgFrsrNNH9ItTEs5pUkhcPOOjx7DzdsJD/qfqiFk69vNxtjlidKCEJ+FRGrUVCf4dPzHGVItDrXjHsjGncpF71qVKMwdj9QIb2dkUwWcctGOD5UMYe394jaGI85cx8pOuvcjFbMfMAONA5r73aGvCX9kIzsyJdh1NBqpNPWFpp6iK91T5YfxD6PNkfGQu60MnVS2o7ycZbeHL1r1p/z5Hg0uDRpZVDyJQPA7HcwFWFDPPoExWDg2TSZlqoFy4bpgToA6anNpC2uG+dvE3SpaEkPMKugIKpyT0ebi39HKy8LDkfz5D2j03CBGW7ZEZB8RIKUb8B0R+h0zwi9vAdI6GcHYKQddtEq/Z1EgE83X3TazhL4XhWq9E2MC6m7YQWtDoyg+nWcCuFbzygYLJyeNcZJdHSUdmkUgBqk8bHk1WCHVfqQgnpGa75ByzSc5BZVxgvq14tbt1h/K+pel48p14/piy0zFpho571FfyXpbSRwif7wSQMFPlIJqNOiDv2pyA18gaAAuny/PJeJZaZQvZzoB7sdhxFERQv8I/HxxsVjyqbUxyrvsJcyVhjqKDjtCn7qXsPs1GYH+MZ7obj7yuEJ2Gg6uEb5FEPOSehnHIn2QwIFSPKzH1/FgHdOpodVW9OqZXQUDleupBJlaSTb0bma6lm3JjRwV41/EjDI9L8VHHT8bWUCxXTPx5srua6m2cXtLs9Eza4xV331XUejs1OBAHMPTM6NaeFFYH9f72u8gEc7k76JITZNrm80KfdYH492Mq7a27Pe5GJx4JvlewngviBjQJ+xrQszw7Dmsmh39u3BIO/AXg3h/q6+HjvPfCTgHF9fSHASVCpDzCHw5huBz8Edw6+ptwSg5Rp4yjtgCRLolmyX9lipMva6RSXXN9jJg5LKsXYilh++ehTS3Bm1qZ/FlqMHeCRhTLm dBIpP4Zc 58OWCWpCr2bHGAFd+/GsK7g4sL/Hcb/EFj04A8kh1APChJo+baHk/SNHXNvVLYmUg8UXcuOkGeXErMWOo7z4B3a3JqjMpXkXqBZcvCUsaEkC2Z5GcS5PfRc0DUBU+gTk4ZKwksWg4fGpuVXirWql7DV0eOC4kLw/WXQubUL01vDus3+yPWGWk+AU1s1x8GwRu7bkKetYFaoa3l9QCbgOFvqO0A/u3IKPzxwuFLAp0MsxrZjEbQ0IKPjW7ldiDJi41EMoruKZiz789tHs1DSY+3ALpEHOP9X5nNcFfd7HOEai51SkgwEp/xBAQxs0uK2IO7UqQLvplgLYrbmTZcSJFP/zfxgFBtJGJ7Cpe4Pz/FNrpDwh2B/yAggWt5EcKmZoQq4c/kV6kIZsHmEvX6PfLZm68RbPPlSx12cKfzOAnD9K5uvQlEFSkMiLtAnF4WgKV36ym9RWjSpIwbHtt2cmN84fQpG9KWik2CSOGV/I4uwzkL1h9Orz9BxvL7wZjcJCoT5VmxH7h4H5m0WU= 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: We will be adding a /proc/pid/mempolicy entry for use in swapping the mempolicy of a process at runtime. Export replace_mempolicy so that this can be used by that interface. Signed-off-by: Gregory Price --- include/linux/mempolicy.h | 9 +++++++++ mm/mempolicy.c | 5 ++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 931b118336f4..b951e96a53ce 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h @@ -177,6 +177,8 @@ static inline bool mpol_is_preferred_many(struct mempolicy *pol) extern bool apply_policy_zone(struct mempolicy *policy, enum zone_type zone); +extern long replace_mempolicy(struct task_struct *task, struct mempolicy *new, + nodemask_t *nodes); #else struct mempolicy {}; @@ -297,5 +299,12 @@ static inline bool mpol_is_preferred_many(struct mempolicy *pol) return false; } +static inline long replace_mempolicy(struct task_struct *task, + struct mempolicy *new, + nodemask_t *nodes) +{ + return -ENODEV; +} + #endif /* CONFIG_NUMA */ #endif diff --git a/mm/mempolicy.c b/mm/mempolicy.c index fb295ade8ad7..e0c9127571dd 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -815,9 +815,8 @@ static int mbind_range(struct vma_iterator *vmi, struct vm_area_struct *vma, } /* Attempt to replace mempolicy, release the old one if successful */ -static long replace_mempolicy(struct task_struct *task, - struct mempolicy *new, - nodemask_t *nodes) +long replace_mempolicy(struct task_struct *task, struct mempolicy *new, + nodemask_t *nodes) { struct mempolicy *old = NULL; NODEMASK_SCRATCH(scratch); From patchwork Wed Nov 22 21:11:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465459 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 CFD83C61D9C for ; Wed, 22 Nov 2023 21:12:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 653EB6B063B; Wed, 22 Nov 2023 16:12:39 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D9DE6B063C; Wed, 22 Nov 2023 16:12:39 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 405EA6B063D; Wed, 22 Nov 2023 16:12:39 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 27B346B063B for ; Wed, 22 Nov 2023 16:12:39 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id F2EF981648 for ; Wed, 22 Nov 2023 21:12:38 +0000 (UTC) X-FDA: 81486839196.09.3B5E6A4 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by imf18.hostedemail.com (Postfix) with ESMTP id 1E0AE1C0017 for ; Wed, 22 Nov 2023 21:12:35 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=S6vwlMjo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.194 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700687556; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HOrPhfU2mXxyBlZrT3heEZSZHpuQWnnIT7HedEB0hRs=; b=EgLs4o/qlrBCkSZU1o6IBpuSvdf/9QNw5kSsVqqCA/OLoYQURXDMFIpQD4VtruOjiQb0dz bl57IyeGY3Pnuwg6UCIP9LGgJKEeeHd6TvM0MzQUhGA2Rno55uCpIRBj70jHlwEbWAe5tO W91WSQxy+Vk0nvk5EGft5sk8MszK2DU= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=S6vwlMjo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.210.194 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687556; a=rsa-sha256; cv=none; b=YsIFPksN4sdy7ZX0mGNAbWVbC10BCuIljOh0zNhoJwzFE3sw7c0vgnOypb1hB3qQGN5Awj hGGMpKGll9xHRTTvnYMgl8+zkZe/+Wui+7HGYxhmuw+fmSBDRoMtCOWiFd4xQpvtarARUd FwC5o5xyUByX0jppgdmmJc5LB/l2sl8= Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-6c431b91b2aso233529b3a.1 for ; Wed, 22 Nov 2023 13:12:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687555; x=1701292355; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HOrPhfU2mXxyBlZrT3heEZSZHpuQWnnIT7HedEB0hRs=; b=S6vwlMjoK2NhbtpOKUdZAtLmY/A0u1KcaxoSyCBHGI1bQVlEeTncR6PFUnBODDAkVY +yJ1Tw2t78skpMLNQT2Zct1eFO6e5ePWNhiCxj4M02lqEVSx0vyhxx7dbqiDQjUEWwft wWsVx08lMyJ1c3f/INLykai5tZpxnlYEQ1Rcdna3riwg41K9VcdECcpk5uLKttOpeExq +bXhS9iQrpNwnSOQVS4X5b8JPUJSdedO3hrt1Y2zflWFO+G/r2Jc8409/xIkrYlOb8bf avAbG9HKuDMncAqtyd9MwB9H2lKSGmpA+9iHVILqu7LQ2Ro1ySEk8s4vz4FCNrxJaE8c b5UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687555; x=1701292355; h=content-transfer-encoding:mime-version: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=HOrPhfU2mXxyBlZrT3heEZSZHpuQWnnIT7HedEB0hRs=; b=rOwYEpQ+GV6BrBOg9FjdgJ6Igb2MEgq1Wh8wSBI6gBYDNPx7+vgAoDkm3sWu3X3dqi KWrr1T5uQNlj8YUzzp9ItEWc7Ry1S1JdZC4U5Q6xS2DHraW7itctT4OzZpcw52O3Mlf2 CAtOYQcJB1CYAImmLJO1tndmL/vhaC7RX6oTgi19knfXbzLRRcoCNl8eLhnrjUNVCddA 95g9s9sJRF2GU8NVBU3oN01VjtLA0xOSa4UsPLQMTS31mw0AnbE340Qd4TA8uIhjLeOl QDfyFMKVB24d790+Lp+5D4w+FluTsuZ7L2CPru2QCAWqFWA2J3cz6qqZQdNvF2BgXzFK 0rqw== X-Gm-Message-State: AOJu0Yxx6c+AdzYLYjWNZcPQBNypD3lOXijisweAx4bi/nPMxzM1iu64 6qNOiG0e/GMgFkBzcC0M/XYpcr3+bzVf X-Google-Smtp-Source: AGHT+IEMVmGwOk2fW31bSZrZqUdP6V2qhUklPoSlj+1Lun+mapADWEqdgcI4ZGVd2ENv41y7cSvJXA== X-Received: by 2002:a05:6a21:9982:b0:189:11e8:6237 with SMTP id ve2-20020a056a21998200b0018911e86237mr4066108pzb.51.1700687554935; Wed, 22 Nov 2023 13:12:34 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:34 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 10/11] mm/mempolicy: mpol_parse_str should ignore trailing characters in nodelist Date: Wed, 22 Nov 2023 16:11:59 -0500 Message-Id: <20231122211200.31620-11-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 1E0AE1C0017 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: qm69iaoi4swijq46ru68a9fugiq5fdoe X-HE-Tag: 1700687555-372204 X-HE-Meta: U2FsdGVkX1+etQ7Jc+349iNRxwHRFsfqsY1ZC17wxd//4NGvuaBmzLUIulLx9wx+ZJB6V6IDnjLViudzTaxSsKtIdeSn6NPdAAB0tPHXpxZqMt85EYHN3eIMvi2xM78m0Q40cr15+Dmi8HNqpQTh3I3TGDfTOJmLqMeWKN5COuxPnJ7iVDozaa86a8z5dwLuuQ04+D3HAvJ2IoJXwCxCC7s2514BpwAD7JzHcNDGyOb7BOgBfSOeoaC57c+mmc7gWVtspP1TIYDyl0/fYkFJqXj4A0r9ykJNrjgtr+RqjxlIwT9lI4mA3L1PeidRV2j/D/TUr8jJyMa7M3PncmTe6oEEp3n3+yj3ftJF18GI80EWomDajFNrBS86FvBHhXkTa/HIif4Yx1Fdi/yIcTeRzUvL4M7iDD2vkrDr5Bzs+4naUuJRE9ALOryainbhLoEIkQ+a8FzDMp1kt5WWg/2u6JYmCmMWnsv8Y74R9H+/1FLytza4lEEuQ873zjo1HwLq3tBLccQNPDWKQbyzSbjtzo14y8qGWeQOvMMe6DB0daPc3oZUCIb6fMLgi8E/WDwVX9MzKqtVtbJP86GPB19HoX8ubEhnwccluoGGMQ+r53yrW3NvqnBU9Yddg6EHwANYVIRnhJKEfTkA+Bfh6pme+PG3p8MV8LxK4uwCCAkPD8t15x1c4nfTsqqd8r5d2CBuafS1tnjsFWhai29Jaw1CBZcg3KlL9VyjCHDeNHejbNUJawXRhPE7baPvQ+NUiv435UAYS0xjgiTAFlucHu5N2f0rF7LqaVR2rQjxD1LZEiB2akETQ/DS95O6ql+5R5/k1NbxTjDDBFTDnC8HWyptceI2VCSbza+LOvtkZ6uQRWAUcOhJo+KpzoUbxb3cWcV0OQpetZnsw8WAqIGL6gLSpZskntd0FgaWZSzNJXBAPRHq6Or9qvLtG4ElDVpnUkwJmb2vUOFiXFTLLUDJiiP 4ZkRXq4D WcdktL15tsWgDQ1I60cUINX4x8fo2eG5JQteG+tAeybynqwftHflxE7pGVwSctgORaa6awxeWJP+3sNKneMhU6v20hP7X8MoNMLNTtgXLICQbrbekf8t4+f8FanKFIzZavdrrKWF7yI3roVixZWKqVHGg8T3gNDFC1IUwCxwcbUZyQw9P80arugAtynaKpMRCsXcptRgTtooVlqF8sVvCHN8JzM5MWhnMqSFKUW/YLG+0X1Fs3q/1SVCMKCIuwCS1xOf2uzwS6qXZtwsf2G2znGdXS4nkrmP41L3ByNDnIcNQsGMaFJLQck5aCq9bjjC/BmUCy+qr6IqW/MrwZFw5aNgx2Gwbxvq2l7pEPRPIVp1Ja6OyeNxMIeZRWaz/dtSEcDWRZ6HF4HBC5f8OmSYiLN/jT3Aev20SuawVBYltrpNredyisj6fmgraC6IoBXhXfmf7+k57lmF68SrAYlWpDvQlONz09+i8iSWYazIljg//B531TA24qjzxq1y2lkOAfX0lpzxwzV3Rxk8= 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: When validating MPOL_PREFERRED, the nodelist has already been parsed and error checked by nodelist_parse. So rather than looping through the string again, we should just check that the weight of the nodemask is 1, which is the actual condition we care to check. This also handles the case where newline characters are present. Signed-off-by: Gregory Price --- mm/mempolicy.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index a418af0a1359..eac71f2adfdc 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3159,12 +3159,7 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) * nodelist (or nodes) cannot be empty. */ if (nodelist) { - char *rest = nodelist; - while (isdigit(*rest)) - rest++; - if (*rest) - goto out; - if (nodes_empty(nodes)) + if (nodes_weight(nodes) != 1) goto out; } break; From patchwork Wed Nov 22 21:12:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 13465460 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 015B3C27C40 for ; Wed, 22 Nov 2023 21:12:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 89CE86B063C; Wed, 22 Nov 2023 16:12:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7FBF06B063D; Wed, 22 Nov 2023 16:12:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5DB6D6B063E; Wed, 22 Nov 2023 16:12:41 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 44FD76B063C for ; Wed, 22 Nov 2023 16:12:41 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 10B75C1262 for ; Wed, 22 Nov 2023 21:12:41 +0000 (UTC) X-FDA: 81486839322.13.41430EB Received: from mail-il1-f194.google.com (mail-il1-f194.google.com [209.85.166.194]) by imf12.hostedemail.com (Postfix) with ESMTP id 33A5540003 for ; Wed, 22 Nov 2023 21:12:39 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KUAy04wZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.166.194 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1700687559; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=nj0/yLijkUDdchJx9f8WaqM9fNxYMjAKFnMHDPEdLR0=; b=3J3NvZToICdr9ExFXWolobk16IMyCLa52Z6TmptWMd1mw6M1IovTBVU6Q2SLFXO6nsF4s4 XwIyjtnu4rpyW4hjX53OmVMTOL0D5uXnj5MhRW7+IcFulDpgx9DFF32nv5xE+zOIzdiFvF 7F3tCrpXVOb/boq3+Vhy47JJEy5TIl8= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KUAy04wZ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of gourry.memverge@gmail.com designates 209.85.166.194 as permitted sender) smtp.mailfrom=gourry.memverge@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700687559; a=rsa-sha256; cv=none; b=0xAcuSENqRoIZm40qlOoGmNMM67Zz7YriPXU0qzrSxRRZCwMvBkEUZJwaleXQIM4PChtok LpMKGOmfemoJFtYSfVntxItcE0DN3LehohW+2EUnNuFH+nfSZw6eQ8duivoyr2bs6hKL0l BQHXjCrUIDGIn3jKSTrBGU5jgjOqCqw= Received: by mail-il1-f194.google.com with SMTP id e9e14a558f8ab-359d27f6d46so675455ab.3 for ; Wed, 22 Nov 2023 13:12:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700687558; x=1701292358; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nj0/yLijkUDdchJx9f8WaqM9fNxYMjAKFnMHDPEdLR0=; b=KUAy04wZDZO9mARgZiK4yAyu4wm234JjjVbntG9JW669M43qGupkfKtqTiF1JPtCAM 2bh09FLPSGgFsXRCIMFa+VF/cNuIuKZtQAZrABRdy5jo+ABx5eSn7YGdUhw20TuhlQEM vHPfheM0dGZYkroymt9MaDXnTpCyGHP1j8mIJ2rtnm+uKpOv/WL7/EfnBF0KIEPdl0OW hzW86Gd1QQnw49FN6x6owbgK/wL+iqiYUf+QmrnfiydM8sYrEIGZQvGSfp5rupm9gDii P/8xNHtLu/AFIBWR43Px43ikYSvE0T7AcmAuLG5ivcqg22OatKGEKZ6yGNgDlydxjUZk ZPOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700687558; x=1701292358; h=content-transfer-encoding:mime-version: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=nj0/yLijkUDdchJx9f8WaqM9fNxYMjAKFnMHDPEdLR0=; b=LMH85DC5SBgbwWxQnihPAosNLi1fNFau/86irnlxJsNfzVCF+VNJB/PpIXDTyE+eMl TGjCs1rqPcM6hgqBhRKsATN9GntfU7okmpFlWi88L86y+uUrGbRFlvKCKpjVyE4MWXOp c7g+toke03LCR9UXsTUCW9bLj6FNSFy4n1OCAtan8+0Qtve5Yq0nEWcEyz4qoikDEOi0 Cm4g3AnepOWhYq+I2hfl/v0uL9a5OSb5uMJPBcgjxXV8ia+gokFuVZyQBTX45UgRXTRb 5JgFBsW6AEq7ZfuJQLnQzbnncSOlfJzhVC6g1x2SW56sdAtMEsnxbgpF9o5b7wlEHTB8 qUqA== X-Gm-Message-State: AOJu0YyVKSzGN2cR5ue3ow3aWH+rXzSRIKhyQ2/LP/EkM11wsDFkq6XU 0xPlxYyhdS60zxEaL2DGoM4+ReuAiL+L X-Google-Smtp-Source: AGHT+IGWypkgJaNcLXjK/eS64ds6ElauQ9WWQUmh33zgk8yVZiSbJ9XTKd3ElRdp4RxU4lnDOSLTsw== X-Received: by 2002:a05:6e02:1c84:b0:350:f51b:c32e with SMTP id w4-20020a056e021c8400b00350f51bc32emr4817949ill.16.1700687558122; Wed, 22 Nov 2023 13:12:38 -0800 (PST) Received: from fedora.mshome.net ([75.167.214.230]) by smtp.gmail.com with ESMTPSA id j18-20020a635512000000b005bdbce6818esm132136pgb.30.2023.11.22.13.12.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 13:12:37 -0800 (PST) From: Gregory Price X-Google-Original-From: Gregory Price To: linux-mm@kvack.org Cc: linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, arnd@arndb.de, tglx@linutronix.de, luto@kernel.org, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, mhocko@kernel.org, tj@kernel.org, ying.huang@intel.com, Gregory Price Subject: [RFC PATCH 11/11] fs/proc: Add mempolicy attribute to allow read/write of task mempolicy Date: Wed, 22 Nov 2023 16:12:00 -0500 Message-Id: <20231122211200.31620-12-gregory.price@memverge.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231122211200.31620-1-gregory.price@memverge.com> References: <20231122211200.31620-1-gregory.price@memverge.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 9cyxsga1asti6ku8xkdx1r65ntf4ouer X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 33A5540003 X-HE-Tag: 1700687559-771872 X-HE-Meta: U2FsdGVkX1/M4ryVGyaLg8gSv6NmKkh1xM2ZuuwQkawLsE/6JxXF88MeFJVlTHZHsZ8H55YTYZRFYj5U01bZ12DaeWztxvT2CSQHgE4fNtUDLRvgJhujWd6IZ30NtWegO93M2UgcVndLoCcoxOWmp0oCTb6I38xkGLJpaYkHPugQfNXrzJYO4dw1i12JQBALG34DerQHzB6XEaf+kQ45fnSSHSAr4djm3Xph2iM9yYABvvOUIBpL9dCtkgiZ3KO7rPo0pbkI3YsHjUS8fFt+5RPE59i7+q5kWYPn9En6B4dFwjBViqiFJPVpVnzmsMA6erUUlDXuKwDhitCzilsrSrVd2R/7qqPHKgEMq36W5R8oCe1nRgxveuCn9JQP2G27NLmGq0QG9Hy9a4CKxGvdo+fhRFy0TVjt5g0lUtbnPR4PigQVdQbWcq6FADOv7dpU6PxwoA4c1dsONyZEZ3emI35DzgswTLmPRJqo6Bjjr5PBl/zPbj5NvPhzRPRhYFKrsCCyd0aUreqBas8ldlmHGwZ+zEjIGLQ5l3VzEp7/rvByZcigGqoRmG8R7Xi93xOUf8/OfsYIlyU4VxNP8o2w1PryABc8fv6tQG44ZlGojM8nkKwKH9RvKt/nM8E1lOV69GK8iWC7HbWA+teFUmDvSdArj0hNpCkeIHIwH6RqizAT8MoZlQVlKjrmaPeKhNMXQK/vLOs3XzTPszPNQED39cIstklsdXw3ErsIELsBkYmTFnc6WUmp30BYfy8Kn6GdFdvLncpExM/HH0PfsikQNZRQ1o4G2mn5iPQNsVDvtcZByBN4xGOnL1aJGMmIL3phpVfnv5TzDSfZPJKzKPGkGu+CJgZaJZNcqIIu9ygz+X13GQueoY16y9ei4BBobMgRwOshpog6mt1Opj9gfK4fYn6EQzZP2J28vHxary8azRz5TXZXJKXWBi4GrHsV+1SDTCl5ImvuEYePRowpcAn MdT6KLwd FN7UgAbuozuB/hWi61SLUl16T/1IxCwfZlFaLFOWY0zOAxn0hUGiPJ5t8Mxfcqgxt0pKKdDLCyUsO0A3e0n5sT6SSdalA2r6BBHe2IyZ6lPla0lYWJB/VkiTODTyZ6+wUbv8lBJB3dZSE2AvSHclv7nOzlUBKEnzfdFgE1VTrq1QMTcynv3WOxdtuzbW3KkEFf5Ou3yWyJXwCtasSXA5wY6m6Uc30hWwTXYSsNve0ZzFGrPwlhlfsL9idtlMg30VdK5cp9wWAlbxhHacILeKE7dL50enEil9JO6lzr7A47rLDKgeQrPKbeyVYZEg00mbKC0RMK6RHG8GmYVZcPgOk6n9I7y5l+5zG/Yg1ZoAqTJG0vnWt23CKiJ4aCpZ2XjLwMIUmjIduBgn2CcrbKgiO1PHYHcECUYflJIenCSlYxEzkKR6ZG2R1FTNHxEN47+t4BS4mI2qhKZmUYq5AEdminp1s2zSNwwtzstVeRayy8D4hDjLcUG6Y8zQShHTD7SY3mbUJMwzRBdXo5+04ZRaNYV3+TQ== 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: Expose mempolicy via procfs, and utilize the existing mpol_parse_str format to allow external tasks to change the policies of another task. mpol_parse_str format: [=][:] valid settings: "prefer" (without a nodemask, aliases to 'local') "prefer:node" "interleave:nodelist" "local" "default" "prefer (many):nodelist" "bind:nodelist" flags are either "=static" or "=relative", and cannot be used with "prefer" or "local" ("prefer=flag:nodelist" is valid). Signed-off-by: Gregory Price --- fs/proc/Makefile | 1 + fs/proc/base.c | 1 + fs/proc/internal.h | 1 + fs/proc/mempolicy.c | 117 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 fs/proc/mempolicy.c diff --git a/fs/proc/Makefile b/fs/proc/Makefile index bd08616ed8ba..272d22d9022f 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile @@ -27,6 +27,7 @@ proc-y += softirqs.o proc-y += namespaces.o proc-y += self.o proc-y += thread_self.o +proc-y += mempolicy.o proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o proc-$(CONFIG_NET) += proc_net.o proc-$(CONFIG_PROC_KCORE) += kcore.o diff --git a/fs/proc/base.c b/fs/proc/base.c index dd31e3b6bf77..3eb3d6d81a8e 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -3279,6 +3279,7 @@ static const struct pid_entry tgid_base_stuff[] = { REG("maps", S_IRUGO, proc_pid_maps_operations), #ifdef CONFIG_NUMA REG("numa_maps", S_IRUGO, proc_pid_numa_maps_operations), + REG("mempolicy", S_IRUSR|S_IWUSR, proc_mempolicy_operations), #endif REG("mem", S_IRUSR|S_IWUSR, proc_mem_operations), LNK("cwd", proc_cwd_link), diff --git a/fs/proc/internal.h b/fs/proc/internal.h index 9a8f32f21ff5..e8e81629a8d8 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -303,6 +303,7 @@ extern const struct file_operations proc_pid_smaps_operations; extern const struct file_operations proc_pid_smaps_rollup_operations; extern const struct file_operations proc_clear_refs_operations; extern const struct file_operations proc_pagemap_operations; +extern const struct file_operations proc_mempolicy_operations; extern unsigned long task_vsize(struct mm_struct *); extern unsigned long task_statm(struct mm_struct *, diff --git a/fs/proc/mempolicy.c b/fs/proc/mempolicy.c new file mode 100644 index 000000000000..417c2c8046d9 --- /dev/null +++ b/fs/proc/mempolicy.c @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifdef CONFIG_NUMA +#include +#include +#include +#include +#include +#include + +#include "internal.h" + +#define MPOL_STR_SIZE 4096 +static ssize_t mempolicy_read_proc(struct file *file, char __user *buf, + size_t count, loff_t *ppos) +{ + struct task_struct *task; + struct mempolicy *policy; + char *buffer; + ssize_t rv = 0; + size_t outlen; + + buffer = kzalloc(MPOL_STR_SIZE, GFP_KERNEL); + if (!buffer) + return -ENOMEM; + + task = get_proc_task(file_inode(file)); + if (!task) { + rv = -ESRCH; + goto freebuf; + } + + task_lock(task); + policy = get_task_policy(task); + mpol_get(policy); + task_unlock(task); + + if (!policy) + goto out; + + mpol_to_str(buffer, MPOL_STR_SIZE, policy); + + buffer[MPOL_STR_SIZE-1] = '\0'; + outlen = strlen(buffer); + if (outlen < MPOL_STR_SIZE - 1) { + buffer[outlen] = '\n'; + buffer[outlen + 1] = '\0'; + outlen++; + } + rv = simple_read_from_buffer(buf, count, ppos, buffer, outlen); + mpol_put(policy); +out: + put_task_struct(task); +freebuf: + kfree(buffer); + return rv; +} + +static ssize_t mempolicy_write_proc(struct file *file, const char __user *buf, + size_t count, loff_t *ppos) +{ + struct task_struct *task; + struct mempolicy *new_policy = NULL; + char *mempolicy_str, *nl; + nodemask_t nodes; + int err; + + mempolicy_str = kmalloc(count + 1, GFP_KERNEL); + if (!mempolicy_str) + return -ENOMEM; + + if (copy_from_user(mempolicy_str, buf, count)) { + kfree(mempolicy_str); + return -EFAULT; + } + mempolicy_str[count] = '\0'; + + /* strip new line characters for simplicity of handling by parser */ + nl = strchr(mempolicy_str, '\n'); + if (nl) + *nl = '\0'; + nl = strchr(mempolicy_str, '\r'); + if (nl) + *nl = '\0'; + + err = mpol_parse_str(mempolicy_str, &new_policy); + if (err) { + kfree(mempolicy_str); + return err; + } + + /* If no error and no policy, it was 'default', clear node list */ + if (new_policy) + nodes = new_policy->nodes; + else + nodes_clear(nodes); + + task = get_proc_task(file_inode(file)); + if (!task) { + mpol_put(new_policy); + kfree(mempolicy_str); + return -ESRCH; + } + + err = replace_mempolicy(task, new_policy, &nodes); + + put_task_struct(task); + kfree(mempolicy_str); + + return err ? err : count; +} + +const struct file_operations proc_mempolicy_operations = { + .read = mempolicy_read_proc, + .write = mempolicy_write_proc, + .llseek = noop_llseek, +}; +#endif /* CONFIG_NUMA */