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 C163DC46467 for ; Mon, 16 Jan 2023 11:14:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5BA6E6B0072; Mon, 16 Jan 2023 06:14:59 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5432F6B0073; Mon, 16 Jan 2023 06:14:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3BD5E6B0074; Mon, 16 Jan 2023 06:14:59 -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 2C4EB6B0072 for ; Mon, 16 Jan 2023 06:14:59 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 073D11A08D2 for ; Mon, 16 Jan 2023 11:14:59 +0000 (UTC) X-FDA: 80360405118.25.C36B34B Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf26.hostedemail.com (Postfix) with ESMTP id 66F76140013 for ; Mon, 16 Jan 2023 11:14:57 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=IKaS1mls; spf=pass (imf26.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673867697; 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=H/j+1WOB2+poIU0zjjNXAinFoRjK1wRjx3d+XHMefVA=; b=ILoyonmpNdTFxT9VPfZ8bGY4alaC23F+eTVPTWU38PyTMfSSukdsVJzUSB3FOwJa/T9AE+ 2zlzFFA0yzH9g4YvGXFdI+oLeZgoQzXhJRXeQsLt1ia00O3QM3FpMmivE+ci3/2TlLyIHW MEzuBYPMeIe9dzsbOVPaUhdk47lPRt4= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=IKaS1mls; spf=pass (imf26.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673867697; a=rsa-sha256; cv=none; b=Ui2QDOOnfaPkh5So8J0rNKXHvNfKNc+x8eUFfhfcG7/HuWhSMRBYZVK9/2O/bmexQc7Ar6 CpOI62taTSdtW0fkGMtJNsUahbfjNSbhiZh4wRfriTn/HMBXOLCfqm0nQFpMCJ2T6WOgcQ 0qpRKk6GzepKOeHuuiyUXGbYFEkOOY8= Received: by mail-pl1-f173.google.com with SMTP id jl4so29995877plb.8 for ; Mon, 16 Jan 2023 03:14:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=H/j+1WOB2+poIU0zjjNXAinFoRjK1wRjx3d+XHMefVA=; b=IKaS1mlsXdKP2qLzqb0Dyj556UOX3zeMPhPIirCQcTt3qQS2nyTrw1H+PTDeBL8zuV HM5hqzwdA1j2S+Owv380uXh4elme5UhoOwMxL5rwB6SEfOxqFisy3kf5PXKswLa2DQwZ ZbSg85c+dciT9fX+W0S917eX6PiPq8JsRiD7hiEgNGE0uDyd/QyqjwINAVDHmul8StHU g7sLEfykA1+gfNGZH3mWj1DPNJa/IpRkv5amvYAt97kyPizVZeEvRvSNKrRlkvJJAMDV n1yK9QwW5Xy/Z8sceRkhjoRr36n6xdiEOnqDkWDzss1yFAf2tXJokS2p8uBJx8DvUK4b 8mUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=H/j+1WOB2+poIU0zjjNXAinFoRjK1wRjx3d+XHMefVA=; b=ZEbk0fyiVCtqiA/M5AaszADDMiFPvWdZb3WFZEvAeK6W9T82XPW93ZrAZNGZM96S+j kULtoD7Co5dsPNq4h8EjLbF4rJpanWszniXu98MSn27DdyTVIuaSIsA4U11CY5+Aqjom SHKwPO387JtvFKzOMCV0Gv/KxeiuV0sez/MXwyiuTUHus6Ld8Njzov0SzbB+rJQtP8Fh 4NhFlyXXCij3+izr6O11xpNkiD3QTmLQ0F9CoAYTYN9ztFL3Uus7hNX1TIadjP/t9K5T qsy7LLRPH0QlPD3Z3vKSY9fw0JuPEUPIqJoEGkQ0k8V7qjqcVVAz4K+LG91Dxq/oGEsy Kaaw== X-Gm-Message-State: AFqh2kos6QRw0+Iw7xN6xL0Ft4rmnFWvEJN6hiQ2M582E6t6Ps+rL0nY cNAY4rkZi91tMFqtbxatlRY= X-Google-Smtp-Source: AMrXdXuQRd6wOjQtljWK07qYLraoNulCoayDZNQpKT3xAcTulISKZqIOzMvtWPVA3/M2jPRTkeVMbA== X-Received: by 2002:a05:6a20:5489:b0:b0:b870:54e1 with SMTP id i9-20020a056a20548900b000b0b87054e1mr140691094pzk.12.1673867695716; Mon, 16 Jan 2023 03:14:55 -0800 (PST) Received: from localhost ([2400:8902::f03c:93ff:fe27:642a]) by smtp.gmail.com with ESMTPSA id 3-20020a621503000000b00581c741f95csm16176892pfv.46.2023.01.16.03.14.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 03:14:54 -0800 (PST) Date: Mon, 16 Jan 2023 11:14:38 +0000 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Suren Baghdasaryan Cc: akpm@linux-foundation.org, michel@lespinasse.org, jglisse@google.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mgorman@techsingularity.net, dave@stgolabs.net, willy@infradead.org, liam.howlett@oracle.com, peterz@infradead.org, ldufour@linux.ibm.com, laurent.dufour@fr.ibm.com, paulmck@kernel.org, luto@kernel.org, songliubraving@fb.com, peterx@redhat.com, david@redhat.com, dhowells@redhat.com, hughd@google.com, bigeasy@linutronix.de, kent.overstreet@linux.dev, punit.agrawal@bytedance.com, lstoakes@gmail.com, peterjung1337@gmail.com, rientjes@google.com, axelrasmussen@google.com, joelaf@google.com, minchan@google.com, jannh@google.com, shakeelb@google.com, tatashin@google.com, edumazet@google.com, gthelen@google.com, gurua@google.com, arjunroy@google.com, soheil@google.com, hughlynch@google.com, leewalsh@google.com, posk@google.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, x86@kernel.org, linux-kernel@vger.kernel.org, kernel-team@android.com Subject: Re: [PATCH 41/41] mm: replace rw_semaphore with atomic_t in vma_lock Message-ID: References: <20230109205336.3665937-1-surenb@google.com> <20230109205336.3665937-42-surenb@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230109205336.3665937-42-surenb@google.com> X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 66F76140013 X-Rspam-User: X-Stat-Signature: hbwjszpcaitj7yqfbnp3o4u488ji5h6m X-HE-Tag: 1673867697-765216 X-HE-Meta: U2FsdGVkX1++pw1EaYGs2mbQbMb5HLb8gPYVi+FYj+JxseThZ1lfder7vr8D9sizfAMmMgtBKdWeBS8EAMvoWiYAYLMBzI35svBcwHC3gysc5xcwTjTuSh/XZCcCa3Xwt2fMCLOrSaLRO6ru4J/PRPSQysyvU9qSoxTBOwLtgsLYo+kC5+HvJw00Jj9IIRFc0mvE8OIyuqpFTvbIlutddqBH/eULLQAobLwtl+rDILY0Gt7XuaTB6jLM+2grHMxlmFzo22qEy1KfE6P/pWJ80ezkOjzfeFY16Fahm/zmMcItE+Re1IjhzZX4cI1XI45vtDE27mZ98SpTH0I6otDWf6ahUfW9973WOpgHqomaPVxzP/kBl+aTdvD6hlo2XlaqeoRydLFWD7vLVoJyuWWgUxNcI/l7WUZd4CxPfSLKm2q+ojZ2tv7PjdohgRgvlFf91Gjl6RD8OnyP7IEaMxbJQaXOExIjkgCaWgE/ng7HALCgecOpMjVlMRncmw9WMnO8Vv+DwMclwNBjn56ORD9ziED+hiZZ0AFmRPGtfZsT1dmrfZZuYN5NpNu1Sh4+Hg3X3TO+fy1JKanbZWyfmDd71Nl06As9nkbBr88ggqsbdz/Tc0FKqsQOYRbwgQsladg43aIDcCCxvlE+/XP/DIQEb877vUh/DqJOJnrzasTHd/Z5Kiek2p8NJSUCZIDQSUb8aUXHYXaVTh06VBoMZ9lqKp7wHJWFkuwRD6Fhz89RTj/kTnPgn/zBYA6es5rUKHsMxbTHTCUyC3KvKVWAMtsRcNQzFtpSvVKv987O5SBaR/MJ8W+AqmRml4K+kMBGZzhkh6be1LAFacop/iKeOSwsfMQgZ3aleiOvW6hkFlhPs77PsjVyCXR7Il+Z+4+Kh8DEjWfF3qLC6VD6ROCFyhkf6QMVzxF3kpy68LDCkw55pBraH2MwpNujNv6B7GdCxgqyFN/TgwOAd7fACKEseJT mvooDRmJ 2nzHnF093eAbXRFUZkKD1K/Dk7slKuWEjGMVbcozGitYnIfxpjMJrmJkBtH2hkkVBh6ca+hWKeaoOIaTvYoGda5muvphYTptFGjrsL9WVtFzl0i6ATS867bP3Jb11Vhs4n9q70LB25KEOUaMjL9XFcvDSs23ZdUUehvW2Mo1OJu3bMYg= 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: On Mon, Jan 09, 2023 at 12:53:36PM -0800, Suren Baghdasaryan wrote: > diff --git a/include/linux/mm.h b/include/linux/mm.h > index d40bf8a5e19e..294dd44b2198 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -627,12 +627,16 @@ static inline void vma_write_lock(struct vm_area_struct *vma) > * mm->mm_lock_seq can't be concurrently modified. > */ > mm_lock_seq = READ_ONCE(vma->vm_mm->mm_lock_seq); > - if (vma->vm_lock_seq == mm_lock_seq) > + if (vma->vm_lock->lock_seq == mm_lock_seq) > return; > > - down_write(&vma->vm_lock->lock); > - vma->vm_lock_seq = mm_lock_seq; > - up_write(&vma->vm_lock->lock); > + if (atomic_cmpxchg(&vma->vm_lock->count, 0, -1)) > + wait_event(vma->vm_mm->vma_writer_wait, > + atomic_cmpxchg(&vma->vm_lock->count, 0, -1) == 0); > + vma->vm_lock->lock_seq = mm_lock_seq; > + /* Write barrier to ensure lock_seq change is visible before count */ > + smp_wmb(); > + atomic_set(&vma->vm_lock->count, 0); > } > > /* > @@ -643,20 +647,28 @@ static inline void vma_write_lock(struct vm_area_struct *vma) > static inline bool vma_read_trylock(struct vm_area_struct *vma) > { > /* Check before locking. A race might cause false locked result. */ > - if (vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq)) > + if (vma->vm_lock->lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq)) > return false; > > - if (unlikely(down_read_trylock(&vma->vm_lock->lock) == 0)) > + if (unlikely(!atomic_inc_unless_negative(&vma->vm_lock->count))) > return false; > > + /* If atomic_t overflows, restore and fail to lock. */ > + if (unlikely(atomic_read(&vma->vm_lock->count) < 0)) { > + if (atomic_dec_and_test(&vma->vm_lock->count)) > + wake_up(&vma->vm_mm->vma_writer_wait); > + return false; > + } > + > /* > * Overflow might produce false locked result. > * False unlocked result is impossible because we modify and check > * vma->vm_lock_seq under vma->vm_lock protection and mm->mm_lock_seq > * modification invalidates all existing locks. > */ > - if (unlikely(vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq))) { > - up_read(&vma->vm_lock->lock); > + if (unlikely(vma->vm_lock->lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq))) { > + if (atomic_dec_and_test(&vma->vm_lock->count)) > + wake_up(&vma->vm_mm->vma_writer_wait); > return false; > } With this change readers can cause writers to starve. What about checking waitqueue_active() before or after increasing vma->vm_lock->count? -- Thanks, Hyeonggon