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 6347BC02193 for ; Thu, 6 Feb 2025 03:28:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A3A336B0083; Wed, 5 Feb 2025 22:28:51 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9EA586B0088; Wed, 5 Feb 2025 22:28:51 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8B1D06B0089; Wed, 5 Feb 2025 22:28:51 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7065F6B0083 for ; Wed, 5 Feb 2025 22:28:51 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 245F71C86D9 for ; Thu, 6 Feb 2025 03:28:51 +0000 (UTC) X-FDA: 83088088062.18.29FE88D Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) by imf01.hostedemail.com (Postfix) with ESMTP id 30A304000F for ; Thu, 6 Feb 2025 03:28:48 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b="Vex/e3ff"; spf=pass (imf01.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.53 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=1738812529; 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=+g0ejIcnXuY8hjbs7xRY0Z3QUoGwxUypy8GQhbjoWtU=; b=jpaZkd0UqPltZiLW4cOFQF8gkF8dJ7w6Da3K8vLozEHZwVBbgOnGZFjnWPSa5lOY0sPb3Z P0r59t/6V53nGNuu0B2100FyQh0/QjhNNoNekMEV6wRGPga6rCTe13zFUkN/e+aIbKMi7W a9Uuo3XuxZA4mcdLp1+ieUL21bUtAN0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738812529; a=rsa-sha256; cv=none; b=TNolg+sgZ6Zh5ENmGYuea09KII5+cbwG1ZSllR6ocj93KpYE8OBxlA8v5dujQMmhISv+Yn EHL/bUjwAs0HggawGnWQgiOmlgosTWKTseI4sY20JJSD9b06WDfxIhbaE4jrt0AArJdZ+E MzH1C/ZOJUECmFJlgbbqR91/5MybP1U= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b="Vex/e3ff"; spf=pass (imf01.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.216.53 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org; dmarc=pass (policy=none) header.from=chromium.org Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-2f9bd7c480eso772195a91.1 for ; Wed, 05 Feb 2025 19:28:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1738812528; x=1739417328; 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=+g0ejIcnXuY8hjbs7xRY0Z3QUoGwxUypy8GQhbjoWtU=; b=Vex/e3ffFRjtT2NE591jYjpTms7WIlrRpk/lUllP1/iOJV91NQ/O1uCDdcn355P9Dd 65eba2Qvt+ShpG/nfwsLVdeS10qi5U76aInmzSmjJIpmfKIHRRVD02E4aPgqHqBvT1Pp YPUNS72hn4SDhbB4bTetAxRUkXR2F4TWSpP7c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738812528; x=1739417328; 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=+g0ejIcnXuY8hjbs7xRY0Z3QUoGwxUypy8GQhbjoWtU=; b=m6qw1zzjX1fYyt9XUTtB8Yq8nPr3nmEdcXN46akdpWa3i7+8vdyPAUwMqv5MBA5SwE cxcAEdAiW9LWUUIdcctoFbVYUiDPB+WZmqZOMIlL01YiRr3ULoiDnG7kfgY5TJoIpr5/ tFbHHWHmolJ47UzZvhy9cIdl/LVSzmXcPsFQqrXkZAvHRAGI1vp50GKXUTyquEfTXaQH tPfKHQY8f192khRo0TX/p1ToUexHYyJzJ6Wwt3ZZI4IyUAKu8xRqNzCPj3afZSGk161d G1HIuAZdEX4h/67frHqN21fPQS7WA6ReGYYy13dHZGKR2tvf/UAMdqHbTY61tsHbK6vj 2yiQ== X-Forwarded-Encrypted: i=1; AJvYcCW6HsEUUtpPtFxpbytg9QJ8XSGHICtyANxr8hzRS2tbcYZYU5EfExTc2URF/Leb5GJBUVLUKyczOQ==@kvack.org X-Gm-Message-State: AOJu0Yw7IAgPQO62/cuS8oYordMPzEWZoGAO98FJD8poHiuY07HMOLAz Rg5kbhGgEo33e0+ELTXxk/kk04841+n5qzqMbXQ6CLSp+qf71LQiehgAV4vc/w== X-Gm-Gg: ASbGncsTTeFg5OTvUXrwOEAJsk/scYODLfVqDuBsTDBjzLg5HoSXdSljfLZN9fApMb0 lE7dA2bNpx76IloM7wTwuPz+5RlKRYTn+9oN5GEedI1XJB2fGxBbGy5zAZOnCirMJ7zg/CdK7VD /E74M8QvAtsVGyGjdfhs5QlevtCYXBO0Pff8Obz8RtTd+sxDZuP8WJ1rZ8crstQG6HKXqR+37AB TZdS99JOk+u5lH1Q2EoC0tQd91wNtQahtfnC+zACrZQhwqwKyPInnav6ajlYLT8Pkhxk6Y63aD3 OPApmRJgTsUjyC2qASU= X-Google-Smtp-Source: AGHT+IHU28dRZEUxuuwRF/LDqZGMYBA1c9FDhEstdn9sQppVTpBL+mHe8Vz6f79joKWhyNwK6UyMlw== X-Received: by 2002:a05:6a21:1805:b0:1db:dfc0:d342 with SMTP id adf61e73a8af0-1ede881f0f6mr10219727637.7.1738812528071; Wed, 05 Feb 2025 19:28:48 -0800 (PST) Received: from google.com ([2401:fa00:8f:203:b2ad:5851:6fc0:11a4]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73048a9d4c0sm233095b3a.22.2025.02.05.19.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Feb 2025 19:28:47 -0800 (PST) Date: Thu, 6 Feb 2025 12:28:42 +0900 From: Sergey Senozhatsky To: Yosry Ahmed Cc: Andrew Morton , Minchan Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: Re: [PATCHv4 14/17] zsmalloc: make zspage lock preemptible Message-ID: References: <20250131090658.3386285-1-senozhatsky@chromium.org> <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: <6uhsj4bckhursiblkxe54azfgyqal6tq2de3lpkxw6omkised6@uylodcjruuei> X-Stat-Signature: orkcfqayjxtnp7cps69rxdx98xntyru5 X-Rspam-User: X-Rspamd-Queue-Id: 30A304000F X-Rspamd-Server: rspam03 X-HE-Tag: 1738812528-263717 X-HE-Meta: U2FsdGVkX18xnqQ0apKmfaedo0lLVMOtiwMZW4ClB0rivin6HJN2sbd8sNMvS/DAVdkjoK7yMnWliFNREVY0fh4sf8XzEZVa2VuDYZUIHkbhm1c+fejptPkmqmzLydPFaF98BDH67wXKzSyJZyF9OpRZbxbJl209hy/2s+Nv+Fle0f7jTC7JClo+JlOsQERobqCOcAN3xX1yEKyS3+qq7h8aVXGNvH7vcD83zu/YDyIkrai70R8KVBV6sPt3xl/Q1/QO9LlUN8DpMi8C08WdF+QqcQnv/LiUWshifQ8JYhMB8KTxdyo8BLWoNAsBKhIDsxx1jUqIJciaO9IPVr52SZJqVn8M0Qe0sJjlpm0AwSb1/Ryr4DN1vAAyq83eOrR1Zk1ORzHnOFSOZXqm2mN9ywZkSTRojvbSWNMVd4hAvVepoS0C8ElfhJE3W2czSmma07M8ZeNII6Cz+gFzIdKbe8EW8OH/O29QHJpsxgatlVKztzp5Cmt3jzo1qHFqZeKUfsTyvq4S2TxgO63aViR/mbjc8Sl1DNDcNXvhgjj5qbJdsQmh5ditW4LQ0iiJukIKAK1QgIYAoMlz3WGoV1Z4F8ESdC961TDuZoieIqm8wgkmfWsYoR53gq9Vg5rCWu/GbL3z17+R69PEAswMnZPNTLSbBzXH7/4OSGA6w5jeDEmM9tQTBry7t9zt09nVu5JA5cm3fq3PnSZMASj2+P8UC6siwjKaXrVGpLhpgnGbgrfhwf3eKlC73ystA0iwwufbSYCucz07WPyEyu2pVdArYodSqwLzqpcBTE22XTE2BrHOsTrosjU0pnVsaqprPZmwJvEOBvRRVjdx47VFOQcGa/ylWOBGuntV7tROPhPm4diI4LhRzBtS3zd4adosAdkM9hY8fZH/INeZ+P5l64238dGzubtedSW81BHpvE4a4JhJNURDVm0YGHlhOryaP6zB4x+Cb+ScQGc0Y8U8xN+ lo75N8Rw 1lZhf13BC39/X9RdwgoP8VQ/1lIBZ7krFMxYy0I8cOQud24sRdOo6YovT8I5geAjXJOkolJw2FEDcP6OMzB0OxL8WyQo7teHWIL+DfVtlM4Z5xABq6WwAARfCIRNRVvOKoKjLKw++dtSqb2xCqlV0gMBs68K/Lj+1EEfQ5cObTD1ULUsg99+yyOPH48cF4vtD5FMRKNU+JsqkHu9nM/hOXYqzyEaQM0xjInSmHOChbLdBnk5KOPsmKBbhx/ultx5OLksxAJHLe6BCYmBl6/1IDLSuzXCFdNROmaLycqXmrAfTHAWXM9qmF9vhwvyfdpNlbs4gT5b9LLYAb5uFKp40ni/1axrMhql8vX9PJZqLFPyIMUc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000121, 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 12:05), Sergey Senozhatsky wrote: > > Sure. That's what it currently looks like (can always improve) > - added must-check - added preemptible() check // just in case - added locking rules list Oh, and also switched to acquire/release semantics, like you suggested a couple of days ago. --- /* * zspage locking rules: * * 1) writer-lock is exclusive * * 2) writer-lock owner cannot sleep * * 3) writer-lock owner cannot spin waiting for the lock * - caller (e.g. compaction and migration) must check return value and * handle locking failures * - there is only TRY variant of writer-lock function * * 4) reader-lock owners (multiple) can sleep * * 5) reader-lock owners can spin waiting for the lock, in any context * - existing readers (even preempted ones) don't block new readers * - writer-lock owners never sleep, always unlock at some point */ 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 __must_check bool zspage_try_write_lock(struct zspage *zspage) { atomic_t *lock = &zspage->lock; int old = ZS_PAGE_UNLOCKED; WARN_ON_ONCE(preemptible()); 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(); }