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 100BBC02194 for ; Fri, 7 Feb 2025 02:49:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1B9536B0083; Thu, 6 Feb 2025 21:49:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1682B6B0085; Thu, 6 Feb 2025 21:49:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 008A36B0088; Thu, 6 Feb 2025 21:49:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id D1DC76B0083 for ; Thu, 6 Feb 2025 21:49:05 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4611D4BC2F for ; Fri, 7 Feb 2025 02:49:05 +0000 (UTC) X-FDA: 83091616650.17.622C2E8 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by imf25.hostedemail.com (Postfix) with ESMTP id 55A70A0004 for ; Fri, 7 Feb 2025 02:49:03 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=kHFs2Plw; spf=pass (imf25.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.49 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=1738896543; a=rsa-sha256; cv=none; b=Ha1cCQk37uz9gYsdf8eyENXuVgrYrdK1HRflubJYHFjwI1oSDwCpwLoAYgsV2SDjhjqpHm PMfFge3Rp/IG43vyA6MoGHqigh8nlJujQ2K/JaoaoQnHkV1PVv4J10iE4Uwzbf1FccviYe G1acPNfS63vJvCKMbFjDhoJMhu6x2QQ= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=kHFs2Plw; spf=pass (imf25.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.49 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=1738896543; 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=O7ZHdaJk5DR7YHLi1M3nG14eg8BwZlAqP3ArtZ3bjsE=; b=Jd87B1ygVljVCgjf6PcbPiLVHWGe5efzfdH/QtK39Dy1swa5ZZeAxb1IHJ/m/aoQE1Llxk HZG809UvxQgB7qMI+v3SLl7Qvaq3e+qgsRG127bfE4AMsp6gqjyDzsdp1E6H+ea1khdiiQ 42HWHbK2aoJUtOwFrpSvGro7D43aTnM= Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2f9bac7699aso2303951a91.1 for ; Thu, 06 Feb 2025 18:49:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738896542; x=1739501342; 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=O7ZHdaJk5DR7YHLi1M3nG14eg8BwZlAqP3ArtZ3bjsE=; b=kHFs2PlwQfbYW+02xAtm/xw2P+QsOh6u4Ugg2rVPtosvEqYilQ95EpLfciu80RlMfP 6fDJA0kiAjEnycTQzQRo3jLrS0DuCdR+3EK/QtqJ9BbNzld36/LBiAP59mQS/gDRbGcI 2cbbjtHx8UwlOhFN1RrvLMHsPAFMMvjdXZFhU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738896542; x=1739501342; 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=O7ZHdaJk5DR7YHLi1M3nG14eg8BwZlAqP3ArtZ3bjsE=; b=nuij4pw+ZU5eyEyWalqpsZ9MBH+dJrB4RxGcIbZyRm4/qgokjsz6ArdKMteMlgVTzO KGjKuXX5ygMM5hdRBH1aDrZt1b972WSYmyZTn5COUMgQj3yndrvIQD3DT2Y7sonOkCXr 39DLPOTSQcyYi5TkfEGl1oUmmkxILuLD7H5cD/UnqwBpW3EAk+RzgLZr9OgCsOcOuYtS ZwQuIZTYJACvCyy2pMlylynsMBTJlQcbxjgXLK+SJfogp/BgaJ0aNPhlKrosGkMt1GmH k4Iir4O9YpEs7xYoIEDkhOBNOXbhRBMyLZJIAJvG9XUxGLI8DdkpRRA/MNVwiszroKQ/ revg== X-Forwarded-Encrypted: i=1; AJvYcCVYCI+rUitiO0y8PZXVj3TVLa+MFjAr/51bBPxm4wcLtFHeZidukOecmuAQqsL26vbj2VtOjAyIaA==@kvack.org X-Gm-Message-State: AOJu0Yw+gxKMM9gHdKUObCrXSQzKUk6HuOBt7kgxRiztzo68x0/udaBw BgPip66qaK9+VPenDR8FNo1/nb/D6/5IX1cZU+WmliaChSel1D8m5c6Cas1RjQ== X-Gm-Gg: ASbGncupdoOC+79chAq6+zZ2XB9gs/7V+1Z91pekSO5WKXZPQow9SLxTwrrkH7rVESS Q6Ao25h3vF4zvOOWo+ST3xbjKGit2b0Er/E8zxoDlELhQygiH5hqXQ/eDnZGMuEYJGX8DL0H5e2 zMkZA3kUXmCuKjB4BBa0OeRAIsqrjfW+XtsL+N/NWjfLo0cSmci1dhyE4tQ7iAuPKfDJ2irMU4I SjY3Pme3cGeyoZyICqymGYMr/wsS8BMNUA5HTJV07wHNc+dzxVKqzY2P2so6OrX7OWUsczuQ1y6 i+KVp29i56vtL+9CUcY= X-Google-Smtp-Source: AGHT+IG8PO2N4vMXFVcdu1RO/X2wMCwPsupACJLDO7sya7f/yy8LAI7XAeuXB6egIhMDMkTteBDvIw== X-Received: by 2002:a05:6a00:3d16:b0:72a:8f07:2bf2 with SMTP id d2e1a72fcca58-7305d44e557mr2886062b3a.9.1738896542182; Thu, 06 Feb 2025 18:49:02 -0800 (PST) Received: from google.com ([2401:fa00:8f:203:28ab:cea4:aa8a:127a]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73048e205b5sm2041684b3a.176.2025.02.06.18.48.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Feb 2025 18:49:01 -0800 (PST) Date: Fri, 7 Feb 2025 11:48:55 +0900 From: Sergey Senozhatsky To: Yosry Ahmed Cc: Sergey Senozhatsky , Andrew Morton , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCHv4 14/17] zsmalloc: make zspage lock preemptible Message-ID: References: <20250131090658.3386285-15-senozhatsky@chromium.org> <6vtpamir4bvn3snlj36tfmnmpcbd6ks6m3sdn7ewmoles7jhau@nbezqbnoukzv> <6uhsj4bckhursiblkxe54azfgyqal6tq2de3lpkxw6omkised6@uylodcjruuei> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Stat-Signature: 4m1wj5ftzrnxr7ip99k34mjt97yommky X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 55A70A0004 X-Rspam-User: X-HE-Tag: 1738896543-145065 X-HE-Meta: U2FsdGVkX18coikMpZhCL07PZGh8/rElF/B9XyzFXP2F7KjlTbNQmjW6x8cISRi77berSVCT+nqBEHFv5IUBVYyyo7D+y7l3misnh2Pjr1hgackXMFhXxIpdKMkCgGCAISwkPSRrVAqYBgjn5g12ZdWRdNcWP3jsjQ+OxFgToLVXS/IOX7ruuSstzxo9zv6y+D5E7c2UdiwdjZiLOpp//CLgUW/ehMV0M7H9JiN51G7VGlgbPXtUBRQPNoli5J6Q6aVFX7NmNh0zZUckhADRzW95J6m+WwwqV8jr+SE3sUpSnm1rVh6v093wKDgDBGHjJG0kan/ETz/iKc3KRKAHx7v6vKj4bZ7Aq1+OahH2FVr6UsnnT7qY/9PFRrOUXLugqO2S6TH3apJGzx2dWCd9szv94LODmpfteyvP2eF4b2eWfbvBhkA4aE8i/KLHNoHHhmWb/IWDD9xBi8PBbG7L6xmRUcOBmATCXr7DwFVN/Wavz6w86Ceu4SQTkxfQ2nBkKUBvEUaZ9c5TYSt0XmtfkNbOSmoZIKO5ZFtG59opdTa4fe53G8voHUWeaHkHZE6i9qNBG+Ow3+tuoSEGG4knmSCS/7orYBhhwWByD0Rh2p82R7GM4Z4ihquLwrTPkCuYq0k7OEHm8EdCGuS2dW4Vj091IMmpU0CBfGLJLcW0ect1YHGQ6+EEkx4kEGX4XZL65T9+OGg0wGMsIV/zMQ1CuZ/3xR9Ifp6xMjsI913zVpFWuYVEHGxyFaUqMY2pEcYClhk3PZawo9mosumhjwLePUh46cgzFy/5+eNICovQhP/y8KH0rdyvRhxQZUiofhHo/5VrZUmEQOx+ZTtuqarg72KuJx7l6uzIY5DWNwIi7JZDx0c6qlJhuqxhZip0039UHK7Ul9jyDhJKrhfFS2HPnYAhQ70AEzRJ84Hlwi7CLoDdye99mcyLRzsoj8BBjbN9dpnVJ4WT2HjUNBT1cO1 6PAdYfu4 UdDhcEKBi6EA4zd0fIazZqyKNaTeuiZhhDshyfeoqpswB1DCuanZpiU0AKsaS69kt4brxQGuI2oCcl0uUFiZL93BQQIVnRNplOUuSXv1Sg5R1Prd2VyWzL9zHNuLxIjZvVm08MFG3ZierLvjNase6ud6g9CuTh8Zk/FcTQqLGrolR7ndAzL1DEOrK6K5kTiKyv0tuQZr6AM0xya9vDsE++rUSa3QRTv8+xNPMo1SD5ORibb0rv1SOYuJ6SRzuBJTiQL6JSDAUKRSxz0phvFJVbMvRvQRJvu4ryflHPfVKu42YN9WyQH6RHZPxw0KAHwEJ7FSynpt/BfpLTIShJxWa+xIiEyZPy0I/tgkoPPC+7+fmz0s= X-Bogosity: Ham, tests=bogofilter, spamicity=0.012463, 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/06 16:19), Yosry Ahmed wrote: > > static void zspage_read_lock(struct zspage *zspage) > > { > > atomic_t *lock = &zspage->lock; > > int old = atomic_read_acquire(lock); > > > > do { > > if (old == ZS_PAGE_WRLOCKED) { > > cpu_relax(); > > old = atomic_read_acquire(lock); > > continue; > > } > > } while (!atomic_try_cmpxchg_acquire(lock, &old, old + 1)); > > > > #ifdef CONFIG_DEBUG_LOCK_ALLOC > > rwsem_acquire_read(&zspage->lockdep_map, 0, 0, _RET_IP_); > > #endif > > } > > > > static void zspage_read_unlock(struct zspage *zspage) > > { > > atomic_dec_return_release(&zspage->lock); > > > > #ifdef CONFIG_DEBUG_LOCK_ALLOC > > rwsem_release(&zspage->lockdep_map, _RET_IP_); > > #endif > > } > > > > static bool zspage_try_write_lock(struct zspage *zspage) > > { > > atomic_t *lock = &zspage->lock; > > int old = ZS_PAGE_UNLOCKED; > > > > preempt_disable(); > > if (atomic_try_cmpxchg_acquire(lock, &old, ZS_PAGE_WRLOCKED)) { > > #ifdef CONFIG_DEBUG_LOCK_ALLOC > > rwsem_acquire(&zspage->lockdep_map, 0, 0, _RET_IP_); > > #endif > > return true; > > } > > > > preempt_enable(); > > return false; > > } > > > > static void zspage_write_unlock(struct zspage *zspage) > > { > > atomic_set_release(&zspage->lock, ZS_PAGE_UNLOCKED); > > #ifdef CONFIG_DEBUG_LOCK_ALLOC > > rwsem_release(&zspage->lockdep_map, _RET_IP_); > > #endif > > preempt_enable(); > > } > > --- > > > > Maybe I'll just copy-paste the locking rules list, a list is always cleaner. > > Thanks. I think it would be nice if we could also get someone with > locking expertise to take a look at this. Sure. I moved the lockdep acquire/release before atomic ops (except for try), as was suggested by Sebastian in zram sub-thread. [..] > Seems like we have to compromise either way, custom locking or we enter > into a new complexity realm with RCU freeing. Let's take the blue pill? :)