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 E63CFC02194 for ; Fri, 7 Feb 2025 21:09:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A4836B0083; Fri, 7 Feb 2025 16:09:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 253AA6B0085; Fri, 7 Feb 2025 16:09:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 11CA36B0089; Fri, 7 Feb 2025 16:09:57 -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 E6C006B0083 for ; Fri, 7 Feb 2025 16:09:56 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9ACDC140394 for ; Fri, 7 Feb 2025 21:09:56 +0000 (UTC) X-FDA: 83094390792.13.BC36357 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) by imf28.hostedemail.com (Postfix) with ESMTP id B76FCC000C for ; Fri, 7 Feb 2025 21:09:54 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=o5djMBXf; spf=pass (imf28.hostedemail.com: domain of yosry.ahmed@linux.dev designates 91.218.175.170 as permitted sender) smtp.mailfrom=yosry.ahmed@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738962594; a=rsa-sha256; cv=none; b=z8B21y8TQVlzAjfnEoHTHhOCL9dDqcWIeaFB9TPTtd/Cj1BlIhSQqDOA4iqGcE1j97gbez OI5a3b4tbBjucS68WgxWMHxA4kd9q7I6I0iiYBeGyyqvINhfPBY5Ef9sk0THm8pFkg19WG 1XDgqsBRCPx+z+jqPyIEP7EAdHcLFJ0= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=o5djMBXf; spf=pass (imf28.hostedemail.com: domain of yosry.ahmed@linux.dev designates 91.218.175.170 as permitted sender) smtp.mailfrom=yosry.ahmed@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738962594; 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=Y0IYLcO/SDzdPLiV4EJvNLZilSU93JdpocbHr5k0iDA=; b=bhxDKdgry2tQIwZ9U5NwUqaHBQc8cec93axe20JYTgtT+oaL5qiToxMIpCLCDFDN2yE6BH Y6S1C0EPaUXzouYB3fJuY+Q85hhpSrDhIH90zDlqo7ZimRxlVXTN+MuuZnqrODEmD5bnwc MmPPgU7JHDhbQx9GkyVkVHwCroCMPOU= Date: Fri, 7 Feb 2025 21:09:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1738962587; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Y0IYLcO/SDzdPLiV4EJvNLZilSU93JdpocbHr5k0iDA=; b=o5djMBXfFodf23BMRBdPvNipOtyxbOhRBMrQmJ7IaT1jhArHD4+YHG3FNFLqQX0rnrjRRK sZQltdUbL0juQ+V7iuDi0fxk96+fKxuf0auVqIW1ENR4XIz/6EoyvLMI8w89KqmIv66tgx LjBtCYJ70j1pBU5zs32AscbQ2mf0Li0= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Yosry Ahmed To: Sergey Senozhatsky Cc: Andrew Morton , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Kairui Song Subject: Re: [PATCHv4 14/17] zsmalloc: make zspage lock preemptible Message-ID: References: <6vtpamir4bvn3snlj36tfmnmpcbd6ks6m3sdn7ewmoles7jhau@nbezqbnoukzv> <6uhsj4bckhursiblkxe54azfgyqal6tq2de3lpkxw6omkised6@uylodcjruuei> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: B76FCC000C X-Stat-Signature: gbhhw66ip1kb38htydkwtzwahuo34746 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1738962594-363560 X-HE-Meta: U2FsdGVkX1+oh2CrKlQMwfNkcKOyf+zjHtTiknUWx73hmgHrhdeEoHCN8K1Sp3pfYPTyaSodQTY5UW8Q9R+VVyuQbVmVDjG7iKya1R3LFWknBk1cZwAgWqswo0WIzjJuKucnBHoyH41HbmL7xmMGq4/BuZS/Yx5MHQJEqNfTVBgW4DeKNC31ebxg9OZPX9xKgPWOEb6JzNftSKC5aO1Pl6Boh4Ubvev7I97G1y0w+qoIxLBtVHd3PNIViz2E6/0folelTtA+gjxv1QAyYAojxj3EE2N+nO1W09cOUVdZbybe0EPxKxctpZefYGoz3SC3ISwaTGdvoMSdpLf3umGv65emi3xGLmC004mEOQr47chbRAqJGTuK9lnYCPOWWMeK602Pw8+q61vzO4WKGpiVUPLksKKH3Ydee28RCg0sYEBc+IVnWSuZkWFZLOuQ2QQuXMCCoNYqJb1ROWd9TFsIWiBTxNJ0JV3H41MjHSfBLc0utbsJblftZF16FDLuURFX2a+9HsDjzrIOe4zabdw8tGrh5vEKQVOW/fwx8ALzbd4DXZ5r47ewUMY+7hbLjkS2RCLTNo8NC+76uQJRQZNaBgYkwPMehyWuRz613kN1unu2MsqGaRaGwwFux3PE9kYXvq0IEZSOGllVLwVLmJ8mJQur4arcAEQ9E1amvvda6QGJf/t/i4Ldyvx9/JuTQcongEPdhO+8moHfmcYy8NXveHG/sba1THVwesalX50/6knxOLbwsdHLeUlFJpThNIekr/R8aHqX7Cm1pSLhg4NP4wKEjPsMM5FRvTN64sgySf4+qF7NHgUDj/iXf+oUNDpFpTVV7nMAAoL5JBjyPoQx/0qxEySxCnGgOZYkT//Ydlc84N5K/eqhPDjIEzhNz7xFXV9vm8EQVMYDrjDRVVwlJlmWlQvIwpdRrAtVcVy3M5Qt+dDiYJpQHwnVk8e5Oz6npRJI/qurTNJloY0clOE qaZyoGQW 1ATd7dTZUexBfzD1UvPI8ZT1eMoismxYYrds0aJZXs1OHMM9KxKcI+ssna97/jXEJXM64ub5px0ccP2iV1GJozLVm2NGTO1wwEoyJOqoAjNaIOTtfWc4Cpo30rNYSh33r4kr/+EHmWohfvnKfeR0W2n5VnU2wv9UrgawQOmD3MKDqYvCLTLywt1c6RpVP3KqwirTChZCTlsB8a4CiJjPnAYj3Ag== 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 Fri, Feb 07, 2025 at 11:48:55AM +0900, Sergey Senozhatsky wrote: > 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? :) Can we do some perf testing to make sure this custom locking is not regressing performance (selfishly I'd like some zswap testing too)? Perhaps Kairui can help with that since he was already testing this series.