From patchwork Wed Mar 5 18:15:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 14003147 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 915E5C282DE for ; Wed, 5 Mar 2025 18:34:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B5416B0093; Wed, 5 Mar 2025 13:34:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 55DAC6B0096; Wed, 5 Mar 2025 13:34:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3FE676B0098; Wed, 5 Mar 2025 13:34:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1C7C56B0096 for ; Wed, 5 Mar 2025 13:34:26 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id F3F3680963 for ; Wed, 5 Mar 2025 18:16:27 +0000 (UTC) X-FDA: 83188302414.07.0C84700 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf23.hostedemail.com (Postfix) with ESMTP id 044A8140003 for ; Wed, 5 Mar 2025 18:16:24 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ia7q5BFn; spf=pass (imf23.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741198585; 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=9qHIo3rjzbA/l0h1GlO43HgKTbuNUAe73J3rw3GEB88=; b=y0PpHpY8hCPRcmTLUzOVw08fjSBNgrsI1s8u1+PGX7HAJ2LOpTL5DVZIIXuknoAm/uKJZD vA7BPxhMw/ZIf23ytS2FyWOxZNk7d3OWtPbN4B3xaC18H4tIWxLqwZILhkjup4id88V+ZY LEtKpHttvm101WUCjA8R7h5NF8Tumpw= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ia7q5BFn; spf=pass (imf23.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741198585; a=rsa-sha256; cv=none; b=v5/2AKVIiTJE0AoHBXyunCvgQ8nmsUGnrQBrL7U+8BvDjX/XkMOuTjSE7+hfR6FxJnOfG6 aW55gw5w0Fg4PeVU4/WUn4orhCGhZNl/Fecu3HYjZsVY2w/XAGPVhOfiqmhdfnsCiJS1Tq OL/0dNOHKnE9RbNN7MVNVTBPXFEEj+c= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id EEFC15C6A8C; Wed, 5 Mar 2025 18:14:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F099C4CEE2; Wed, 5 Mar 2025 18:16:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741198583; bh=Hf/IsCKuh49/H9FxeO83Nv8vZIFMcDB1quEptKUrTMY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ia7q5BFnvBQEdZiYG/J9924zrl9GGOQcILKyQtO2540WBcXGDi74PQbLvgXupSOUU uRq2YOJyjf13O6CJrtwZp7ybsYd/NWISFt06+mKck3lNr1V6HS+rsBPAtfhYtxAV/m 9mGzaCAZQ1VmtWZETYtdNHp93km18Jza5GUnZc8azzucVpDXHQay5QjAfaQ9Rxa6tQ ZEBt05yTnUAhWgCFjAhWlkb4Al10XBa5hpCLWeZ9fUMHELUlrz/Wn7MbpZTN5XSDOz rqOnzF+7m8gCiV6mCEjnfk01x6pPUjmbHD2tvZReVbxf58LtttlkbasvRkWlCQLwkV 8w93AORgrrNRQ== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , Shakeel Butt , Vlastimil Babka , kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 03/16] mm/madvise: deduplicate madvise_do_behavior() skip case handlings Date: Wed, 5 Mar 2025 10:15:58 -0800 Message-Id: <20250305181611.54484-4-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250305181611.54484-1-sj@kernel.org> References: <20250305181611.54484-1-sj@kernel.org> MIME-Version: 1.0 X-Stat-Signature: jid4o6trftxcsneikyfkeee1ydyww4ph X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 044A8140003 X-Rspam-User: X-HE-Tag: 1741198584-96280 X-HE-Meta: U2FsdGVkX19qd39+AXJrUIwpgLnT0t/FGFMSFo+55LTUqaPOjVPMYz5czSlXdJEHNsNGWS40TLx3VGRVzjXlqvs3MqI7NMZLxZJ1U2K1YJ4UZPs31fQi5oAHifEE3WEcWUNi+WousgHI1NMFJ7dp3W/HgZdSMb8kDugZcRMLo4hx7E/h0d8n+pFbzBXxHFLtRtYywb5gV5xzPmyXiMy7w6WBpEHGGCfS9PzBmVNhiYauslC8G+7jpMpk34efJiDevCqYwOeb4Gjfn9mlkZ3AaQMd79GMrjGNtSUYz2K/w+iRF9Zx2Uko5v+w7mVBjbxaQhJ+FmokfN8Ouhkk4f/8nk1c/fsKkQd8MS6IS/94qcCcMY+N9z/aJbXPXFSwp84HncAU46w7K53F4ux/sBNBwJN0HHYuqGPcnxZ2uSWx6f53MBrTasYxpz6zojC2GU6syHSoCrkcpODIvM61b3BNo5tYTcX9BXdfRkuSFXytcm4sKn7kV6GuSqMUjOw5wqPDWQkbiZr0iqrAjfj/6VWrJOYvcxOyF9P5KybF67OmbEkmQQOtytM5jDEIrJmH6hk8qdSjlnPKE1CVmizQhH3fsCtOTJdljxG2KibPUHSbcO3r0STI+F645mngZ0YTe5fqYBDQOMmBGT6GnetXJZkMywhZmbv/5q3ntIJ5kwgLqLN1GoEc+wI7O0vwq0VuS2orSKeKmOuOcpZM8pssD8/K+k9PwT8jferkmcDW5OWeQQFVREG1pGY57M/pik3ohfKLy3NI9DlB1is9CF5A2wH1332mOeA0L5tzz2OlC1BgScLDftvrkHUXRbgfkHoLxZxFdSdHwEqiwyVtHFBPI31ZqXT1N8jcEi9L23/0D2PaALNanzS9WSL7IdXa40sC77cWI5IWX5WLB/qY7CMayylLSTjQNjvpkOJQaSF7SE5X0MEwSMFJ6jk2qGVQJNOG7H/PaGjM3c3QG4+tECstlgP tHTDEhUW bv8znVI2H6ca0Trxx/QC8/T0R5Srvy7HAlE7uSWNUaqE3dFCbl23rywzw0R/fiz8zXZjrcafCZM21dNr8/UTlUuB6d9nYLBVCENUNqAwCnNnuP9Qbu+ZvKtyQJk5rqaKGiA5yWXkyu/YRkFXaVqJX5hEMVD1H9qCtRse8ktUcwn7Ids0On27rEcm86HpX2u8dSy8ySAbon0nqM28MptDROwMUCNb5AaH31C7iHUVlOXuxh6q2NGJBuhNKYg1NdeNs3iQ/QNEiyL/NqlAwSzEIl/I7rw== 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: The logic for checking if a given madvise() request for a single memory range can skip real work, namely madvise_do_behavior(), is duplicated in do_madvise() and vector_madvise(). Split out the logic to a function and resue it. Signed-off-by: SeongJae Park --- mm/madvise.c | 53 +++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 4a91590656dc..265b325d8829 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1633,6 +1633,27 @@ static bool is_valid_madvise(unsigned long start, size_t len_in, int behavior) return true; } +/* + * madvise_should_skip() - Return if an madivse request can skip real works. + * @start: Start address of madvise-requested address range. + * @len_in: Length of madvise-requested address range. + * @behavior: Requested madvise behavor. + * @err: Pointer to store an error code from the check. + */ +static bool madvise_should_skip(unsigned long start, size_t len_in, + int behavior, int *err) +{ + if (!is_valid_madvise(start, len_in, behavior)) { + *err = -EINVAL; + return true; + } + if (start + PAGE_ALIGN(len_in) == start) { + *err = 0; + return true; + } + return false; +} + static bool is_memory_populate(int behavior) { switch (behavior) { @@ -1740,23 +1761,15 @@ static int madvise_do_behavior(struct mm_struct *mm, */ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior) { - unsigned long end; int error; - size_t len; - - if (!is_valid_madvise(start, len_in, behavior)) - return -EINVAL; - - len = PAGE_ALIGN(len_in); - end = start + len; - - if (end == start) - return 0; + if (madvise_should_skip(start, len_in, behavior, &error)) + return error; error = madvise_lock(mm, behavior); if (error) return error; - error = madvise_do_behavior(mm, start, len_in, len, behavior); + error = madvise_do_behavior(mm, start, len_in, PAGE_ALIGN(len_in), + behavior); madvise_unlock(mm, behavior); return error; @@ -1783,19 +1796,13 @@ static ssize_t vector_madvise(struct mm_struct *mm, struct iov_iter *iter, while (iov_iter_count(iter)) { unsigned long start = (unsigned long)iter_iov_addr(iter); size_t len_in = iter_iov_len(iter); - size_t len; - - if (!is_valid_madvise(start, len_in, behavior)) { - ret = -EINVAL; - break; - } + int error; - len = PAGE_ALIGN(len_in); - if (start + len == start) - ret = 0; + if (madvise_should_skip(start, len_in, behavior, &error)) + ret = error; else - ret = madvise_do_behavior(mm, start, len_in, len, - behavior); + ret = madvise_do_behavior(mm, start, len_in, + PAGE_ALIGN(len_in), behavior); /* * An madvise operation is attempting to restart the syscall, * but we cannot proceed as it would not be correct to repeat