From patchwork Thu Feb 6 06:15:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13962280 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 12F98C02198 for ; Thu, 6 Feb 2025 06:15:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 210236B0093; Thu, 6 Feb 2025 01:15:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 19B296B0096; Thu, 6 Feb 2025 01:15:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E441A6B0095; Thu, 6 Feb 2025 01:15:27 -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 C29736B0092 for ; Thu, 6 Feb 2025 01:15:27 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 6FCD7140EC7 for ; Thu, 6 Feb 2025 06:15:27 +0000 (UTC) X-FDA: 83088507894.22.D8C504F Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf05.hostedemail.com (Postfix) with ESMTP id D2F4D100011 for ; Thu, 6 Feb 2025 06:15:25 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="K/3arlxO"; spf=pass (imf05.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=1738822525; 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=msjc8JqL6bx/3CpLr3RKJKllXNfcdug2Le+QIMvqF8I=; b=PTS53r1V9bZjxpB81C2apGFCLjHPbmTZnMuDWJWzsqtaQcMlk4c+lo8H/tomvfJ/9ZnX4o bhzLjwRGPVXg381IXhHc9IAXIzedvG8c6EIWtFPlOS9HTGr1C3+dVdp4MlbPggalV7mMNQ dh6trLcD5hcfi5FiIz+1i997WqcnCrY= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="K/3arlxO"; spf=pass (imf05.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=1738822525; a=rsa-sha256; cv=none; b=1YJlZ6gHUBzndkf07sqsB3iu1DTfDHDviTqUkT96coT11xl8jfxM6t54pbLNjRLQohQOS1 ubtHM1xLzuLm95tETflj0sUixgRVCjS3+c37MQA3ufDgYavMhGb6uX9HzB+4JYEmqEUH7F 4QpCPrvQNKXYdAUWGuFX4VOsZwhgdwM= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 609645C6F66; Thu, 6 Feb 2025 06:14:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C383CC4CEE5; Thu, 6 Feb 2025 06:15:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738822525; bh=+hjnCmx0FZ2b8X/9Br4bzXPNjaytMayZsysgOyR4ceE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=K/3arlxOqIDaHiwNUfUWykQ8SDElT+W0dUaWTeLY7i0YEUNiktTduB7k3yK4gEaYf oK6SlGmzF25bAPkjWNd5Pqb4UF2JHmWaQRzVkvQ0HuA4br4Sqxqje2aWCdixuhjB+i KBm6fYYCM1QN2ZH7n4XXqvyITFZXT/aXmhx9oHtmuHlGBgYUqz5WXklyQ0nV1474md OsTGJV6+mPIVG3xq3BifF/4vf6+6hYpkg4mSZVve9pXPTG0zH94YvSTHv0guey0axZ yIM5ieBVsnOCNHth37flLuikLX6fnuHjDaQH10yps+aBuYBdimQCS645z/lHJlsDQT /58KitQjTM5fg== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , "Liam R. Howlett" , David Hildenbrand , Davidlohr Bueso , Lorenzo Stoakes , Shakeel Butt , Vlastimil Babka , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/4] mm/madvise: split out madvise() behavior execution Date: Wed, 5 Feb 2025 22:15:16 -0800 Message-Id: <20250206061517.2958-4-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250206061517.2958-1-sj@kernel.org> References: <20250206061517.2958-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: D2F4D100011 X-Stat-Signature: 5f4epyur5pr35mp3dcaxhoaq1ciaica1 X-Rspam-User: X-HE-Tag: 1738822525-851050 X-HE-Meta: U2FsdGVkX1+cq6Dm8iGGoOT+geiWq3KER4ziKgbkpenIBcDWXrQbiQ20c8Pt1tHmdFMIAFfrSvkg11jsW8JDom9eMZpXzNf3ZMHHojBFEIJL0u0kFyZWeh1p3K2S9G49/TkceSypXGso2jX3Oky7mW6lMsONiycqR69CMMePxd6KYX9BzT9ABp4BA5R07gsal/PiL84+yKvaEupn9f4r8+AJU/khZDzl600yqbfdaF662JCBU9bSthFTtfCB5uz/zC4d1q/H++H7Aph8vP+SxQnQ9vOobrKAgK5IxgfhfDUMAc2V7F1jBIFaOBXxatQBwzYAKa5Ebdiqm8ACK1LHR1rNtu77AAUfyoGbbhhYcgghio3xqmWcEinsW7lA1QggVzGgwSmg0DTV7EgxGuX4JiaDAZqeAdM1rMbkyTdMNnkh2YX+uqHntjP1ntjL2B0eccPvPN+OxaE5uLFjtBUI5/wP8gzq7EejnM/5cxWVix3zRJvOTG1shEA6V6WptzXGPYp01NZaFywaiLRGCgMpAM1teW58i84tI5HxufNwTr5MI0WKzIsLJhRsQdr0yw3J61pZlIgK9+f3ETy+2Ig8ruAnK0Gvbc778NX7borbmcO54ksoASklLDaQJuEUJdm7QmdXMhDI7xC59n/jyW7x9QpFgfqbKbjCu6mHFyYGLcY9D1nXgnOc9C9efjj6hDfudn20JQ+YJmNYTblwSgWfh70MwYnI8T9PefEnYuAn/g7ZSCXh2Eci+rO0el6kxN8oCIg8g5QP2aWL1frsiaEWippZrQxoYDTt9RrjDbZKZdEbhvI02YAgm4Gnrl/Ffl1GThD22QVM4fBBTNZWKJllDC3xFP0McrX7N3bjrd3VWejej03J9/ja36EfyfYARxRwMHecm9Igp8KzVDeBOuqRzNnpMHYZU3TF+BiAYxN72ARtX8hUmCqtbK/uN8moZkvGeOub3pItYMSJjdQefJj gQ5RvE/q 4cec54iTro1XpLALx72AjYHhq0IuN2zkP7fphQerg34PeqL/K6k5hONGzqAA0m84LrRVE9TSzYHasYAkYMAgXUGThL4zwAfnPwqYU5bgXSXbgnx3uCNzDU4dv9QYzicwWdlPHygzYf+XflRAeua6TbBiy5F2bHmN1mcdXHaDQPhfgJHEURyBpKHVaodXWGqas7ysGLE0QhHB/imA6oDkjyAD3g1w6xpunzagcTnLffaiEl9EFYbMoht+FYRZJEByY/iDS 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: Split out the madvise behavior applying logic from do_madvise() to make it easier to reuse from the following change. Reviewed-by: Shakeel Butt Reviewed-by: Lorenzo Stoakes Signed-off-by: SeongJae Park Reviewed-by: Liam R. Howlett --- mm/madvise.c | 53 +++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index efab2878be7c..31e5df75b926 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1615,6 +1615,35 @@ static bool is_valid_madvise(unsigned long start, size_t len_in, int behavior) return true; } +static int madvise_do_behavior(struct mm_struct *mm, + unsigned long start, size_t len_in, size_t len, int behavior) +{ + struct blk_plug plug; + unsigned long end; + int error; + +#ifdef CONFIG_MEMORY_FAILURE + if (behavior == MADV_HWPOISON || behavior == MADV_SOFT_OFFLINE) + return madvise_inject_error(behavior, start, start + len_in); +#endif + start = untagged_addr_remote(mm, start); + end = start + len; + + blk_start_plug(&plug); + switch (behavior) { + case MADV_POPULATE_READ: + case MADV_POPULATE_WRITE: + error = madvise_populate(mm, start, end, behavior); + break; + default: + error = madvise_walk_vmas(mm, start, end, behavior, + madvise_vma_behavior); + break; + } + blk_finish_plug(&plug); + return error; +} + /* * The madvise(2) system call. * @@ -1692,7 +1721,6 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh unsigned long end; int error; size_t len; - struct blk_plug plug; if (!is_valid_madvise(start, len_in, behavior)) return -EINVAL; @@ -1706,28 +1734,7 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh error = madvise_lock(mm, behavior); if (error) return error; - -#ifdef CONFIG_MEMORY_FAILURE - if (behavior == MADV_HWPOISON || behavior == MADV_SOFT_OFFLINE) - return madvise_inject_error(behavior, start, start + len_in); -#endif - - start = untagged_addr_remote(mm, start); - end = start + len; - - blk_start_plug(&plug); - switch (behavior) { - case MADV_POPULATE_READ: - case MADV_POPULATE_WRITE: - error = madvise_populate(mm, start, end, behavior); - break; - default: - error = madvise_walk_vmas(mm, start, end, behavior, - madvise_vma_behavior); - break; - } - blk_finish_plug(&plug); - + error = madvise_do_behavior(mm, start, len_in, len, behavior); madvise_unlock(mm, behavior); return error;