From nobody Tue Dec 16 07:08:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0CE2F139D1B for ; Fri, 17 Jan 2025 01:31:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737077471; cv=none; b=R2KsN43MOREnflzBNlgSk9WJkFHOG8xv+/WD0l1lfvAt89VqixzPaYAaqniUiwSjHZpX8TFQLJ28qvKAMTSCmzAx6jDZGfh3I/qRiJEYMDp5ud7RhqwMD6qTxuIErOAKe3s7j+7ktREb7nuQp9QnQodiCFGTpeHkUF/qCOjmBkw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737077471; c=relaxed/simple; bh=E41yb3derXfi0u00Nrf+03FhBriw1gS2QNY0ZO6tnXY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QdbxxHhtS56QkzROXnPSbGNLmVffLpASURUbaqEdwY4xkcaB+trbooPAewrIoLjbXkTvHkhh6Y/Qi/M3gv5qABGfwZHbQApzhsNPKOPuhcJGqi+Q5dsvugQhxxDbSSI/tMtocfM7Iqj1VXSHo06Z893Sn6TCU54DrjYI94FJ9yo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=i1LgonO2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="i1LgonO2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5EE7EC4CEE1; Fri, 17 Jan 2025 01:31:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1737077470; bh=E41yb3derXfi0u00Nrf+03FhBriw1gS2QNY0ZO6tnXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i1LgonO2IFisFxXpOtYWRGWHbaU6RQ+sSLEZ/49a3dliUM8D5Q9j3NgynM6OAWyDn I8NEz3h6ZPWoO7CYSdLy7t6seEbz1AY+8K7MrWWSMVjVkFxLaOyyeXWfy9pOwn7zdG HJtqneNclvmwIYiCDnagVmQQkzh2nqSkm3AmN5u3wIU4YCM3tmRG9OT7c2aCw0cB2h 4m/zPi+JDb7K28wxwE6XkVT1AawSjgG1awi2EkrnoJl2x86ddyAvQe5T1CgCUZCyr2 JzkfjJiGghIwGi8GQG3GTDN9EHMwR4YAFhP50jL3XMCHx+PEsljy4JxF4cZffknNT7 Ig1TJ+Y8Gv7fg== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , Shakeel Butt , Vlastimil Babka , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 4/4] mm/madvise: remove redundant mmap_lock operations from process_madvise() Date: Thu, 16 Jan 2025 17:30:58 -0800 Message-Id: <20250117013058.1843-5-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250117013058.1843-1-sj@kernel.org> References: <20250117013058.1843-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: SeongJae Park Acked-by: Davidlohr Bueso Reviewed-by: Shakeel Butt --- mm/madvise.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 913936a5c353..1a796a03a4fb 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1752,9 +1752,26 @@ static ssize_t vector_madvise(struct mm_struct *mm, = struct iov_iter *iter, =20 total_len =3D iov_iter_count(iter); =20 + ret =3D madvise_lock(mm, behavior); + if (ret) + return ret; + while (iov_iter_count(iter)) { - ret =3D do_madvise(mm, (unsigned long)iter_iov_addr(iter), - iter_iov_len(iter), behavior); + unsigned long start =3D (unsigned long)iter_iov_addr(iter); + size_t len_in =3D iter_iov_len(iter); + size_t len; + + if (!is_valid_madvise(start, len_in, behavior)) { + ret =3D -EINVAL; + break; + } + + len =3D PAGE_ALIGN(len_in); + if (start + len =3D=3D start) + ret =3D 0; + else + ret =3D 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 @@ -1776,6 +1793,7 @@ static ssize_t vector_madvise(struct mm_struct *mm, s= truct iov_iter *iter, break; iov_iter_advance(iter, iter_iov_len(iter)); } + madvise_unlock(mm, behavior); =20 ret =3D (total_len - iov_iter_count(iter)) ? : ret; =20 --=20 2.39.5