Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1998613ybb; Thu, 26 Mar 2020 19:12:56 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvmKkHqxoARp6NVDqKqsByRWcB/7HStWThSOMUqWexC8aJ+aI6bl7b2sp8/iD+bN9hcVuHZ X-Received: by 2002:a9d:6446:: with SMTP id m6mr8253372otl.122.1585275176113; Thu, 26 Mar 2020 19:12:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585275176; cv=none; d=google.com; s=arc-20160816; b=t4xv5vEUvjxhRn3vOABhgV+iHI+Vc+kwIjNqGvBBwm4EGZgLfTHSEa6a287tcvfbas j441ooAzB1Ka5qhP+i4kz4J/Bb3LhlYP9CcTv/I1g+1cMXM0dxwY1LUKRVplf1boOcoq 0tGhj93+Z4WpX1sJ74Ns8g/ah9BrNDv0Jh57t4rG4awDE9E6RZteVON/hLsPXpEpAL9l 4ACptJX+OJ5bR2Oz2Py0BK8ZO3GpS+kSkdNuG2qGzvZIS7YHoSU+x8CxmtKB2oPLM/Kj McjZ4ISs4EuLgyYqE+psOxXFw88ZSRIx01ZBjMAmyOCv46drNYY3vKTRTgajMdNsc5s0 cEGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=oxDWeBm7sOHjpiApO9NbnvZLKdMBOgGtnj1GVCKM9PM=; b=In4ZmdybqkqpTGJWGAzscSgbS0+8NJRg7CTS9eAN0Wlo8Z2vMmSa8EeJQf3FjAOmqx u8BZB7XssMqFG46Cbu/ung/F8x8Tc0VXuR7epritt4McV5cRhwv01ePt9hM6M3O80U8O 4cIwUvW1Fm/W00m00e4TPwcHN8PqGlqj1gBG6+faKrEpjsm3ELUh0OisFtsbf7+2fRrs RmIn3GjPwy69/0hrhglLQylDCKk5hSAW6w8AGslpwuPJnU3LUzOG8Ozv2RsqKGCVbiKh qKPbTXDLSEgmm/tMNISKNa+E0c0bUHwmNYKcLFOA+UvbAkQ67SWQJS33dF+Mfdmox6SD Qh4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=vff5HijL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si1980123otf.51.2020.03.26.19.12.43; Thu, 26 Mar 2020 19:12:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=vff5HijL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727841AbgC0CLU (ORCPT + 99 others); Thu, 26 Mar 2020 22:11:20 -0400 Received: from mail-pg1-f202.google.com ([209.85.215.202]:47043 "EHLO mail-pg1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727708AbgC0CLT (ORCPT ); Thu, 26 Mar 2020 22:11:19 -0400 Received: by mail-pg1-f202.google.com with SMTP id s18so6631988pgd.13 for ; Thu, 26 Mar 2020 19:11:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=oxDWeBm7sOHjpiApO9NbnvZLKdMBOgGtnj1GVCKM9PM=; b=vff5HijLm3rVFWQg1Q6tILibVb0/t3dACKm0UD0fwBJMKC9ohGcRlug/Kuglwu1XyW 7ahlsaaY+O/P+CM86RifHiol654wkqYYPFnbzAP1Epq+gRAvZ8G6houEHhq9Dd4FOGA8 LFas61baJo5B8lNp/Ro7RhBxKogZEauq+zhA+7v9tTtNPw9GWfaO2z2+5nNh1/GYfhgQ JLUzwzAqNmpmCdF5H1M3vldBSYZkhtjyMvWBzestCGLa956M1XKtKaSRByaM5ib8N0Bg kAJlN3LxNobDGIKEQANlS/2PS9VRCrhMzqttI0gyG3zqH5bD2HO1F03dC4GtKGIYb3f4 pfcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=oxDWeBm7sOHjpiApO9NbnvZLKdMBOgGtnj1GVCKM9PM=; b=QF8Cy6vcFVTbgVEvG8P0RHitLTXlEavQ0ixF0hBtRQbRndiXd1IbZpBimQQCR6k+K9 OLL1gSaI24S2sg00wBA/O0ZOLYtI0AzasldMWiw584xoc1KKSmbZjokq4XEoj8ejz5zm 4K/FxMMVPXnlhjgtYBySZVyoNSCNhR0//NLKGf34QQ8C2gMOJKYdlyRW6Bsv/G5coBhB /0SBwvLsgVhmEcwHUC544uNBcNXZu63wcGEkqpFuimXaLuaqNnFuNwGE+YeAOjol+gFY q27mv3CulgY9/Et+C7CzS16s7qT3Hn1VbsYSsqz/cXbhogr87NK7U3CcUGzhQyJgGyuf 6odQ== X-Gm-Message-State: ANhLgQ17RHdK2V5ZZIpZynixETXGuTZm2sYK1/5NGaMAfjrcKj2Fesm7 W5DXkye8Q1a6cZFL2x03HZyDCY/OI5I= X-Received: by 2002:a17:90a:d78b:: with SMTP id z11mr2409659pju.34.1585275076325; Thu, 26 Mar 2020 19:11:16 -0700 (PDT) Date: Thu, 26 Mar 2020 19:10:54 -0700 In-Reply-To: <20200327021058.221911-1-walken@google.com> Message-Id: <20200327021058.221911-7-walken@google.com> Mime-Version: 1.0 References: <20200327021058.221911-1-walken@google.com> X-Mailer: git-send-email 2.26.0.rc2.310.g2932bb562d-goog Subject: [PATCH v2 06/10] mmap locking API: convert nested write lock sites From: Michel Lespinasse To: Andrew Morton , linux-mm Cc: LKML , Peter Zijlstra , Laurent Dufour , Vlastimil Babka , Matthew Wilcox , Liam Howlett , Jerome Glisse , Davidlohr Bueso , David Rientjes , Hugh Dickins , Ying Han , Jason Gunthorpe , Markus Elfring , Michel Lespinasse Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add API for nested write locks and convert the few call sites doing that. Signed-off-by: Michel Lespinasse --- arch/um/include/asm/mmu_context.h | 5 +++-- include/linux/mmap_lock.h | 11 +++++++++++ kernel/fork.c | 4 ++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/arch/um/include/asm/mmu_context.h b/arch/um/include/asm/mmu_context.h index 62262c5c7785..cc15173f7518 100644 --- a/arch/um/include/asm/mmu_context.h +++ b/arch/um/include/asm/mmu_context.h @@ -8,6 +8,7 @@ #include #include +#include #include @@ -47,9 +48,9 @@ static inline void activate_mm(struct mm_struct *old, struct mm_struct *new) * when the new ->mm is used for the first time. */ __switch_mm(&new->context.id); - down_write_nested(&new->mmap_sem, 1); + mmap_write_lock_nested(new, 1); uml_setup_stubs(new); - mmap_write_unlock(new); + mmap_write_unlock_nested(new); } static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, diff --git a/include/linux/mmap_lock.h b/include/linux/mmap_lock.h index cffd25afe92b..40a972a26857 100644 --- a/include/linux/mmap_lock.h +++ b/include/linux/mmap_lock.h @@ -11,6 +11,11 @@ static inline void mmap_write_lock(struct mm_struct *mm) down_write(&mm->mmap_sem); } +static inline void mmap_write_lock_nested(struct mm_struct *mm, int subclass) +{ + down_write_nested(&mm->mmap_sem, subclass); +} + static inline int mmap_write_lock_killable(struct mm_struct *mm) { return down_write_killable(&mm->mmap_sem); @@ -26,6 +31,12 @@ static inline void mmap_write_unlock(struct mm_struct *mm) up_write(&mm->mmap_sem); } +/* Pairs with mmap_write_lock_nested() */ +static inline void mmap_write_unlock_nested(struct mm_struct *mm) +{ + up_write(&mm->mmap_sem); +} + static inline void mmap_downgrade_write_lock(struct mm_struct *mm) { downgrade_write(&mm->mmap_sem); diff --git a/kernel/fork.c b/kernel/fork.c index c321910d46e8..3460308b2213 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -497,7 +497,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm, /* * Not linked in yet - no deadlock potential: */ - down_write_nested(&mm->mmap_sem, SINGLE_DEPTH_NESTING); + mmap_write_lock_nested(mm, SINGLE_DEPTH_NESTING); /* No ordering required: file already has been exposed. */ RCU_INIT_POINTER(mm->exe_file, get_mm_exe_file(oldmm)); @@ -612,7 +612,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm, /* a new mm has just been created */ retval = arch_dup_mmap(oldmm, mm); out: - mmap_write_unlock(mm); + mmap_write_unlock_nested(mm); flush_tlb_mm(oldmm); mmap_write_unlock(oldmm); dup_userfaultfd_complete(&uf); -- 2.26.0.rc2.310.g2932bb562d-goog