Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp49473ybb; Fri, 27 Mar 2020 15:52:13 -0700 (PDT) X-Google-Smtp-Source: ADFU+vueoxQSa+uibRhhDx1P1nFKZxc9kRzUl/NX+tg9mrG8nuhbTtD0HWq7BClwaaTLK4ssiUxn X-Received: by 2002:a05:6830:1bef:: with SMTP id k15mr765113otb.372.1585349532739; Fri, 27 Mar 2020 15:52:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585349532; cv=none; d=google.com; s=arc-20160816; b=AfrrjgVMvKyudqPQktaSTi84mKWFu97D+z/FUXvvBjgDcLMH/ar94Kzjtc7nHkZpp4 HeDcoGrYK/Bds1nkXhWL+ZFINA9ZBy4UqsRIoYza7Of72ICukS/vg9J97N296O9rF8jb ++s84FnOSlR0av7tF9qNNeOMBdKYXtvW7YA+ljuYE6DlIb45fYD8o87Hk+blD5Hb+PFS qFGfdlmKRkIRr74nHOrfqAtXm0C0tkKzn65Jd/tli+ZsbxINJpIOpr7J/TBGbYl8QCVs 0LWL7D50fVlascfn79cBNZhSigQUMm9swwstqhtkz1ngKAzfUzeigd0aerA4vuSmpFsK tCCQ== 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=9JjmHpcSetUzd2DQK65fziZHzZsJKOqreOscrjvhn1w=; b=A3mqaqczyEqcJonTQzeNAWSEt8eS5KPIH5TfuxOkzWf8E5nr+zw4expw8QZsWzC+Iy fWdxOy+2K+wzpCHj84qL19Pl+EISAmzQnedRceLNgmmJ+bgbCVnOK8mvClWkI+pgUMZk PDS8pb6evyzT0baSwoNUFCFZbIFtfuoMi0i3Vx2r3rT/5jei8AnrHdk0K9FmVXk1Xiz/ a84V+gwX3DeGUAt9oYf3BA/PmnW3UPBye3D9MnNWMp9vlEwtGBEAalXMdI5BAsO6JZoH iE9mWd5KgT8A0he0TBY9fH5gC98cVT0ayyWstqGpVkg3lE03YCB0FHGmj999PihhCuYy s/tw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mOxcA4kt; 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 q6si3093358otg.84.2020.03.27.15.52.00; Fri, 27 Mar 2020 15:52:12 -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=mOxcA4kt; 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 S1727829AbgC0WvZ (ORCPT + 99 others); Fri, 27 Mar 2020 18:51:25 -0400 Received: from mail-pg1-f201.google.com ([209.85.215.201]:37851 "EHLO mail-pg1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727718AbgC0WvU (ORCPT ); Fri, 27 Mar 2020 18:51:20 -0400 Received: by mail-pg1-f201.google.com with SMTP id q15so9150464pgb.4 for ; Fri, 27 Mar 2020 15:51:20 -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=9JjmHpcSetUzd2DQK65fziZHzZsJKOqreOscrjvhn1w=; b=mOxcA4ktC5UqT4y7L4l/BUK52XTyHPa9goELov+T+H7q5BNgQv4ayBvYB3qZIq9JD5 BkrHzzRy/mikJbiyQehvSUDR14j4lc/SbRKPhL9SAWz1X46altDUabXYu7JBewzLNhH7 pS9hADkzlEnvPIHN/WaCGYkx5egXD8vAVXJLDFGHDZwQO3mW7QarQNLDLYr/HPIplrzN AqeNYlxnIIHjDB0mfNordUwzkzCuYd8y9bB4YaOqpj/GGG625fPja9UFrVPih7fWRV6n fVQD0AsnlmIaD6dXFcUaWdvhs9nnb6+egsYg2TytI/wJXBHhtU03HIm7koHhFeJsmG42 552w== 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=9JjmHpcSetUzd2DQK65fziZHzZsJKOqreOscrjvhn1w=; b=LmrtC0/jen61WsQkHRKPH6+MT05dlx53Ya7xdJ1Ge4kJP0o7VIP7CCcpuvYoNxrV1l nmujkD4/PGlRzmvd2HXMMnGF/+grdUull6uB/CZ6ugiG+n9bx0v3EIb9yrKvwBLsbR6i E3ll0qkCsAZK0h/7yhARPQunGr2hh9y7oIth4vL108uQBfl8WlADipN6lMdd3wvT+9Ml etoRHDmg+nvkt8dYe/gnFly3F9KsFXkvcHCcdgTDDB3LqWjtC4mJVws/Yne3Kqc96kv9 HDBVWvAoY0wmFwLRCPcnnkKMsTChxZbjiuiJ461dHz01FsMpZl9Pd31+wN+2VZZvBcib cLgQ== X-Gm-Message-State: ANhLgQ3XrP8uuyQkaTdAObEM1MF+6IfJmMm6uhAEq7d+Z2SVUHl20erX 75NjfGu8BqhC2sFJjuS/84ETONqY4jI= X-Received: by 2002:a63:f243:: with SMTP id d3mr1605790pgk.254.1585349479677; Fri, 27 Mar 2020 15:51:19 -0700 (PDT) Date: Fri, 27 Mar 2020 15:50:58 -0700 In-Reply-To: <20200327225102.25061-1-walken@google.com> Message-Id: <20200327225102.25061-7-walken@google.com> Mime-Version: 1.0 References: <20200327225102.25061-1-walken@google.com> X-Mailer: git-send-email 2.26.0.rc2.310.g2932bb562d-goog Subject: [PATCH v3 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 8b5a3cd56118..36fb758401d6 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