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 928E4C021B2 for ; Tue, 25 Feb 2025 04:28:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A5AE96B007B; Mon, 24 Feb 2025 23:28:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E3766B0082; Mon, 24 Feb 2025 23:28:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8841A280001; Mon, 24 Feb 2025 23:28:17 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 6A8F46B007B for ; Mon, 24 Feb 2025 23:28:17 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 13AE4A187D for ; Tue, 25 Feb 2025 04:28:17 +0000 (UTC) X-FDA: 83157185034.21.9C4631A Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf06.hostedemail.com (Postfix) with ESMTP id 27BF6180006 for ; Tue, 25 Feb 2025 04:28:14 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=YyQkXX2o; spf=pass (imf06.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.178 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740457695; 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=o+X5JfPK4BibaEtL7BQIEz80W1y4GdOj6RNmewuZiBw=; b=59719SS04j99lvYj19VK8h75lO20H1o5YQEshoLhuW8v0+33Vztkj+Vda1pZXzC5prqKkI BLGx93Y565dLfnZ9bsgX1IBtDBTuecHi0GDoCl5pgIae/4vSeSOR4HENF00H6uSPDTQxDV kmWJ/o4MHNOi5BAak7fGs/YXaA16zlg= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=YyQkXX2o; spf=pass (imf06.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.214.178 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740457695; a=rsa-sha256; cv=none; b=QcmBr4qaUtZ2PaDIA99y2j2N6ztW7qWyI8d8JhmMdEC9Ye4S1a8i4zbWV3aPPjz40jV9Ky xICtUKqRL5f7M6gc0Uj0SbQ98OJ95Gzvwo7uWG2L+vY+fiEtwk2nzoNKWTqE7vmTd8YAPm efknNsVhjxNWBcSQT8Pn3a7tdZqRmPk= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-220ca204d04so83496735ad.0 for ; Mon, 24 Feb 2025 20:28:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1740457694; x=1741062494; darn=kvack.org; 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=o+X5JfPK4BibaEtL7BQIEz80W1y4GdOj6RNmewuZiBw=; b=YyQkXX2oT8CbHGOy1OwAbqBdXTbZf+BWuhNa5XSCgr4E2/HE/OvmtEewIFEuNjVL5p wt/4YbGjex/FFVuhwZ6CSzeA+6yzhJ1waeSOZw2z63v7uHwIXoTqAAl9aLvnIeCO9XBC 9/EV/1U18084yyMxvIuLp+s+myZC+a5shnqyY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740457694; x=1741062494; 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=o+X5JfPK4BibaEtL7BQIEz80W1y4GdOj6RNmewuZiBw=; b=dcyrbgyKeFRTfRvNRl7fj5TbBCGjNaFX4kXhnWZm/MZd2U2ZyLUFNTfXgVLUK7p1Dd QxyktmzDdPLrzu4KmGsgY+8yiVyYg8J8yGNrEfue8x3yFpiD6srh5TBpJ0pNdNnUnh0P 4dVpnJZBb8JMTGMWvZIvkbcXpytUBW2m2Zlds/5uabYcJTOknsnvWd1nOdFFD2+gML6D IFek7bbxbE6gDlCHgfNVDiTePhjzaS1eUxF5imdhP4hP6xW8eBI/0yfbyLw4sbu1YSrN ccopzsbgj1lgleTCGg+3EyRFB0ZzWuuPqpqbQQ0Q3MW2GBcxxqz1MSoFWwsiJ09gpa50 Xa/w== X-Forwarded-Encrypted: i=1; AJvYcCWAyruYFE7sgt1FD5LwCJXiMw5rLZO/YKyjwZWaUehd+uxpz8w2Z0Nx97mYRLAGwEfXoXkibdtRag==@kvack.org X-Gm-Message-State: AOJu0YxrVNeNu9duP9LM4O8qpOP63KDXyUH/H4AOSQS5Wk5kPm9Fk2sV RG8I/On3+YYIULXkpEZECDy9zv87dpf5eIIDT2UjrJjStOM70iU4VDPo6EP8AA== X-Gm-Gg: ASbGncuDlgLDRw6JG2LbxKJYdUZ50Y8S5lmyfVrIYY5FWlGhWGT2ligg0K2Efsei+Sb NYjW9Q9qBOQ8eukVLdAQ8Rdbk4IvhAvE+vj77lL4uOnVbO2t0erseQzH1fVLSTuznBTRgbvlTfv aT1Dst9jxmeChW/4sMkxpQr/3447CfwoDHWhLgcMR8ra9thd9Rvwcq/F7Xv8gwB6szntBPpFALa mDyEVOQB1ySe6sUi52zdE7znOOd5N9fRtzhAhCbqYdffYWPncPlb2z3becy89VhTG9b7G1Tn9id U5/ie3Giuw0OosdRp3Sigk6om18o8A== X-Google-Smtp-Source: AGHT+IGN7n10gk0Mg9q+s54cyuTq6rWt1GXB+ExUPwCxugZhPSDMmIlsxSuZcdMmndNCmU7034jDBQ== X-Received: by 2002:a17:90b:1c08:b0:2ee:db8a:2a01 with SMTP id 98e67ed59e1d1-2fce7b04f6amr25577848a91.30.1740457693979; Mon, 24 Feb 2025 20:28:13 -0800 (PST) Received: from google.com ([2401:fa00:8f:203:e27d:842a:e0d1:29c4]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fe6a3992fcsm506183a91.3.2025.02.24.20.28.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 20:28:13 -0800 (PST) Date: Tue, 25 Feb 2025 13:28:07 +0900 From: Sergey Senozhatsky To: Sebastian Andrzej Siewior Cc: Sergey Senozhatsky , Andrew Morton , Yosry Ahmed , Hillf Danton , Kairui Song , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v8 11/17] zsmalloc: make zspage lock preemptible Message-ID: References: <20250221222958.2225035-1-senozhatsky@chromium.org> <20250221222958.2225035-12-senozhatsky@chromium.org> <20250224085943.gChnQpEB@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250224085943.gChnQpEB@linutronix.de> X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 27BF6180006 X-Stat-Signature: g65i45cgwhmng1jnk91fjrardcke7u7o X-HE-Tag: 1740457694-819499 X-HE-Meta: U2FsdGVkX18tqZ21uZ0bovwr0Ya0B5oSP+qz1y0i/hlZ3pmuUifmDzSJiv3eDYXEWqWajr8SnV2wqbcH3N/FQioXo2FkPoSYRELhrBHTTfkrfSudUXdwbyBeNKz4DWHm4gzzziF4wlLPCz69OKy4YUyOmN4yzgl+YwZUD9eEQ5CTduUBc1E4WBCphQOdRqSFRwKMsKLopruIS3kYr09tYWgQjHEpn9EsRHm+fmcO1/zcXL9+6+3MXMT/MQ/BbUDmmakeuJdGRFQo23PLOOu0dvtgj/z2yaM5m+KCiN9yo8iYKpeAOnXd2P+CLVObbsepzjj9lG1xg19w1ZFkhC23bzTtM8V2w4zdkDzbTybRmqG6JW65SIx6tGicrpId7GbaAyzoL43H53pczCftQZqYDiuh8re3qYKDulVJ8LqJeeO+j7dKBmHxW52pQuzg2PhwQJPdorP/KEyH5OFk4nS3Es1bsAtEpoB1un3oV5Ow2nsz5hMn0cSOEjEguEJqyZ9VLQgc5NeITIStiqVwhqcmMhz9QJeEu8+8TbcU6ymNdfIzrNB/pOWYqxTuKQPSaBiKvJYc4adaMm+QjRpQuRXuzupRvCYXO1e12F66Xyzp9PZw049ibhoinpPBZnz+PTVfIby8LeJupJ4gx8dgivHhsflT/vjCSTfXRRrx2kDR4wfdC8mx/+tXBcEpTtSOnygY23ppzMJ0tNQM/KmEGN3uudJKn0b0nycti1ZMMr63KBWZBoKOj2klAUQ5Wb6ghGGmGsTznhAhoKPC9VfXaRQBiarnfEufxuHeds/+LQUOm+/1rVV2BCCpNsAeThDxCC06pVyqKQsWQ7+EkoaY0yf2xaJSKuS/615C4veGetj15PvifiIGf/OA0p8l2kxZQQIrisqYbuNOrSBjLXIzk+tEgafWB3VH8isPpC2k5dPfcOxbL7FrptjEYg4WRD43V/PIGtX1cTRpLe5uPvU09j5 Z875WaHb l/l83u+lglYDokj3qdNfYGAHPbdxAF+4Kpyv69m5TeiP2i6J7qtgXUuSAb1NShqZ/FA5X05mOnMly7vazO/DYzgwXtQ2CEYDvipQyziYY8zC51ztC9UYgMhGwFMUKR86v2nkzXG8UrpZ1yyKK1MDYPT/WeeNKu530SMiIA5+e/4CZtTqVWsoK+692uw4Y6ox+BXNefMtoiN2Ow3IHSEJPV5fTs5B2M9h5dyOaRrfZONT2RhRIR9fHEDGBtH04f5jJA/81k/dPYpm5INyiDXijwcERwV7qWz+CQqX/62yW0gK5ASffpuQLLPzQJj++7nWEDk9rbbL9c8VsZ/51ksILU2vmwWUS67mfKl94qqAvoZw2D8w= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000016, 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 (25/02/24 09:59), Sebastian Andrzej Siewior wrote: > > +/* > > + * The zspage lock can be held from atomic contexts, but it needs to remain > > + * preemptible when held for reading because it remains held outside of those > > + * atomic contexts, otherwise we unnecessarily lose preemptibility. > > + * > > + * To achieve this, the following rules are enforced on readers and writers: > > + * > > + * - Writers are blocked by both writers and readers, while readers are only > > + * blocked by writers (i.e. normal rwlock semantics). > > + * > > + * - Writers are always atomic (to allow readers to spin waiting for them). > > + * > > + * - Writers always use trylock (as the lock may be held be sleeping readers). > > + * > > + * - Readers may spin on the lock (as they can only wait for atomic writers). > > + * > > + * - Readers may sleep while holding the lock (as writes only use trylock). > > + */ > > +static void zspage_read_lock(struct zspage *zspage) > > +{ > > + struct zspage_lock *zsl = &zspage->zsl; > > + > > + rwsem_acquire_read(zsl_dep_map(zsl), 0, 0, _RET_IP_); > > + > > + spin_lock(&zsl->lock); > > + zsl->cnt++; > > + spin_unlock(&zsl->lock); > > How is this working given that a read_lock always increments the > counter? If it is write_locked then a read_lock makes it UNLOCKED. If zspage is write-locked then zsl->lock is also locked, because write-lock returns with zsl->lock acquired and releases it in write-unlock.