From patchwork Mon Mar 10 17:23:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 14010446 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 706ECC282DE for ; Mon, 10 Mar 2025 17:23:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C72828000B; Mon, 10 Mar 2025 13:23:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8046E280026; Mon, 10 Mar 2025 13:23:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6081D28000B; Mon, 10 Mar 2025 13:23:32 -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 31A4D280026 for ; Mon, 10 Mar 2025 13:23:32 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 593D4C12F1 for ; Mon, 10 Mar 2025 17:23:30 +0000 (UTC) X-FDA: 83206312980.24.5899C8C Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf20.hostedemail.com (Postfix) with ESMTP id 8C0E71C000D for ; Mon, 10 Mar 2025 17:23:28 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=cfK2CND5; spf=pass (imf20.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=1741627408; 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=pTtQhCKqvjeYCewdvDnPMtPDfLVqUorUj87AmPqHvZs=; b=WUyk6xLqVpDICpTHCvQEKEiiewsg81fzQUq1Q6C1ABgKGKOdGqHSk2IWcT2Wlujd0GSwQZ CQSiwUsDg32R1pOMF4l7qqTjGdGy3Zfu0S2Vc8daM287kcJnWVtAh9nV5e87o7QLyIAwWF u+6GCsHczcciwmEV2p0tQQfREEgUtdc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741627408; a=rsa-sha256; cv=none; b=0/1IIIpcJOSP9MbAWiOGpkgpDup7d9bvKwaOccwbq23GS6pHEsOzLgKM64d9Sboqp1Tqk7 i63z0f70fNdMtLVXVzpRut5GAF7KkRg/VqmUwd5b7q4gl0lA7F/YYZQBzz9khNr9wuTO+x PXDW6mPzA3M1CpvmNUta3sXExP2nG0o= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=cfK2CND5; spf=pass (imf20.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 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id BC9B65C5405; Mon, 10 Mar 2025 17:21:10 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3427AC4CEEC; Mon, 10 Mar 2025 17:23:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741627407; bh=wUeeTxoF6/W5BNmB2wyQPZvoKyORH7hO5pM78LtrSAM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cfK2CND5xWYz9nn8nUacYGS/fBI3F77IP5i/AnejOywNLUUScO7lFdcvtIqseomMj EeJnrxKN9JefLc0Rx5KoOLV0nimE3wn8gMM9f93f+CvKNBenCp2BXokS8fjdiwdmf3 R0qA0M9s5Fe9S+kBRKu5nS7Pzh4vE4wTRWzZe8RA28TE9ujg9vagLeypltyUywXpui DWQjz+kPfXe/Ghjo7OpB2glKV/S/A72l3FZVrrNFJR0QOlQKQAjp7Tz2V6EgPm4ql9 yASG4MgVpytpi5cvrfDIYPvKpJ55rstceXLqloJMGS4JTTgxOFrEeZzirMoDK+wrpc pvGTGCY2URD0g== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , "Liam R. Howlett" , David Hildenbrand , Lorenzo Stoakes , Shakeel Butt , Vlastimil Babka , kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/9] mm/madvise: deduplicate madvise_do_behavior() skip case handlings Date: Mon, 10 Mar 2025 10:23:12 -0700 Message-Id: <20250310172318.653630-4-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250310172318.653630-1-sj@kernel.org> References: <20250310172318.653630-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspam-User: X-Rspamd-Queue-Id: 8C0E71C000D X-Stat-Signature: rgsdbxgh7j1fe43oimoyayqow81jxoan X-HE-Tag: 1741627408-517745 X-HE-Meta: U2FsdGVkX1+Tv6VbEOf740+vN7ZO3QKECv9NvYmEgE2LnnWeeyL4Cx/jikfIdjubOejukE2WkgG2HY1rG3OF4QL7kzizlo3uHCiJoelijOwprDMVfpVvI85wlVkqvm4/U/7XOqyUJDhBdU0YFSi75tvl4EklY5Rmuxsw9jlYnvrKSiJtCMRNLqlTjuTuKD90hpCzknFGBT+XttUK+pLOlsYPVWoxD0OxNRzcdcy5IoyqqC+mzlNAv9cilGq8sMezhw3f2nrfh7peB6EJFb4uQWosTFC7nWbdhlR/0BOU8Ex06V9SFI7o21IuCAcGMYS0Gwox4uY01tbLnNAS7gJURvPwlfqAjfUfLrJk715zudTqwfPa9o9S5J5MPt9xYlZpNoDBo7puZ2TSCc+4jaMl6TusAkLiABdqnlnCttYdS39nkEZuCeDj4Y8mxk7uqM2YTioqbJQQ/2dU641nzdaR3MyNRITW6F241N+3gFOCHBas2uoOJJ48U3D64TGni5T1c47RD+hmf+0sSgEugy5WBakPAuoCxYRfrr48zQXWFhw3luQ+DA1FjzPnUhWEIyzWbPltY+vMg3mHs4xBkMx6vkGtM8KpcZYITcghKVVQSHz2fDvzZ5XJYtAKeP9yvgZEB4Y41Kz1judMzX2Bze5DOXcF3qITpS9qDIcWP2wizFeHvnNQfBki/jQOgY6HOAdOFlOIw7vaYGdXPtADO9uVaRWrkMuCqOhdAKNpSsBc0TApNvgFPMrWVn9NUIk4AyXbEwfvSt9M9hBifBknwlbLuXkW1PAn87hnuyldMGuJj3GOyIymmmuLmQp4swPCvRvigFPcyUnBruncbNtZXgvnGS8jCTInWCE1NWxsml7BEIrOUABNhGNIRPZNq10IsZPV8IiP3AIkv1TRKluLu52mln6iDxukuZtLeyc4TNzzeEJJqWgGKgWvUj5N/scRXE0J0KMf1XYvB6spxH0DONC h+gzhk+Y q/v2BkMRENAaAX2et4QjSpqpvGixNVdi6vFjYChdQ6juHEpUS6Aqv2yCwgLTnNVkNnAaFfDvkBXsMBfcm/5pc8G0vQTqNo9sFLOkk3tMlZ10fST7cjhU/UGG3+Mhj26oJD3KR+HJZPivvYWvlFDD6+wljwIZOx/nR6F4nMQsK9OsdPtQgpeNCvKHAvwldqDGS2cv3uyPusaaK3ZOk+xTYm8lJbpawzVtd2dFmNYtSOuuulfaHOwe2dOspgS6iBTf/zgJN6Uj+tzTuIy86Jrar+qJntw== 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 Reviewed-by: Lorenzo Stoakes --- mm/madvise.c | 53 +++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 611db868ae38..764ec1f2475b 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1640,6 +1640,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_madvise_populate(int behavior) { switch (behavior) { @@ -1747,23 +1768,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; @@ -1790,19 +1803,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