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 ECAD2D41D53 for ; Tue, 12 Nov 2024 04:58:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E86BF6B00E7; Mon, 11 Nov 2024 23:58:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E108F6B00E8; Mon, 11 Nov 2024 23:58:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C88B06B00E9; Mon, 11 Nov 2024 23:58:36 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id A725A6B00E7 for ; Mon, 11 Nov 2024 23:58:36 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 08750AD751 for ; Tue, 12 Nov 2024 04:58:36 +0000 (UTC) X-FDA: 82776237012.28.FCC6B3B Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf05.hostedemail.com (Postfix) with ESMTP id AE5E0100003 for ; Tue, 12 Nov 2024 04:57:15 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=C7KO0ZfC; dmarc=none; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731387427; 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=kXv1wKhPRyR2M0MWYjkijB14RxzA9Z0quwJXGJzEUa0=; b=8Tn22bInSBVZofOVQ2WBy0YsiZNmz8BmY/1E/4hWyt8GMVZhq1nm8/Jyu0wyD06vm8a59o 0oTFcDC+fOMZSBNv8ctUbnKXQGzs1aSV3wuz2Dwgjp9ZYstbV//YpOnpR0pTvh32UnD3iP x/szaFdWxS2poUAdstJ5cLoVxhpyOnE= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=C7KO0ZfC; dmarc=none; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731387427; a=rsa-sha256; cv=none; b=aspZj/bJ8eRM+5YjlvASSxYwiQ9xUCwNAfyS7qesSzGIwqG7sga6reAcFEToAV5O+Xe2y1 n2dHI5wvAl/bIU4RyrLXNm2gSpU0Hl21HE7U2kG6NYaJJVJcXUHfAzuI2nzm/lhCThjVco ypBKykDzhSDBdf6uu0i9FHUGBDvPzAk= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=kXv1wKhPRyR2M0MWYjkijB14RxzA9Z0quwJXGJzEUa0=; b=C7KO0ZfChbwhN+d0USEvOx+vSV fTG0TgXml+ZpjSkyIXpLGLnpfir7j+3QfvCzaul5kXHRDLv3NBubh4JrEKJV5ZRF6vKK3VVotmBww qHfqWGKeEQZLDvpHarOMXbGxVUl1yT7aMbf3WKTOymBlL4sIw++3L8bRriUKZOc0gaOo/1OY3qPm4 GgA2QCsT0kn0znpY8f9MBRNA2v3TKAg59xbHkaz+3dUdtgCG4iwnIpkdZiyzj66LpT+AGy+Tse247 tqpgQniABaQbNeARe+EEB22J1/HEizNSEsMYavL877imTLc1yL711oihmH7Nj8ypkLPbJpzm6LWPw mvMms76Q==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tAiyj-0000000Dr6c-1tTt; Tue, 12 Nov 2024 04:58:13 +0000 Date: Tue, 12 Nov 2024 04:58:13 +0000 From: Matthew Wilcox To: Suren Baghdasaryan Cc: akpm@linux-foundation.org, liam.howlett@oracle.com, lorenzo.stoakes@oracle.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, minchan@google.com, jannh@google.com, shakeel.butt@linux.dev, souravpanda@google.com, pasha.tatashin@soleen.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@android.com Subject: Re: [PATCH 3/4] mm: replace rw_semaphore with atomic_t in vma_lock Message-ID: References: <20241111205506.3404479-1-surenb@google.com> <20241111205506.3404479-4-surenb@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241111205506.3404479-4-surenb@google.com> X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: AE5E0100003 X-Stat-Signature: 4efbxm47wpw6fpe68ey1tfd8yu4pr1tk X-HE-Tag: 1731387435-28997 X-HE-Meta: U2FsdGVkX192rkkI61Y+R/TgQIRkgoZIIqw1CnqVl8C6AyLf2F9jEkr4d/BF6FDQkYFYZIl2SfQ67n/bOmiDrn/0YBPd1kHahYmkfdE7lNO8yb0bAp8IubidJNEYCGdlIrOIpRb0XbcvGsGSNjtjWkLbO/ksK+4Y2yjVlVZV0MbbuzTmgHXfuibCXNq4Syg5DrnEL6lc2Hxm+GMRvT7llW88cR3vfcuQzzXg4XvtuS95u6EAxoKSBEMYa2wJxU1t2caYX57Ls50M4bZuHjphSc1jM09+c8YmH6orznQJQLnhvlNHYCr4PZarBmrcz9dAOwat1eRV1pnRUUBJR/BYun1loTrTX+QsY8gRDn46o2ualAZ0xnGfQP0wnad0W1Q+ACsejYHkytw8aWx9XkIavoIddufTFdKlZihGa5KvGEzJOEeLiowZXaXDG6GZ0PZbdSrYajBftm+dDsL4cAuC72bHep76RK2fZG3wpDSP8Oke6WftxSMUxit499ZG3Z8V1d2TEZZM1v7ODlSW2pkPE95J7J8DT2p6KZMAXHMjoZEXvwp8OqOBWXCu0dSwl3SgFeI65XA4NEmgOdDcpGBKMrNfuFEkFH/jA6a74MWMfklK+NyHry0HmQmLxQZp+sD0Vn1T0UjQcokeBY62/G1K3xegBZVtkTHd8XoMhxMHDUoQPVqHeYK9i8vBiOqoIkRVqqeVfIWZmXGRivv+IDZXphAKucyIspcR4RN2Tmrqw3Smw6MrMkQMYdmGldim6uBh2D4vrlb7bdghqel/mYRq4sJSm4hBZT+f2Wc5YBaNC+NbGSWCboa3YugeBQombHvdJqT2f2/widDEPRPzvahwjqiNygEId0S4iq1mU3h6qrQXKVodunj0TvwofmWxcuHuMnvD2NJbr+dCcDQEp+33KJ/pMlfQyWuEK5YuzeRLgWNbb0Az2HM5fTFcPnpTmRnTBCRRMmDhFd1jL0olAVN YVrOCZz3 2Goar1sGj0tBWCSpfj7xEe7aYGgkjF9ejKF1pnv1qUkT8b3o+epAI9JR4JXw7Z5iIBchG3jW5KVldgwKIGJPxHqnk8SXyh1ibXVUhTzLnwpAEht55Z0u89gqmhnBCAy1oo8gA2EJ5yKK9GSw68f61Hsdi1PsmvekRiunGVDhjdH27ZUm2Hf+G0xSzlhjy2JwVYKcni6FY22eVQZV0e3vYUJlyz20MHiHcz2MrdP6xr2dTRL6Z6h9vfvsiKHfcxHgaj8R9aUnh4QZnEoewpd29k3dEdQ== 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: On Mon, Nov 11, 2024 at 12:55:05PM -0800, Suren Baghdasaryan wrote: > When a reader takes read lock, it increments the atomic, unless the > top two bits are set indicating a writer is present. > When writer takes write lock, it sets VMA_LOCK_WR_LOCKED bit if there > are no readers or VMA_LOCK_WR_WAIT bit if readers are holding the lock > and puts itself onto newly introduced mm.vma_writer_wait. Since all > writers take mmap_lock in write mode first, there can be only one writer > at a time. The last reader to release the lock will signal the writer > to wake up. I don't think you need two bits. You can do it this way: 0x8000'0000 - No readers, no writers 0x1-7fff'ffff - Some number of readers 0x0 - Writer held 0x8000'0001-0xffff'ffff - Reader held, writer waiting A prospective writer subtracts 0x8000'0000. If the result is 0, it got the lock, otherwise it sleeps until it is 0. A writer unlocks by adding 0x8000'0000 (not by setting the value to 0x8000'0000). A reader unlocks by adding 1. If the result is 0, it wakes the writer. A prospective reader subtracts 1. If the result is positive, it got the lock, otherwise it does the unlock above (this might be the one which wakes the writer). And ... that's it. See how we use the CPU arithmetic flags to tell us everything we need to know without doing arithmetic separately?