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 5A363C021B8 for ; Tue, 4 Mar 2025 08:40:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9A5D46B0082; Tue, 4 Mar 2025 03:40:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 955EE6B0083; Tue, 4 Mar 2025 03:40:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F8D16B0085; Tue, 4 Mar 2025 03:40:49 -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 631D96B0082 for ; Tue, 4 Mar 2025 03:40:49 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 0C42216192E for ; Tue, 4 Mar 2025 08:40:49 +0000 (UTC) X-FDA: 83183223018.03.3B3EFE5 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf19.hostedemail.com (Postfix) with ESMTP id 2AB0A1A0002 for ; Tue, 4 Mar 2025 08:40:47 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ElcGdFfL; spf=pass (imf19.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.160.170 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=1741077647; 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=Ls034JdceRJdgsKt1ncLTwTspu53450K3do6C83lCj4=; b=L2GHJxmjq100lRGKORcoQM+Y+twglyD2uwsLKwwkkI+QGZ5AHPQ6/cG/xPzFZDFmp+O1f9 +o81GvDlPwNtzyQZP2UJHYrdbLedXljOkk9t5YHTOe2iX/HvzUg/r6lj0M+N32bNClrfmz LhKbgKzrl1ejyWd+lWC6eu3Yr58mCs0= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=ElcGdFfL; spf=pass (imf19.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.160.170 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=1741077647; a=rsa-sha256; cv=none; b=KtFzBtjBPiM8AEhUar+zDG+HdB+PYvyXEqxIlo9H5HiNYWSOdQ1Sy386WALRfuq/Bga+rX t96bwNmSNizwpOSe4WmXI7PeqLoAXXUbZF3JxAzF7BwaBf0T0GeGm7orux2X4a0+eoJuRI Bxt4TFj8Tod5B8ubcPpP5jw83jSGrA0= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-474f0fa7ab0so13555191cf.2 for ; Tue, 04 Mar 2025 00:40:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1741077646; x=1741682446; 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=Ls034JdceRJdgsKt1ncLTwTspu53450K3do6C83lCj4=; b=ElcGdFfL3K31QeUTDcGpXhJns9fHOtVA37FV1duDhuPm+2++3h75uZXUrDXqWohy0E sKmVv7E349jblMWUsLxffPrEukWxTll/ooBi3EwvwiaQasrfyepY+Uf1DBCVW7YM9Nii IUR8uXe0Hae+ZtKsB4maaIRheKU6R7KHGu4Ys= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741077646; x=1741682446; 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=Ls034JdceRJdgsKt1ncLTwTspu53450K3do6C83lCj4=; b=FxLKepmOpu7Zq7thsd10R4PkT4rLaC6JUnb6e0ZkD1FwlSFmC5slQWfxs50XClwXh4 ow229rE8rG7GK+CoMHPWVPKsO5YYfZ7hutDJJiE49YhJgHWoW3RIqCrm20+0+l7WHocx AJA/246x8yRrmqqSteba9qxuTCqav4WmQ+7y6f+T+C0qccTjDzbk48Tu7x+0CEW9HBV4 15YW1dnz7dj/1rLGM57mO8ESNdsby0OZ2kabHMeCv/TzSoLdHY2k01wLA3SYQ2kjM4k6 r+lGR9GiFcPlMmwF3dPe5/Tsu0pzROyzjOqjH9g1Nlkm0ozc+OZpfynPRrv1BBjWFRtv pdEg== X-Forwarded-Encrypted: i=1; AJvYcCXxBLUwQjABFZBrmowjl4ZhL7za0Tl/4VK813Imkv4Obu7bBYTCVgMgOMHVP4dDLXCacxgIb8eJ/A==@kvack.org X-Gm-Message-State: AOJu0Yypud3JZ73UsgUXvCBgCMkj/GzYzioeyRy7GSm0K+avu+hfv4+e XSTkifHm7zu7IR3sDhmg4e3yERr5/8Ech5Istj3cPtJ9yfHTHyh0znPPLiNIEOlMutpgqh6Ip1i i5A== X-Gm-Gg: ASbGncuWgzsx83nhFNjobn+p3Vo9Gpb6Mo6h+7IE6xP3ir7Ll+0plIpKIw76hF3a92e eyfwRiPSXWDfivj6qWzDxX0j1AOFAxhy0DOPKvag0l67xp5ERSDczssj0SrJ8z5w6MXettj8Tsx Cp+Mz/WggxR/nqEzaegibOb0CYMTZtv93a3K48tdhJw3N3Tz+SucPw8TUe8P9sfD/mBjS0ftMW7 eDj6OwlFH3rAkMzTv5fGaKd16FqdtugkHd34CYdXM1Llo2N92iqIQLb84Yxxh9FI4qCIihEuuGs H9TwduEE1uRCh8x+okkn5kE/XeDO/jHNAofsHtdGXV0DF4U= X-Google-Smtp-Source: AGHT+IFke/Kn/7by7ePS0YnlPomd4R0PuL9lngQDVZGe83c7qDsBLLX/kBoKi8H29vOpupTfsVcQpQ== X-Received: by 2002:a17:902:c948:b0:21f:1549:a563 with SMTP id d9443c01a7336-22368fa53eemr279657475ad.2.1741077190313; Tue, 04 Mar 2025 00:33:10 -0800 (PST) Received: from google.com ([2401:fa00:8f:203:767f:c723:438:d0b1]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22350524b69sm89675455ad.228.2025.03.04.00.33.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 00:33:09 -0800 (PST) Date: Tue, 4 Mar 2025 17:33:05 +0900 From: Sergey Senozhatsky To: Herbert Xu Cc: Yosry Ahmed , Eric Biggers , Sergey Senozhatsky , Linux Crypto Mailing List , linux-mm@kvack.org Subject: Re: [RFC PATCH 7/7] mm: zswap: Use acomp virtual address interface Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspam-User: X-Rspamd-Queue-Id: 2AB0A1A0002 X-Rspamd-Server: rspam09 X-Stat-Signature: 3zjpm5hhixqa9wh6x9rf9gdjkraj36r7 X-HE-Tag: 1741077647-865295 X-HE-Meta: U2FsdGVkX1/0RLto2EtNG/Kgt5bE+/oP94sOstoznyz6sbhZZ3DAegj83XOOVJcKcJb/h20PK8ILT1x5RhZXQwAYn95PgzdtNRcVeyAczHxCJQj6QetH+PUVwllSFH0Y0V/XVpjuQdoElijcAoAvr2O+cMCjlsPRz13JY05zNvxygvxT5AzLUY2pW3Q4gAhYvTQZyL/x35QkTfjI00XeSp3tR9tit1I+XUVt1ZvqTi7LgLE9l/ouBLd5JjgbwSjkUFF3k/Yxwnnslf9j4MvnU+JCr6sMOqJYDPTtuilmxk88G8h092JUxBRz8VT67XaNbtvYDqomxuTYoPOu8/w67D9MQ8K6MVLUbSMCO3nj4fWudOr/wHYE1WASCj3/mTSJ1fg6Kaps7ahiaQIdfvT8/QTqp3+FDF1fS0qgM/snPC1KmV+pT3NFy9aHx0PFq8Z5kiqdch3j9ngXwlUTZCxhqbwz5l6n0JRd+qNGRFCBMevP5UwJ4eP+SCyM5j3fGXJ4GkHY0hAlA0wK00bLdrsNec7od/NTdBqcMua5H+qZsgRe1I6WqRTKpsZS5A2PW/ZxhD3jswh+P2533HFec1e+ZVRmet+QTY0p4/YboLHXlvtwiBz2hyVMpYJMuC3s6OsNzmW2Jb+IAeCeS6PrZrK9dSzB9e28a9BEOalk9F5LE4gKFBDC1SFnYoTb1DzfucD0faitq8Ku8bKDj8NecZzfIvuaFj3Zt5IOlasHd7yd2t1veeKM1VWsBtDbCEuplJ0HXpo7rFYwCOY3Admdz/5VLaPkh4+uBmvBxidwbPowmH5P8gELJc+5FLPVFwtlN1jcPVUq99FDZhXpnmkP4PoXOYn79GJUtacmgw1nINAWgq99lgFwa4NJ7ih8tC49Dm6nrxfKEJO0TaSzCjWEWlXnHP0TDhuBzbnatxgLu0Q9yQCB59rO395fbMAFpy2+vvzS/RcRULo6xvbiy/z1PhV 77eurHG1 bJ/bqxd2s2Eg87BbxqKljkwyiuLnPNdOu5YzCPSDdUTIk2Teaf9mDZmukBetwzmP89nYthW/fuaPpZNxeaX2bnqy/sOCr26MAUGqkxbSCBj8X82u7Elqsbh9nY4I0WwWxWAGxa2ppNEdZFDJMRyY1WNSK4d+Vb/YoNlQ6KNfhWAqy3LTYz82M17/lP9N/ROte4L62SdeH6B+ViPG+gUaBChH/AoGyyoX71NGoFTLDV8hPtypR9qKRFRJKopEkSUCSLfb4kaXTOflFNn4mzrdxEC0mLa3f6JYldiE+OBjqS7XjC1w7BBKNib3VkGEdDJqd7DNebmDtBTk33GAcRJV7/i9iTo5YdSNZiMIDV3oV0C52XOc= 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 (25/03/04 14:10), Herbert Xu wrote: [..] > +static void zs_map_object_sg(struct zs_pool *pool, unsigned long handle, > + enum zs_mapmode mm, struct scatterlist sg[2]) > +{ > + int handle_size = ZS_HANDLE_SIZE; > + struct zspage *zspage; > + struct zpdesc *zpdesc; > + unsigned long obj, off; > + unsigned int obj_idx; > + > + struct size_class *class; > + struct zpdesc *zpdescs[2]; > + > + /* It guarantees it can get zspage from handle safely */ > + read_lock(&pool->migrate_lock); > + obj = handle_to_obj(handle); > + obj_to_location(obj, &zpdesc, &obj_idx); > + zspage = get_zspage(zpdesc); > + > + /* > + * migration cannot move any zpages in this zspage. Here, class->lock > + * is too heavy since callers would take some time until they calls > + * zs_unmap_object API so delegate the locking from class to zspage > + * which is smaller granularity. > + */ > + migrate_read_lock(zspage); > + read_unlock(&pool->migrate_lock); > + > + class = zspage_class(pool, zspage); > + off = offset_in_page(class->size * obj_idx); > + > + if (unlikely(ZsHugePage(zspage))) > + handle_size = 0; > + > + if (off + class->size <= PAGE_SIZE) { > + /* this object is contained entirely within a page */ > + sg_init_table(sg, 1); > + sg_set_page(sg, zpdesc_page(zpdesc), class->size - handle_size, > + off + handle_size); > + return; > + } > + > + /* this object spans two pages */ > + zpdescs[0] = zpdesc; > + zpdescs[1] = get_next_zpdesc(zpdesc); > + BUG_ON(!zpdescs[1]); > + > + sg_init_table(sg, 2); > + sg_set_page(sg, zpdesc_page(zpdescs[0]), > + PAGE_SIZE - off - handle_size, off + handle_size); > + sg_set_page(&sg[1], zpdesc_page(zpdescs[1]), > + class->size - (PAGE_SIZE - off - handle_size), 0); > +} [..] > static void zswap_decompress(struct zswap_entry *entry, struct folio *folio) > { > struct zpool *zpool = entry->pool->zpool; > - struct scatterlist input, output; > struct crypto_acomp_ctx *acomp_ctx; > - u8 *src; > + struct scatterlist input[2]; > + struct scatterlist output; > > acomp_ctx = acomp_ctx_get_cpu_lock(entry->pool); > - src = zpool_map_handle(zpool, entry->handle, ZPOOL_MM_RO); > - /* > - * If zpool_map_handle is atomic, we cannot reliably utilize its mapped buffer > - * to do crypto_acomp_decompress() which might sleep. In such cases, we must > - * resort to copying the buffer to a temporary one. > - * Meanwhile, zpool_map_handle() might return a non-linearly mapped buffer, > - * such as a kmap address of high memory or even ever a vmap address. > - * However, sg_init_one is only equipped to handle linearly mapped low memory. > - * In such cases, we also must copy the buffer to a temporary and lowmem one. > - */ > - if ((acomp_ctx->is_sleepable && !zpool_can_sleep_mapped(zpool)) || > - !virt_addr_valid(src)) { > - memcpy(acomp_ctx->buffer, src, entry->length); > - src = acomp_ctx->buffer; > - zpool_unmap_handle(zpool, entry->handle); > - } > - > - sg_init_one(&input, src, entry->length); > + zpool_map_sg(zpool, entry->handle, ZPOOL_MM_RO, input); > sg_init_table(&output, 1); > sg_set_folio(&output, folio, PAGE_SIZE, 0); > - acomp_request_set_params(acomp_ctx->req, &input, &output, entry->length, PAGE_SIZE); > + acomp_request_set_params(acomp_ctx->req, input, &output, entry->length, PAGE_SIZE); > BUG_ON(crypto_wait_req(crypto_acomp_decompress(acomp_ctx->req), &acomp_ctx->wait)); > BUG_ON(acomp_ctx->req->dlen != PAGE_SIZE); And at some point you do memcpy() from SG list to a local buffer? zsmalloc map() has a shortcut - for objects that fit one physical page (that includes huge incompressible PAGE_SIZE-ed objects) zsmalloc kmap the physical page in question and returns a pointer to that mapping.