From mboxrd@z Thu Jan 1 00:00:00 1970 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 83E73C021A6 for ; Thu, 13 Feb 2025 22:47:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 00A13280005; Thu, 13 Feb 2025 17:47:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ED6D1280001; Thu, 13 Feb 2025 17:47:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D500B280005; Thu, 13 Feb 2025 17:47:04 -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 B905A280001 for ; Thu, 13 Feb 2025 17:47:04 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4A25BA1769 for ; Thu, 13 Feb 2025 22:47:04 +0000 (UTC) X-FDA: 83116408368.03.F0F4F2B Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by imf29.hostedemail.com (Postfix) with ESMTP id 822B512000B for ; Thu, 13 Feb 2025 22:47:02 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Dr7wzOhp; spf=pass (imf29.hostedemail.com: domain of 3ZXauZwYKCFAAC9w5ty66y3w.u64305CF-442Dsu2.69y@flex--surenb.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=3ZXauZwYKCFAAC9w5ty66y3w.u64305CF-442Dsu2.69y@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739486822; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZTYk4jMv74ux8pRXqzfOQIPTG5wd2Gv112zjF6xUHQA=; b=SiN212BnoXqQTxvo2HoZS4Efrb3/d9J4ig7MIemfb7YmooXNvVEwe3D6hupiTmK7ywAoy7 FlirKZucTxHsFNlWCP2582WYDS8YnB1gmPnZm87Q3oXZu7Brz8duBQcYr8SVzvpAN98JXc aG/Q5upqjJ3jD777XUjHQm5n2ok0YqY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739486822; a=rsa-sha256; cv=none; b=oov0ILU0TxZ27tYqhERo16rAla8Y2RONkcDKAKoJmevKP0H3WWj0EX1cEE7mZhi/LYr0kf iSDGDVVaHdSKGXV/KSko4s6b0qQPgeKWSsnSz1DlwuljsMzXIIq+Z9Ni1KwyeS/cZZIHYZ F1ohpfsoGywAwE0l+lQqcDGZW4VVHjA= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Dr7wzOhp; spf=pass (imf29.hostedemail.com: domain of 3ZXauZwYKCFAAC9w5ty66y3w.u64305CF-442Dsu2.69y@flex--surenb.bounces.google.com designates 209.85.214.202 as permitted sender) smtp.mailfrom=3ZXauZwYKCFAAC9w5ty66y3w.u64305CF-442Dsu2.69y@flex--surenb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-220d8599659so20725535ad.0 for ; Thu, 13 Feb 2025 14:47:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739486821; x=1740091621; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ZTYk4jMv74ux8pRXqzfOQIPTG5wd2Gv112zjF6xUHQA=; b=Dr7wzOhpoFYZdUauB+i314MhO88fzZXy1zD4mSFM7bA+pGR1uXcXX4oflpEY3VVyMi qFLor5RFmGTWFcnG4Bcr6spfij8QJZGLjqlvCUWaA60FQ8nma8DJfFZrCb9bvh0GxNKu WZQ83JC5xFpdy4SmxSloKJutS5u4bS0QywnqG/E8w2JeT1FeKA1h/eVQL3VsEMxrTBMI nDghEKFIH8ryBwlRgi+/3q6EZFXp37MBtGCtbBtakDnhEGnoIKwrb/IPPVopgMpomPWg luEPAbzDs8GDqd8lOLPOlo50ZsZ76BXveC6MOgvsn90oY/zatRJZIz3ppYCBHY2lbawE FTyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739486821; x=1740091621; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZTYk4jMv74ux8pRXqzfOQIPTG5wd2Gv112zjF6xUHQA=; b=qdn/BKdPww6Mxg01Nydt6B2lUjYeGnNZdK1m9tW1TETN6jlj86tvSnc6SJhh2hgcwO Wyg2BsoimIKbV4tnjCTl/MFUvHYAdgF2os2zxeyk0ic9tR0gDSiVB3nzT6iSF1Dp0tIm 67fwrv4eubm5QuY+ThnT+oIeMEBbTzKVrTixtqKNtMvmCKMu49J8F8wWK217AtpfvRV1 cWCijIx+JmWunVQqHGAHZmKIQQTE9asKUlo/Iv8Dnx7HsjO9PyUBrbw9TjfhCxYo1CBW +HdFPbp3PJu5hPy6UHlCPzz1TjKv4R2rqmOYuU7wL8J01n5rHSFpDkvBjMW69sFjw0oT 3c+g== X-Forwarded-Encrypted: i=1; AJvYcCXggspkxbVjIFQh7stbFvNUweUyCRkUk1Usx7ZGMl7z/JUhaLPzb5bFLy4gvi2zoAB8VbTKVhBcwQ==@kvack.org X-Gm-Message-State: AOJu0YwRHgCt32nrz+hyCPYPjPrmav+i35oalVgTlZby0hBTYeoCiMkf T5U0NdVj7XjfMcMt16anRHbpfPAHm2fHJRIvCs8VguTAHP+TxE2chP2jpr7tJTPuEYnVX+mcqFP mMg== X-Google-Smtp-Source: AGHT+IGoxbQEHrRgpcds0LXGn7Wsw+mSSdilT5DRw00yKSF5iCDYNJNuQzJz7chpHTNiW9yQ8A9B90jlKU8= X-Received: from pgcu129.prod.google.com ([2002:a63:7987:0:b0:ad5:53f5:6975]) (user=surenb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:112:b0:1ee:7b6c:e2f4 with SMTP id adf61e73a8af0-1ee7b6ce592mr3099897637.26.1739486821322; Thu, 13 Feb 2025 14:47:01 -0800 (PST) Date: Thu, 13 Feb 2025 14:46:38 -0800 In-Reply-To: <20250213224655.1680278-1-surenb@google.com> Mime-Version: 1.0 References: <20250213224655.1680278-1-surenb@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250213224655.1680278-2-surenb@google.com> Subject: [PATCH v10 01/18] mm: introduce vma_start_read_locked{_nested} helpers From: Suren Baghdasaryan To: akpm@linux-foundation.org Cc: peterz@infradead.org, willy@infradead.org, liam.howlett@oracle.com, lorenzo.stoakes@oracle.com, david.laight.linux@gmail.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mjguzik@gmail.com, oliver.sang@intel.com, mgorman@techsingularity.net, david@redhat.com, peterx@redhat.com, oleg@redhat.com, dave@stgolabs.net, paulmck@kernel.org, brauner@kernel.org, dhowells@redhat.com, hdanton@sina.com, hughd@google.com, lokeshgidra@google.com, minchan@google.com, jannh@google.com, shakeel.butt@linux.dev, souravpanda@google.com, pasha.tatashin@soleen.com, klarasmodin@gmail.com, richard.weiyang@gmail.com, corbet@lwn.net, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@android.com, surenb@google.com, "Liam R. Howlett" Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Queue-Id: 822B512000B X-Rspamd-Server: rspam07 X-Stat-Signature: bi4ibrxyhtbarnbbtuzdo65tygamn8ch X-HE-Tag: 1739486822-368749 X-HE-Meta: U2FsdGVkX1880YzgY+JaI/fTOUagqqHJNJjCPqZHje/CNIuq/z15zXr3nEJXtmkTGMSHK1jEtdkpD2Uj6iQ0eVXZzqXBYkWn0KDJs1kvBXYWu5qvebNYlq5Z7yD8NfJySXud7YVZLxjCQ/0YA+haOpwbDyzhFoCp4bDhwxcze2U/X80v8x1t3xyuz4AZTWwAVm7tpmC60ieqv+v68T76ai1xpoj1xtlJghpgcHWiwnw3Y5VIYDdXJ3p2do9JgZR62t4hhzsK2Ou0NizMrztLu+vk4k89PgAQ7C/ukyhz46lEl43bNa+mqoX459q4Tq9UCqEw/NMVv3ZsXCsSfN1Td5e7+b8yyIrlRF2BpIdB/qVrI1WZYmqNLT3sVPko78agIgfgb/rCkQ4LiOw8twr+NRp8rTSJtkXGTOjX5LHoYoiK+/kU/o0XxnGvHVfBMd8IGQeAZouWDJ8c06iwTCEIyCP35RiGblNKpvTV4+Qi5yc7uAi0JNfm8VrAGk2CGOViOeI2lrwo4cE1LsRwAAuVFItnwq1YAmMW2vahbzmVUpY2wjGjKDsb7xbSRCiyN/Q9TYtRm1DNWoLIkhtrqpTO0xBVn080Jx10QDUHVdlKCbJVYZP7BOdl0LCXcpey37JFz3nKrxeRn1Vc+ce6WWs8VPlOckqZvkQsK1bvx3yA5E9090tDo20L7+9Q+PZ/s+2DIydqAoulmASU4rAeMfDcVowadDbl5GEX5eOMV9GmUoaQRGZxNa4rPiXMlKL3j3qmFYjMSV9buk2UOdn2DCe17Vr0ZObtlEaho44/suIHFh5UALMIBIMWit4/aEfDp/IgvIwp7iBhyZo+JWwRM7ZSkMJJ9Y7HyBGtg4vIOz5ohEevnXWF9wobtLFsnEs4w2q/c3JbTtbS9QfARCgPv1cSW1bXic4HVecP00v79HBKTi9nJ73syPDlq5ITbsPm6FFBkMG5qrmVU4ssBJpf6mQ f7zc5UwJ n7QRcJ3OHM72Ho/wlBTh48ioq/3Q/UDMGvyH1ocwFgpbwL57xntuNy+59xJv+/pECo6q2DAH+CIGVI+rqOXLNjQteMQP0eo03eTOGU0yIFF4r1qBByI+pj7mVhajBm2dExY1wQ+K1fUJIfBqqYE5BZrhJLsD1etR/LUNKPSpWS2bJlGXbV61M/WQXQYd8IeEXElTxNeqHGjWG0hvUM0hl8oiVXezsJ6Z3c53M9ff+O2v4E6/p9QtvFlg7wgzWzWqsnTydhv95fjDHLSGHZFfl01zc6FL5q9GROoeHv+CUNrZsUVO/9EA81rxS1hQiGfdFwtf5kKGhsDCe5zXko7MXQljGwLGNyO/tF6aw/4KBnF521PCRbw6QCqapBOqm92xria2rf9yXu3bHsIbJh4v4T8q223KgJxNXxZV2JtUkmIKS8Z32zaxRzJ/G8jCX5uIlWcCq15UuwFCvb7KiQL8xDAVU6YAqTRiX/lCX3A6bWkjO4Meozs7PzUpRTuQiWMRyGhueEHfJlA1A5+Vp1Cl37a6fWbvhVI/Fdn/yHw1Pab/ua4LB6KYQxMNvP6QJ+1hpCY+nyreHIwGnDrBdVA09QHu8L9AnnaBd/GkYKAQm0wSidK2G1MMZ1/MOIt5C5P8GAqT2M9Wwg8JmECgUrlfA7ZQyt3UHd8mmouak6BLEfe3E1GJIdqZc5TWAcDr+KuRGSmZDDBZ9bajFP5v5S6AmxQoK41pDgzyY+xF6iyaMUij+0Qo= 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: Introduce helper functions which can be used to read-lock a VMA when holding mmap_lock for read. Replace direct accesses to vma->vm_lock with these new helpers. Signed-off-by: Suren Baghdasaryan Reviewed-by: Lorenzo Stoakes Reviewed-by: Davidlohr Bueso Reviewed-by: Shakeel Butt Reviewed-by: Vlastimil Babka Reviewed-by: Liam R. Howlett --- include/linux/mm.h | 24 ++++++++++++++++++++++++ mm/userfaultfd.c | 22 +++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 838097542939..16b3cd3de29a 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -735,6 +735,30 @@ static inline bool vma_start_read(struct vm_area_struct *vma) return true; } +/* + * Use only while holding mmap read lock which guarantees that locking will not + * fail (nobody can concurrently write-lock the vma). vma_start_read() should + * not be used in such cases because it might fail due to mm_lock_seq overflow. + * This functionality is used to obtain vma read lock and drop the mmap read lock. + */ +static inline void vma_start_read_locked_nested(struct vm_area_struct *vma, int subclass) +{ + mmap_assert_locked(vma->vm_mm); + down_read_nested(&vma->vm_lock->lock, subclass); +} + +/* + * Use only while holding mmap read lock which guarantees that locking will not + * fail (nobody can concurrently write-lock the vma). vma_start_read() should + * not be used in such cases because it might fail due to mm_lock_seq overflow. + * This functionality is used to obtain vma read lock and drop the mmap read lock. + */ +static inline void vma_start_read_locked(struct vm_area_struct *vma) +{ + mmap_assert_locked(vma->vm_mm); + down_read(&vma->vm_lock->lock); +} + static inline void vma_end_read(struct vm_area_struct *vma) { rcu_read_lock(); /* keeps vma alive till the end of up_read */ diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index af3dfc3633db..4527c385935b 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -84,16 +84,8 @@ static struct vm_area_struct *uffd_lock_vma(struct mm_struct *mm, mmap_read_lock(mm); vma = find_vma_and_prepare_anon(mm, address); - if (!IS_ERR(vma)) { - /* - * We cannot use vma_start_read() as it may fail due to - * false locked (see comment in vma_start_read()). We - * can avoid that by directly locking vm_lock under - * mmap_lock, which guarantees that nobody can lock the - * vma for write (vma_start_write()) under us. - */ - down_read(&vma->vm_lock->lock); - } + if (!IS_ERR(vma)) + vma_start_read_locked(vma); mmap_read_unlock(mm); return vma; @@ -1491,14 +1483,10 @@ static int uffd_move_lock(struct mm_struct *mm, mmap_read_lock(mm); err = find_vmas_mm_locked(mm, dst_start, src_start, dst_vmap, src_vmap); if (!err) { - /* - * See comment in uffd_lock_vma() as to why not using - * vma_start_read() here. - */ - down_read(&(*dst_vmap)->vm_lock->lock); + vma_start_read_locked(*dst_vmap); if (*dst_vmap != *src_vmap) - down_read_nested(&(*src_vmap)->vm_lock->lock, - SINGLE_DEPTH_NESTING); + vma_start_read_locked_nested(*src_vmap, + SINGLE_DEPTH_NESTING); } mmap_read_unlock(mm); return err; -- 2.48.1.601.g30ceb7b040-goog