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 48C80E77188 for ; Wed, 8 Jan 2025 04:46:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93FB56B0088; Tue, 7 Jan 2025 23:46:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F0836B0089; Tue, 7 Jan 2025 23:46:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 790F26B008A; Tue, 7 Jan 2025 23:46:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5A5EA6B0088 for ; Tue, 7 Jan 2025 23:46:29 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 01165A0548 for ; Wed, 8 Jan 2025 04:46:28 +0000 (UTC) X-FDA: 82983048498.12.9F9B3A3 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf29.hostedemail.com (Postfix) with ESMTP id 246B7120006 for ; Wed, 8 Jan 2025 04:46:26 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CQSXpebo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736311587; a=rsa-sha256; cv=none; b=Dq0GQLAk4wVKqaE8dsWTdlPQyo72AxxmleVvn7tg/Qid7kuuZe+OWCIrLEDIahSdYPrses GWbdI5aXN2TtwZNIQJKu7zxEMXqdX466ko5sCQnxhdOOW33hVl7AYwFeLA05KygAgim6Hm e0mFvVp+gtjnjLq/z5uWTAUGRQAXnX0= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CQSXpebo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf29.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736311587; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=q0txkfgI9AJsEq1JrW9TzpGg0crvaiB+q5j6F36VQt4=; b=DWYh7FSkyHS1ZFvytltUA0jFi8jQI1FveuiRsspSv/E0fFPd8mgU/Gco1HkUY3IWk8qok3 ffwij0FUNOMtqr8uf3h2W9B2TrnozjrHK4wVb2UyeM1n92aGRac3OucQMfudga6JmFXViy vXiT7bSlYBjJs5WhAp/6Oqp95++M+d8= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-467a1d43821so4093101cf.1 for ; Tue, 07 Jan 2025 20:46:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736311586; x=1736916386; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=q0txkfgI9AJsEq1JrW9TzpGg0crvaiB+q5j6F36VQt4=; b=CQSXpebo+pBY170Ys4f5icvuQayspbLidMsLILsRazGFx29wmBKBcKdYy9fcRdK3kQ SO/F3PyA+T64UjjMNywojKPq7SpVghZywF3ENyrqIdjy0Q2Dx4A9kfYTOEb8Aww/TynB bfaaiW3Stt0YlTc8+zry6S0/9il9dYunnh6O4SUjI9N32a4SdgC0IABboq9LolhAYTvS igLLOEdazSiQdR+NUF4OqJGwqs+Tt80iBb+G7j00hrcYs/zql03WUmst/yI80MfmpKe7 +eRMxBulEP9QpZ7kUlLjcC8fZvKyg6LboP4Bs6eX9/4PIygpiJPftOSdeX8uxRqOEn+6 H9ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736311586; x=1736916386; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q0txkfgI9AJsEq1JrW9TzpGg0crvaiB+q5j6F36VQt4=; b=vpA/4pxnL0FMMl0aF/L7JtGkOPkkZnabiDXq6hhkLv7eBO8zQgf8hyMbUoE00Qoc0A hpFC3AH3Var7eYsRSEnoTD1am0NIe/0k6u5os1EOTwG4UrgpkitfZ4+AKziHg0c5dyDF nhUTBYUKtWQ8glsuf4DrxewPU0qF8gu2wR269XQd1xQI6+PAwQwQcoo1LnovkwJ0GJLW 1ZPKq7c3iCqmU0mFKVl6YwLvtBZqQJL1PyBUQpc1FaekGoq0Z8ULLb5w1+de+tbqXLE1 PXL8qnA+DNukeha9d2eA8syMDf/OdgJJrH1HsUKfBiMYiY4mmqwQurYR2MVq+dZgIAD8 Qb8A== X-Forwarded-Encrypted: i=1; AJvYcCXKpmQNvkkGQwj6+9pR7Q3zaHW9SkhELbM3fbT1MbiwOwgS6awvXsUIkVqzDWuMyVaBWsTCmeveYA==@kvack.org X-Gm-Message-State: AOJu0Ywg4KX2GXSie8U05yk1YozNX1Q+V9JhB/Nkn7EtD9aHqB+c56ye JN+3Jg59vXhZ1XIy2TjFJ7aVOp+EV/Eob5jnk/iFxGENLoaUQoErGRC8v1KuIXicAmYkQzlwhMn fHVA52rpZHUhOSFuUnioOiyrxOAc= X-Gm-Gg: ASbGnctUzILp18TLJ6Rb4uXcJmuQxUxAIzb3N6fGZ774xR/vXHM02xCSl3DBLEEw1G9 67n19OlXKiD1vKLGsIjXnBQAnfXE1UDSzipa3 X-Google-Smtp-Source: AGHT+IHAQdqL/GTBeXVY+2EWvbKlLawyuDlpqI4nGD3mQhFRgA4FaKQB9Q71tvt75HPNSRSieYvjp0XGIN2EKLGo/mA= X-Received: by 2002:a05:6214:2486:b0:6d9:fb5:d496 with SMTP id 6a1803df08f44-6df8e8d1ae4mr87631926d6.24.1736311586135; Tue, 07 Jan 2025 20:46:26 -0800 (PST) MIME-Version: 1.0 References: <20250107222236.2715883-1-yosryahmed@google.com> <20250107222236.2715883-2-yosryahmed@google.com> In-Reply-To: From: Nhat Pham Date: Wed, 8 Jan 2025 11:46:15 +0700 X-Gm-Features: AbW1kvYHb_YsdnZTSLhSana6IE6_ivYCzIum3MAvTcDMPEBXvWdB2wN5-L0Q7ZA Message-ID: Subject: Re: [PATCH v2 2/2] mm: zswap: disable migration while using per-CPU acomp_ctx To: Yosry Ahmed Cc: Johannes Weiner , Andrew Morton , Chengming Zhou , Vitaly Wool , Barry Song , Sam Sun , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" , "Sridhar, Kanchana P" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 246B7120006 X-Stat-Signature: m6tkjawyh5cwc6zoahybtoffp8byssfn X-HE-Tag: 1736311586-721559 X-HE-Meta: U2FsdGVkX1/O1EZGuKFmjrcuP4TyvK3xyOaEPSLqVVHxf6M6Aaig83JAc79QLqaEhrvuAgRcPDMT5nMRkY4+ovbnRjEJYT76w5Py6sFIkA0jZCgOW2qvd3oeMQXhlfWUtTLJ/N3cnZwCQneh/ZQVJJmWoefBNFpi1Q+Y/B7WJ1j9cIVSGRbPwPX3CfHoAo1i10xRb3vH2cHEZFw0nWikXi/WIMXqcTtOQyvPCJI/c9OIcK+udYyRQYq2bXhENTq3Og2cyuTaJ+dTiKvyw0ABiUMLu83sEg6ge2xHhvGVmPqNcatmrkxTpjNvxzAZj6GSSKmhXRmjqpfFcweeHrN+d0EGubtulUg8iVWDMNHKEGq0XvbRG5QVnCbZksh5xm768K5fV5JsiAF//b6r3+koVmvdd+YanjBPJ2lL/+8GTuL8JwYBvKqRTn4LujlWjCDCmGnDRjqftJSHQSTTBg/ZJlsXPa6WrLZTULpCzTFCvcX2iJQeYQr1qv0OkHfFwyu/sRLuKnvZgcsCh9sBtD7+KFDXoKt1PE3IGCvPV5YrIezj7+g4Nrr46kdoKGvmdQvoGpL/nGbKrKCXFQ3WYrAWpth8qdo3t/+DyFC3605CEiBDiv0HpHoWYjhe/YV/4+1Mxcd3AD3dSfy/jD2B6MmZuKC7iNourfQUzS6UkEFY5n2Kot7r4dTgg9UXxRkHOP+uZ+Tps+GqSjk5+bbfDJT1DxmSjgszz4ILl2P/ybBEg7Qy+OIWnSSuMnfarUU4UuUO33JoTrJlYXSIWMLMdtT3Nq2SMGfV/xiD79Z8Cj3QLlNtyBYJBIGN0aDBV+84DqmV9p2xtnxnEq4rc8adkJ9HQnX+TO/2CqOAp/5WVONsFTc2aPX5eETYrLQ1TtGGcCV7gOewQEAxlPmop6MMp1zQXbBvbYCRs+dSGF3uiASCpK47V9jxBUQfKZtbbNfc5yJbpIKxMmJ7rmVsgHIi3Dm vvIRjPP9 BCHzmYS14PiJImzGcpyWuk3rwy6qj0/VzLtTcwPP9uqEFfp0byGV2dEsjC92f/gxNWtSGu/sAiCbsJ9iu5b4sFh6X5FCw2i5m20da3476xIqj5eng5BbUDoNUG85A4I6bZ7tuBJYb5THauqAei+ghu2WjnS2FqdpWjiv7M++//b6Z3zMAB+0ngXZv4rGEUJOSPTH+swLBhj7nlTbEnOpfVW4mDqx2XVzjHUK6RYpFOq3bk8TGbEdz5KmfM4N85ZUOAdtzNcfnl45L0ZBHIt+AhZgel6UF1kePQHF/2WvQijgN1+kWivLy7CGUBXLRnGZbSZdzn3GQw0bKhwP5s5m9pRuQSi/7HT6LJs+2Ro6LO1adK9ehY4p+nnky4+I/CDk7ABrfjWhznIk27RTMO09wt+gbsJjcXaFNsQI1pN7vKgaS/qM= 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 Wed, Jan 8, 2025 at 9:34=E2=80=AFAM Yosry Ahmed = wrote: > > > Actually, using the mutex to protect against CPU hotunplug is not too > complicated. The following diff is one way to do it (lightly tested). > Johannes, Nhat, any preferences between this patch (disabling > migration) and the following diff? I mean if this works, this over migration diasbling any day? :) > > diff --git a/mm/zswap.c b/mm/zswap.c > index f6316b66fb236..4d6817c679a54 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -869,17 +869,40 @@ static int zswap_cpu_comp_dead(unsigned int cpu, > struct hlist_node *node) > struct zswap_pool *pool =3D hlist_entry(node, struct zswap_pool, = node); > struct crypto_acomp_ctx *acomp_ctx =3D per_cpu_ptr(pool->acomp_ct= x, cpu); > > + mutex_lock(&acomp_ctx->mutex); > if (!IS_ERR_OR_NULL(acomp_ctx)) { > if (!IS_ERR_OR_NULL(acomp_ctx->req)) > acomp_request_free(acomp_ctx->req); > + acomp_ctx->req =3D NULL; > if (!IS_ERR_OR_NULL(acomp_ctx->acomp)) > crypto_free_acomp(acomp_ctx->acomp); > kfree(acomp_ctx->buffer); > } > + mutex_unlock(&acomp_ctx->mutex); > > return 0; > } > > +static struct crypto_acomp_ctx *acomp_ctx_get_cpu_locked( > + struct crypto_acomp_ctx __percpu *acomp_ctx) > +{ > + struct crypto_acomp_ctx *ctx; > + > + for (;;) { > + ctx =3D raw_cpu_ptr(acomp_ctx); > + mutex_lock(&ctx->mutex); I'm a bit confused. IIUC, ctx is per-cpu right? What's protecting this cpu-local data (including the mutex) from being invalidated under us while we're sleeping and waiting for the mutex? If it is somehow protected, then yeah this seems quite elegant :) > + if (likely(ctx->req)) > + return ctx; > + /* Raced with zswap_cpu_comp_dead() on CPU hotunplug */ > + mutex_unlock(&ctx->mutex); > + } > +} > + > +static void acomp_ctx_put_unlock(struct crypto_acomp_ctx *ctx) > +{ > + mutex_unlock(&ctx->mutex); > +} > + > static bool zswap_compress(struct page *page, struct zswap_entry *entry, > struct zswap_pool *pool) > { > @@ -893,10 +916,7 @@ static bool zswap_compress(struct page *page, > struct zswap_entry *entry, > gfp_t gfp; > u8 *dst; > > - acomp_ctx =3D raw_cpu_ptr(pool->acomp_ctx); > - > - mutex_lock(&acomp_ctx->mutex); > - > + acomp_ctx =3D acomp_ctx_get_cpu_locked(pool->acomp_ctx); > dst =3D acomp_ctx->buffer; > sg_init_table(&input, 1); > sg_set_page(&input, page, PAGE_SIZE, 0); > @@ -949,7 +969,7 @@ static bool zswap_compress(struct page *page, > struct zswap_entry *entry, > else if (alloc_ret) > zswap_reject_alloc_fail++; > > - mutex_unlock(&acomp_ctx->mutex); > + acomp_ctx_put_unlock(acomp_ctx); > return comp_ret =3D=3D 0 && alloc_ret =3D=3D 0; > } > > @@ -960,9 +980,7 @@ static void zswap_decompress(struct zswap_entry > *entry, struct folio *folio) > struct crypto_acomp_ctx *acomp_ctx; > u8 *src; > > - acomp_ctx =3D raw_cpu_ptr(entry->pool->acomp_ctx); > - mutex_lock(&acomp_ctx->mutex); > - > + acomp_ctx =3D acomp_ctx_get_cpu_locked(entry->pool->acomp_ctx); > src =3D zpool_map_handle(zpool, entry->handle, ZPOOL_MM_RO); > /*