From patchwork Thu Feb 6 06:15:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13962278 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 9B69FC0219B for ; Thu, 6 Feb 2025 06:15:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AE98E6B0088; Thu, 6 Feb 2025 01:15:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9FC5F6B0089; Thu, 6 Feb 2025 01:15:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8EBDA6B008A; Thu, 6 Feb 2025 01:15:24 -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 729D06B0088 for ; Thu, 6 Feb 2025 01:15:24 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 22A1BB1C35 for ; Thu, 6 Feb 2025 06:15:24 +0000 (UTC) X-FDA: 83088507768.07.CD81D12 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf11.hostedemail.com (Postfix) with ESMTP id 6D8F240008 for ; Thu, 6 Feb 2025 06:15:22 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Vuq0xk1G; spf=pass (imf11.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=1738822522; 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=YQ1U7tbqBuRXWxnfwD2FvAQPRZmQE/SHRz70uqZ2C4w=; b=WC8VPL96AAIWx09qBCwhoZXZYZVrmx4Npf+f2l0bfA2OJYzq3ltzAGbtTrNPEsLagZNxdb 5BShIJ7gtuAeq0+dPo1vnV62mdTLkrlc4jhlOncoBK05Xg9jTGCLXQ3vG6Wj6zhfLQm5k9 Tl4peU7A0eio5v89p1LFEaE1+TkD4FA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738822522; a=rsa-sha256; cv=none; b=lRUpoaOuDc/hQrVAfXwas6yY1HHA1i41vizOOxMRj8sASz/jgs74vwkifMNAFF2qwCYqnV gZqsMIiKLFgOAQtXkbDNUJYK9XxErSF83MEKve+dAspbllAuMfVGtBFlC7360gwnGpD0OA MKoU7/IFJbudSCboP6nylA8w6A7cKU0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Vuq0xk1G; spf=pass (imf11.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 E65B85C6F62; Thu, 6 Feb 2025 06:14:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 35113C4CEE0; Thu, 6 Feb 2025 06:15:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738822521; bh=v9imdnw1laUwcaZ0L7TzqeKruhJu/RKKPxXcWFCWS6k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Vuq0xk1GFf7K7aLeK5IU/IWvtpIglV8lakjb0V1/ii6zxiXGBD7/syJXUxK25irCD iLncnsB2VIC+lM7KH0pa40jsRpBrHH4xRq4h7UeGVNck+6bFLUiZdQOXJxL7AHwzit mc1qT0ZG4agZsNnCC/uog9DbOayV7qesHAV1FG3A4B2dQ3KscqoMUeDSDkQ9sS4KFV yE7O7Ux7EBw1ZLLvXd1SENfTf1iaH7Fh0wvrfuRYu9h1dozqHbZ3wxkitTWgN52j5v LlNfVrlTyxwSeRZ4IRTNGSt7IEN6bwYhHFuPU1D7a8S3YmM4QSF9FXPB0Clld9tlmh t1ZkiV4Tmwafg== 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 1/4] mm/madvise: split out mmap locking operations for madvise() Date: Wed, 5 Feb 2025 22:15:14 -0800 Message-Id: <20250206061517.2958-2-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-Stat-Signature: wgrk1eppgu7ne1dfhi9hrzi15ozsg7xo X-Rspam-User: X-Rspamd-Queue-Id: 6D8F240008 X-Rspamd-Server: rspam03 X-HE-Tag: 1738822522-989183 X-HE-Meta: U2FsdGVkX19CF2i7ZiPKq/P4RplqA6VT3DgQpXluOpDJOCEvQT0rCoR2EjHw5FGTMjwz1vhNPgW9la9IaRdjc0Rh4aC9rer2bdUgybby7DwQTaLVJeYiORDEZbtc5PH5iCI623Avs2wHTu9SKauV1AUkPbQTi5lDOo68T4X5pk+yziz0gQVQEkwF6swTqp9VuFtstJ6BG3GSOgQsq02/p+Cn37Uaty3KRfAqrHhbQLBYCDMOtSQk9ss0xuJsOZYVnUvCuicMF8TmnEeb5xSKAoBwuhGaBZWFYeOQoL4mH2c1vPMF9liruu3xmHm4fq9POVYXqwBC8tZFG+7q46SoDj4fbfkwR7Cm9z2R/BJYQloYF5HPSK6yWZaDn57d8ZQGOmsVDssHBXov/blkJig8LOdTOJxJhBEFd8mzJBRHP5sHq7VmmxVtZbgADHmI4RWm8GjDAW3I0hWzLuoqygwo1Z31y35/kEnVEbmNK4a75834po5DErAa0Ic1PRiyUMm7PnQ2BXkZcdTm7WQN5G+JuXpNKrNCnmO2RItrcbHhokWfWsBZ3O8cLvqJo7V1rkbWZh29fmUy58ahyTW4HVFT5fCaZuHk5CwTPXSzQjsA2hdGaE+rSCRPdJ0VfFQbWxHTdgsM6+xhXrZ0MusJHzibyTBC6ifv8hf+b4VRYvcuzcmWpi7PYsJYaWx0oH5ZtKFIk25ygKZkyvizHdeQGTr3o8G6pw+qIyntR118yiB97X8yAg8cJe7xub6ll6tplXvMTGfPL0AKFY87fsF1mECVMphRSWZBBLBqqPE31ygYszpq30CumqTc/ssG64QVRJoA7r6wGggCgM6hi7gtnfHQuo6Gqg+I6Dfac40HUEpB+nAMEVmZAmFq0uBh8U+91jq4waSjnAZGUJkc/hBOGqlMelbnN1p/1nGWwidCG9IQuxsn5njy7E7QLj1GGRNo+8MwFm1RItGo8VJlxFcSZy5 vziOWwRR Q51TPik62xuMV3iRHy/5EHxm3i0U17VQZzwybDBn3hU9A0lJm6D6wdjhSSZ30i+P6FguKG5zumkWQQSxeaNEjldzB2feUyVpa8SYw+XUI8g5I5VwSxvicbfLSQ5UgXVdOCWaP+ZftyueKIMw0kRs0HQ5lNHjJ6HLjD1j+L3W42+c4wPy9Y7J0R2ZVgQQh8PnqumM05dAFT0XgOj3RGtEuNWlO0ERuJ23Rmwp0Zbx5jsaU80LtvCFJygL/NvKUGQ8m8ML5Ya+i8mWtZL0yeUTq6nhF5eOBag/NRPK0I9TZeFiGw4pr6ZbJe+ETeA== 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-dependent mmap_lock operations from do_madvise(), for easier reuse of the logic in an upcoming change. Reviewed-by: Shakeel Butt Reviewed-by: Lorenzo Stoakes Reviewed-by: Davidlohr Bueso Signed-off-by: SeongJae Park Reviewed-by: Liam R. Howlett --- mm/madvise.c | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index c8e28d51978a..df5a87a1846a 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1567,6 +1567,33 @@ int madvise_set_anon_name(struct mm_struct *mm, unsigned long start, madvise_vma_anon_name); } #endif /* CONFIG_ANON_VMA_NAME */ + +static int madvise_lock(struct mm_struct *mm, int behavior) +{ + +#ifdef CONFIG_MEMORY_FAILURE + if (behavior == MADV_HWPOISON || behavior == MADV_SOFT_OFFLINE) + return 0; +#endif + + if (madvise_need_mmap_write(behavior)) { + if (mmap_write_lock_killable(mm)) + return -EINTR; + } else { + mmap_read_lock(mm); + } + return 0; + +} + +static void madvise_unlock(struct mm_struct *mm, int behavior) +{ + if (madvise_need_mmap_write(behavior)) + mmap_write_unlock(mm); + else + mmap_read_unlock(mm); +} + /* * The madvise(2) system call. * @@ -1643,7 +1670,6 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh { unsigned long end; int error; - int write; size_t len; struct blk_plug plug; @@ -1665,19 +1691,15 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh if (end == start) return 0; + 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 - write = madvise_need_mmap_write(behavior); - if (write) { - if (mmap_write_lock_killable(mm)) - return -EINTR; - } else { - mmap_read_lock(mm); - } - start = untagged_addr_remote(mm, start); end = start + len; @@ -1694,10 +1716,7 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh } blk_finish_plug(&plug); - if (write) - mmap_write_unlock(mm); - else - mmap_read_unlock(mm); + madvise_unlock(mm, behavior); return error; } From patchwork Thu Feb 6 06:15:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13962279 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 8E232C02198 for ; Thu, 6 Feb 2025 06:15:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B36EF6B008C; Thu, 6 Feb 2025 01:15:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AE8186B0093; Thu, 6 Feb 2025 01:15:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 962736B0092; Thu, 6 Feb 2025 01:15:26 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 716C86B0089 for ; Thu, 6 Feb 2025 01:15:26 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 318A1A0ECF for ; Thu, 6 Feb 2025 06:15:26 +0000 (UTC) X-FDA: 83088507852.01.1DAC0AC Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf26.hostedemail.com (Postfix) with ESMTP id 9D96F140002 for ; Thu, 6 Feb 2025 06:15:24 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=E1xkWOmc; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738822524; a=rsa-sha256; cv=none; b=xGTTmfM0RA3Is50+ssraPYOnhVmEh287gw+uNESqbc0YS9EnH0F0OTJJ/0IAUXR1RCFZjV qVWYyJn+Aij6Fymjqp6juL8oOjqthoE6TWqilkoy8KE1Nfz2wc5boX5jTVMa/ENHx33NTs Ceym0GXZfUWFj1RWzliOE5SMDZhdk9c= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=E1xkWOmc; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738822524; 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=ovut109HRvJumBRdKoPCxxldzgO8M/QDAOJI1ronHtE=; b=fAld3SMRrIRS3lZ2ev3HObAjwmZ60dYnMtp7cPEMT3z4jDARdFEc/sfAnJcwZG5dkhcZV4 y7hX7HrCVtEBKt76/uaSOJlHTlzeej32TuN2kwzwh79jlMgwOXh7uZhxAodrklJwzcpPlu nlSCVrEai6EeJuU5HGMtfW6reqoPzj8= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id DE0E1A43D8A; Thu, 6 Feb 2025 06:13:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BACD7C4CEE5; Thu, 6 Feb 2025 06:15:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738822523; bh=mfBMQDGwCijsuSEaM5RCGlWQCxDRxNtkNxhQORCqX0Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E1xkWOmctRFfUviRHAuoF/YWqqtLhCLSeVJMBCIZ5GOfqX1Em3z6RE1AsxPdoFvDD DcmtmDzLgBMTvvl9UJA+Jpmt30YKmA5ghNeJS2A6DqzlEe5dDoE7SVFsK1znh2SXXT m8kJckllh6o8rTjHTiWiWPNXY3TwvPqqeRkdlvE+X0eUk1rxbmFdJZ0d7CXqty/uXB 5vk5WFGbcI9uK2h/3oAZu064VNDhZGcd6TYV76rphB8u6smNhIJBi6Npo6PCYlWj02 1vcsPrkLrYI7Gp5UPuIGgBGedOPuWnhC4dxe6EWSGe+Gxxj6S3PhBWLyYVz4sV36CU 2vGrcVjrwY5IA== 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 2/4] mm/madvise: split out madvise input validity check Date: Wed, 5 Feb 2025 22:15:15 -0800 Message-Id: <20250206061517.2958-3-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: rspam04 X-Rspamd-Queue-Id: 9D96F140002 X-Stat-Signature: znd314rpq7trayw565pzyyni6aacahdt X-Rspam-User: X-HE-Tag: 1738822524-774470 X-HE-Meta: U2FsdGVkX1/OQTOdiSZfuviTfKviYdL9neHZCPrAhvthvltJvVwnzLyrT/2+f3nC+a3XjjC+wHMca6yP0U45nOSMi9ayzbSiePZeQOkrLVYk2bBgICRLWWfFeHe3O8exe1btvaBxy2z2xoTwXSKD6y93ya5if+xwWK9k8IdpDVjpbnTVcHYAUTUcb0zMuUDUWoHLfovWt4weLPKqSz7KAxsIjykpkobJbLz4DwIGzAkirHhC+5mmKMIyvN6ZbM3LYREbP41peskBx3WkS+xKU52xRb5JrklbIddCTHb/ctquPpBsRUEhaj6XJ7f7u1tjvT05FIj7yjpar5EPmIQNSmYdPyYjEHTRtlWFaDsC3SH0NnH/jRwOHSWDUjKoALuLWxGMGF7u+qcsTiW56ZOK0zFtlPWubfjVCoRUI5hnwq7sumpGeDn9M+hZ7mWFFMNBTaUPWLUeCgkDLoKhoM56+J1EQokTBW71S4S5MO494DTJVRnpDc6xdaf7S2GF/qdvFmArxMUlgSxhEVTEsC1UEvgmNhRCmP/zF1A4tYoPdFQ8/YK+7EDXo6/9mARfQnQPbB0OtCGkIjEBGA7Hpz3wK8QfOLHGgKqT2j0EI8V+39i4qGKPsMd7ZACqd94fNZG0mehKla+BR0E/Nl+c41+vFDtOTNUYQyGF5o/dRJ/I/XD/2oUUmi2RmIdRiNdbjMZZu5UzIsJXncaikAG91zpsq50nWUYsb47bNxsjn4h+EXSR9QqrW77xKXb7gVIQUJTf9AKzgyElEQugT8sxK4CJ939E5HoNbSUj9Uyf0kLfAGPXDHLt9DP5GGFMA7JrMgZtna27S5PD2LOF5L+fZHANuJw8lmBw8P9G2r4wsw3zlhDsQfEqH7Bk81QkqrtjniRli2HL2TLLz5qHwNx+zPJ3yX1gflCI+nakMGBFYh7YnhFt1gHYFwCqUl40Dot59aV0ykqtbqiwHfLd92T2leD Nr4/y7xg 5XE/B/7hjpcSa00art+WjawZ1L22G4CQ7B9TvWU2xC4MxnlvqwcvD2Ih4muGz3B5lCgju2z2ZMO/TZaD51vYI8YqMs4sYbkaZVkB7raMjdlu/RlAkb+o8v7wKTWwYTqOfN8+ijCtyfrddBj5SsuEorCqF5gyeGGi3lkZ8r2whZ9lG2SfeSd/CTswx2qjsg4Or2tmtUrkSELw5Mgxa/mrIRTBOF7LYMyqc5adjw800x+Vjpgfvd2J4af/Apm7yyNeavhI1PT4CPRFs5K7xtjvqI6Rzff9RAsCMdOCya4Dwvn6UJjCNZZyRo5otow== 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 parameters validation logic from do_madvise(), for easy reuse of the logic from a future change. Reviewed-by: Shakeel Butt Reviewed-by: Lorenzo Stoakes Reviewed-by: Davidlohr Bueso Signed-off-by: SeongJae Park Reviewed-by: Liam R. Howlett --- mm/madvise.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index df5a87a1846a..efab2878be7c 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1594,6 +1594,27 @@ static void madvise_unlock(struct mm_struct *mm, int behavior) mmap_read_unlock(mm); } +static bool is_valid_madvise(unsigned long start, size_t len_in, int behavior) +{ + size_t len; + + if (!madvise_behavior_valid(behavior)) + return false; + + if (!PAGE_ALIGNED(start)) + return false; + len = PAGE_ALIGN(len_in); + + /* Check to see whether len was rounded up from small -ve to zero */ + if (len_in && !len) + return false; + + if (start + len < start) + return false; + + return true; +} + /* * The madvise(2) system call. * @@ -1673,20 +1694,11 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh size_t len; struct blk_plug plug; - if (!madvise_behavior_valid(behavior)) + if (!is_valid_madvise(start, len_in, behavior)) return -EINVAL; - if (!PAGE_ALIGNED(start)) - return -EINVAL; len = PAGE_ALIGN(len_in); - - /* Check to see whether len was rounded up from small -ve to zero */ - if (len_in && !len) - return -EINVAL; - end = start + len; - if (end < start) - return -EINVAL; if (end == start) return 0; 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; From patchwork Thu Feb 6 06:15:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13962281 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 8E3AAC02196 for ; Thu, 6 Feb 2025 06:15:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F98C6B0095; Thu, 6 Feb 2025 01:15:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2A9336B0098; Thu, 6 Feb 2025 01:15:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 14CC76B0099; Thu, 6 Feb 2025 01:15:29 -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 E001C6B0095 for ; Thu, 6 Feb 2025 01:15:28 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 89F551A0EA2 for ; Thu, 6 Feb 2025 06:15:28 +0000 (UTC) X-FDA: 83088507936.03.1C673E6 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf17.hostedemail.com (Postfix) with ESMTP id 059B34000B for ; Thu, 6 Feb 2025 06:15:26 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=AeS+zBDr; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738822527; a=rsa-sha256; cv=none; b=J6aP/q9rEm8TpohrqUmo49YidQ14dKO6mZn7E9UQ+301vPvzpt9Iuu13Qqysx++O63gr1U /aUWaxH8AIXSEV/YXI5LkmN6YJXrBzlY4/HX8OTSfyjY366Uzht8yKE/pUrB1BzxzoWtB5 9GxrWoWP4ov4nj1td6QinsckSYGMLtY= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=AeS+zBDr; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738822527; 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=kl7TKXcbTcFj5iJ+BH+SzL4FJu2WVjds3yDj1decLNQ=; b=C02rYSA3oTWGGrUhz/LGxR/elVGueobI0N0ltQznCNAnOyx3wkWP8ukLsWUfXuSj78hkpr KYNnTueB9jj0YqcsgUmqIVIk2xPMVsLbq3YGfWzOOy742516+tt4JVTohk4SRj92uz1OC0 I52z6b/k9/A9V4hOeQDdk9kd8DT2FEA= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 70191A43D8A; Thu, 6 Feb 2025 06:13:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E5517C4CEE7; Thu, 6 Feb 2025 06:15:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738822526; bh=MP/17pf09yAFjnq6HfK1rSNsdKEXlrcNK/A1rjmLh9Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AeS+zBDrcocIE5whSD/5gWTiHktVgl4p1z2AIiKeTcCh7xmQYLD+OXL/RaZfFtNcu hV1sCJcNigWgqPbttaPV4aOO1TIGzB6zT9MtTB+m3BwqfA2+u4O+xc8GLeo8W9DGds x/93/07bnlYUuqh3x8jnyxl6WwwrXLZigIC2mljeqwpA2HmsX3TgbDO+Cm91Gdq4C+ cBU/LRxPoRAAuv426uEieDoORu6nhMXi7jb0qNlNssLt7jWZwV6J4rVPBQ5G9ittRh Sb1TCC8ZuELFpKY3xHwi1CO6RGRYiv1weim8TPZB9h22iVgvfa+V83ScIn6iNEVS0V URqSXH8iKa+hg== 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 4/4] mm/madvise: remove redundant mmap_lock operations from process_madvise() Date: Wed, 5 Feb 2025 22:15:17 -0800 Message-Id: <20250206061517.2958-5-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-Rspam-User: X-Rspamd-Queue-Id: 059B34000B X-Rspamd-Server: rspam10 X-Stat-Signature: omh6j4595o8ocpgm37che9bzu1s35bpg X-HE-Tag: 1738822526-403723 X-HE-Meta: U2FsdGVkX1+1n4yCr9V8D5n95++yiJnIFRSqbhVFJlaGIvO1QOLUNmr+voB1coWiiFy7ZiyiSwipEsYAhfzDfz4FAVlzADZQNWF5s+8rXjZFCXCJ8jTq1foqPfoJUPFXskWsqP+GKOduhiTLTNOhma3gLCsOWQZOBZab5cqVBbA/VDI2UvatCMR+dd01gjEtR5+lKq3+ajkkcC/3rQ6IcfeeJWY8ib53tApWHetMe1PLkXNYQllNvXUzijUcFB+XKkmzcoL77qKcHa2tzBgJvbrK6bxCnRIYvghwYU7U/ffWQURzujYI9zum0jstNF0+6/UunDWnc7BfHJCwCFXvQ24qDrkDl8txiHdIcWa73V6StB5OhJbuRAyoeen5e9J/8MgC5puPj16HR3CsgtplK1ttAPSJNZNSPlLRIS4gPvCU0kWjL0KmWQ4QIiXcHs8XoQCmRbQY55Hect8mgAiPJ6/0Ou9mPiHv+JtOquHR+AMCoXLfbuEfLnhvxgxx/k2erBpEnE+Iz/aRJPhRwxFHOA2fo3fDJAG/12rrJQh1Lb8U8+E21yA/gVgRcIyBHy16u32hwdeCQM2nERyL86cuOQOBBshsjqs/EKhsDAz97AJljDa7y7tubTcIb6pAr/mfAdwbIZ8WpKxt6hRE77Rj4wHHqKVC1qsS7AhAa8wmSc8Xvx7vQ4oU8b3Q8sVsotCxpS6RMk+tEA+8Nb/jIuYoZIBiWP0NXmEc5Ztpwob2xc6VLH7oAtzZNskbpoL3lcnT+c70cRMn3sRHKEFwLzJyHWehw3c36VF9+DOPAKZ2Yuv8ThPR68eCR/RIKmSX72ZQLQhOou24VGRJZaIwyRkAsXhMQngeEBN7ARD87qV0IaTN8wPhClyAGJiipiung24bhznQ/buUfr/FGj3Pv0K0LlgL92DMYYQxMFrBr9s3GV7ccK0fvaLk9g+PqSYKQGRvAlUmVR5fqRdcdcLQyBT bTXVV3Ym 0uVAaBGjZVO/b2okB4TCDcYh0FwwD0vVYjr62FC1LbXy5TiOa07hEv7RedieNvHcWPtTy8/xwk96o4wy+AvpCDBYLtBLI8zbr0IZlO2Jrk42IBlkGL/BwPg890auwev72fYtrTOlKAWQm3gou69fwTvQvaMh2fLlKcPqQkdjYPBjXawQ8WotU60k1UibfL3GZKQgXEO2IILfv3h3KDIbazW5gndoaOMcatc3DZydgFBLyez7UYkVUKmv2DjTlPgRwOVcmLUlgfDHr8pLPxbT7ingCFg== 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: Optimize redundant mmap lock operations from process_madvise() by directly doing the mmap locking first, and then the remaining works for all ranges in the loop. Reviewed-by: Shakeel Butt Signed-off-by: SeongJae Park Reviewed-by: Lorenzo Stoakes Reviewed-by: Liam R. Howlett --- mm/madvise.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 31e5df75b926..5a0a1fc99d27 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1754,9 +1754,26 @@ static ssize_t vector_madvise(struct mm_struct *mm, struct iov_iter *iter, total_len = iov_iter_count(iter); + ret = madvise_lock(mm, behavior); + if (ret) + return ret; + while (iov_iter_count(iter)) { - ret = do_madvise(mm, (unsigned long)iter_iov_addr(iter), - iter_iov_len(iter), behavior); + 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; + } + + len = PAGE_ALIGN(len_in); + if (start + len == start) + ret = 0; + else + ret = madvise_do_behavior(mm, start, len_in, len, + behavior); /* * An madvise operation is attempting to restart the syscall, * but we cannot proceed as it would not be correct to repeat @@ -1772,12 +1789,17 @@ static ssize_t vector_madvise(struct mm_struct *mm, struct iov_iter *iter, ret = -EINTR; break; } + + /* Drop and reacquire lock to unwind race. */ + madvise_unlock(mm, behavior); + madvise_lock(mm, behavior); continue; } if (ret < 0) break; iov_iter_advance(iter, iter_iov_len(iter)); } + madvise_unlock(mm, behavior); ret = (total_len - iov_iter_count(iter)) ? : ret;