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 6F591D42B9B for ; Tue, 12 Nov 2024 15:19:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 00DBA6B00A1; Tue, 12 Nov 2024 10:19:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EF4666B00A2; Tue, 12 Nov 2024 10:19:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D6DCB6B00B5; Tue, 12 Nov 2024 10:19:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id B00D56B00A1 for ; Tue, 12 Nov 2024 10:19:01 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 3FB80AB661 for ; Tue, 12 Nov 2024 15:19:01 +0000 (UTC) X-FDA: 82777799622.23.6BF87AC Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) by imf06.hostedemail.com (Postfix) with ESMTP id A0A0F18000B for ; Tue, 12 Nov 2024 15:18:29 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=V1Jvscpt; spf=pass (imf06.hostedemail.com: domain of surenb@google.com designates 209.85.160.180 as permitted sender) smtp.mailfrom=surenb@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=1731424651; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7s0gz8SBe6kZJRdrCBkVAQ16SvSS5JRcd2TF6qDYlEM=; b=noBkB+ygdJkSsLpGmRNJL8axWTFZuVZQpQNU2cSPQkpmx3H8vklvgorTNylXGftmoZUVFO LeaFylhyCWMtkiYwOACFHW/wLOJ8pTRQ7snZ9HbCrZ/BZkB4HcSD4jxbDe7JoMKSOmEou3 H7RXhxtLPOb3/UcIo9lLyakXgS5JnrU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731424651; a=rsa-sha256; cv=none; b=h+hX7RoUvd0tPg+yBx9hFHkrdRZ9SA+AcaQDKL7c0oFVTh78/uvgxP5oY/IKTOOqVqKRPA EgbphSzs3aiLe+RHm2QWw15GqS982zD4xY7Z3ZoT00tJITqZk1QENMdTwbCA1sf+9yylbW WzJIYtuB6suGpr7ksI2nLhNAfMyGaZE= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=V1Jvscpt; spf=pass (imf06.hostedemail.com: domain of surenb@google.com designates 209.85.160.180 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-qt1-f180.google.com with SMTP id d75a77b69052e-460969c49f2so302411cf.0 for ; Tue, 12 Nov 2024 07:18:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1731424738; x=1732029538; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=7s0gz8SBe6kZJRdrCBkVAQ16SvSS5JRcd2TF6qDYlEM=; b=V1JvscptsSJ9e5SueyRu6Ss4+ngzmmN+LnRoIu6ZHJNCrSpUTBqp9IgG6Wx7Rh6l6o CGyy8AkPqgh9iFKdbIezFqzTqp+rsKG4Y+RKL63uTTrwSDjnTLGVH6HG43f4aq2fusnl VgY5ravXxJyH25FbO/G5S8Dur3ARZn2Rc8HwHv8s0qEtApW73ABIXkvcdb76x4Oh+m76 2PGZt1XvGN6feyy/0j/e1txixoKcNqC/hcx4DnTwaHz3kd/fG5pwRrWq3j6/LwT017Af tWZFFtfwqkTNyo18Lmdsg4QKxCmTV1AQdfW4/CTPkUMBN46yTHzvwWWISliTiTO0Fex/ gH/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731424738; x=1732029538; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7s0gz8SBe6kZJRdrCBkVAQ16SvSS5JRcd2TF6qDYlEM=; b=IEO9GyXKNZ8ZhA5sW3a3TwlbfdIRlwtBX8Pmc8BVZVBlYMmJb8cUZKaQWR9MXRFsFs Lh8y8WRFdUxcq2oLsqpDyaeHP+NM3UJ5Uz8mMeSxaVjxgMs6Ep/YKsagyQGb+VePP2fU 4fkV5dpqWmR3QUPQ3xjVxusxPSj+VXuh+S/K3zPnfdyJMOTAol1Ug2nLuSr5F5yQtRgd L4exErXJAD+apmrDHRlJFLDHVEP/euf9s++/zFIng+UDtbSnAcg5uTUL+wxba8JiO0/V F6fLyU8+w3CEqc4emE+Ww38YiyhdcA8ZBjbcPO0QBcj6nhVE3jMRDocpB+tMfFo24bSw L+rA== X-Forwarded-Encrypted: i=1; AJvYcCXAXBDqhq+f4XwxeE/aB+yed9ZkPGFJC68lZXX3MgcnfPUxDb2AYAHnZkxnVXXgkHaZrzoylC2TRQ==@kvack.org X-Gm-Message-State: AOJu0YywZFGrWLsarh5PynLKxWCLXcZuXCk3DvTBm1Ne/jIprL+I9urq Ndpk5gshF5176PxEj6v6jgr9lUdDGoqapLGJhQ2vrYvyxIr+fvv+d4/5zrLa8hcEvc19ZchwAvt YNjFN4GL14QqcLpivtgtUKWwnPi9KzRCkbYT8 X-Gm-Gg: ASbGncvXkTMSPn9UdkRfhc4KCuPh/hpi8Y4zffRi0Jo1feQqRO/FIVNRjJ9yIx5gKtV sUVwIBMoDqpcbqd8p3BWmRm0NSKTC65/wzZSFzqhXQ9z2VjBuBBBHnqfBUBHcWw== X-Google-Smtp-Source: AGHT+IG4GnpKek/1UR60rqfCuL5z9RWIUc0qGAHDcDXKe7UZZmylKOJWdccpbWEWgkX8Z24/AHOJlY7nOMsllu5paDE= X-Received: by 2002:a05:622a:5787:b0:45f:9b3:c7d4 with SMTP id d75a77b69052e-4633ef60953mr3840701cf.6.1731424738095; Tue, 12 Nov 2024 07:18:58 -0800 (PST) MIME-Version: 1.0 References: <20241111205506.3404479-1-surenb@google.com> <20241111205506.3404479-4-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Tue, 12 Nov 2024 07:18:45 -0800 Message-ID: Subject: Re: [PATCH 3/4] mm: replace rw_semaphore with atomic_t in vma_lock To: Matthew Wilcox 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam10 X-Stat-Signature: mh779s8zx81fb7cspszi6b8wnzzqnxwq X-Rspamd-Queue-Id: A0A0F18000B X-Rspam-User: X-HE-Tag: 1731424709-952936 X-HE-Meta: U2FsdGVkX18LdZCFdKverYjJHvyR510zThMte/C30QOOzSAGegHin8ZrcjEMGfH35vY7eK/waM2BSjvhGXB4PQbnPdQwlsNgmjFcKy2jGigPK9iswxVE+SO8S+z0RvpzLuQCyaJsVJbqZBTA2CYO8Jp+OaniZCuQvqtjFLx/0Rnx5uZczOPZDn9qN9s4/s7WoXdEo/Y4+2OP30MgLUJCn6z0/cVSD2+lhPGJ1j97SwSbrPWFm/P17aObCBc/oeDkLkul66kV+i0sAW4LJGODTSepijwiP8Kg121ReIVd23On0VsPupJgix+HeJh5kco8MRAxO7CALq8U2LC89egXTR0MGg3Kdcb4CrVU06jYLrOERWjZYDhuRHch1W6hZas8cAkRn2gkSkTucOYLX/oh3k1NT/aVvfz10Ny/iqfKg88ZnkQOfbCYa0nNwU7ou9UKh81Kfc0CtIfgwq/O/Aq2ESUGPkIBL3ZC5+7/Dnw6M0qt3MWHbsTd+wYP6y5jxZDBmIHmxHcWUy6KpQav96XBW6Bn1KB7WPOnOCw/nMRU0wUgzIqECtETI0m6OIIOygBMW4I4nQQ5diPl7njkcbjOq87/lTknQq0EtuCrRs35kdvuufTMm3VnERxvbava9WxT9x0CKukAZ5Lh+ZZ0FKDBpLEE7NJ86FO0eVFaHTCBWKqu05D9YXCtahr/5vdNN2Gvi2wjgsTzLAezQub7n7iEBoGmD+luUBgHfmXBXbBw4i4c83pOEySjpQbeyXU+mqYxnp7moR3ASwgttUIxinv9mcTjj/jXlqXFVGwrwnwhh2r4E0S2WY2lgfW/59J/PEzlXuKwF8eQuKSMk22OtweH7Hiqoi5YNv9YY+mOrW7j5ZNC082dYGRo94QkiQX4Rj0b+0HFtPBSP5HEB5MsUgJaF3vsLcr987r1P9eLEu/DoRDT0R9mc7IZZX9LZwiO/61A+XKS6PksGVlNzQlriS7 lKKz7BJO KW8Dgc5Dbj7RgWSTS3vf40MBFjqfyIVv5Me+GlPcfnc+GEleEy2uLx8xVjYya4fJxaRk3toS4IbpAKOB3GOgFc03U6VgzKFhlBHcXwF/l5a5/CebGET8diKxjJdQZ9NtZ2Tg0vbNhIagepWWOlUnXSbCmOCx90ifQtwPjiQEfJwLJ2TOa3A57CR9wTkkpbmQGvxaO3YaBDXAOiGEhsR6lncyZ+sT8110TDzl46hpidmLbuQ4Oew34oAFUo7AaAFNMow7XJRUKxNfdB+oMS+1ZQHqsKbsEdVEwJoPAzM+1Aq3dtMM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, 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 8:58=E2=80=AFPM Matthew Wilcox wrote: > > 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 write= r > > 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? Yes, this is neat! You are using the fact that write-locked =3D=3D no readers to eliminate unnecessary state. I'll give that a try. Thanks! >