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 7D3FDC3ABC3 for ; Wed, 14 May 2025 02:48:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ACC5E6B00B2; Tue, 13 May 2025 22:48:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A7A886B00B3; Tue, 13 May 2025 22:48:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91B196B00B4; Tue, 13 May 2025 22:48:52 -0400 (EDT) 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 7193D6B00B2 for ; Tue, 13 May 2025 22:48:52 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3ADB382110 for ; Wed, 14 May 2025 02:48:54 +0000 (UTC) X-FDA: 83439980988.15.549F7AE Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by imf27.hostedemail.com (Postfix) with ESMTP id 7CEB840002 for ; Wed, 14 May 2025 02:48:52 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=Sdi8ZX1L; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf27.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.210.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747190932; a=rsa-sha256; cv=none; b=h729TFHzE1UztzDRMGnTkkEAk6hcE52nnIQ0AW1EyppKMsLoWrm6SgRzSgFxt/N1GDnOp0 UWDqhP9gcyfZDPRu1jQjaiYelfmPy+U3VlOTiFPo8CfrXbCAR5H5QaABMqJTh5plguci1o VnJPWtaBA7TCUAfkYHd6ZFEsILOX7yE= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=Sdi8ZX1L; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf27.hostedemail.com: domain of senozhatsky@chromium.org designates 209.85.210.181 as permitted sender) smtp.mailfrom=senozhatsky@chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747190932; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=YfYQ/WK8QWoi6yOsmfhqLphXHC1mtE6IrX6WF+13WJo=; b=Qf6/i39w+0/59LmUO1b4gKVGfGyBgRqgvZwVMja8Akg4cUp/WvFZEb8Ej37uK1erKoQsEz mHeWZRZM/Ew7gW5NaK+aZKoNE37VqY1jJzcAwqXRK/JpcjvOim43c32907M5A2tRhehBPT rligT99Pk8SnaAWm9U5wtdBZQsU3OJ0= Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-7410c18bb00so7532924b3a.3 for ; Tue, 13 May 2025 19:48:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1747190931; x=1747795731; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YfYQ/WK8QWoi6yOsmfhqLphXHC1mtE6IrX6WF+13WJo=; b=Sdi8ZX1LfRcfFPCI6ItlnLR5aoAqXyIJpl6ALySpZrF7DPw+HxZIAqMMmBgNDLX0uU eEIOkpAVHhoaQqFVLXGHuF6RbG2TUEy+jPWEXfuc2ESPV2yioV/QWpOCnkhBsmJxr5GO zUwV0lt7mkk4Hegk1ZUQoD/aBOHEFXi3H1NjE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747190931; x=1747795731; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YfYQ/WK8QWoi6yOsmfhqLphXHC1mtE6IrX6WF+13WJo=; b=ilI9SrB7G/pQ23K84R7bIOQWv2UWJi5CnTPyFv4cAo5WKn3+91Px5Qr+8+EK/p3h9G pU0KessaylxwzQ6/uKwWRc2+1ue0V+Nl7dg2bqh7vGuYU0fTyvodfHTaZ82+UCNB5MEN cclud82frqggWQSVqfn4bntTP4zUa62WBeAVBXKbtEGEpJUL8M0B3O6NSY9l8vKz84UI 86m575zbyvxTYO7nRe+RD9mYcMXgKdgeHQYa8A4H5oOznmlPCyfJYUNmNj94ETmnKetG Hw8YQqTEUrhE2tqcoOtOcqhMSSNaTyr47CfvEMyFqlK97HN4ERSQrp319fU4bXA0Quuk KYsg== X-Forwarded-Encrypted: i=1; AJvYcCU5zSn2Uoxdzlyr+zRku4XqtfAENjMBcpejzn4z4ZFTFAyg7KthlCVousUwxOdY7N8izGv1CTqBlw==@kvack.org X-Gm-Message-State: AOJu0Yx10oZcifADL2dNAvwCkT0bUPktuxj/f7K1qv0ZaBAaGCctQ+Gc 0yH4ovU/KP21u5FYkr2ZuD/EWJdul+YYWDUrqsH+IZ5cswSvfOVEEoGVq0RNc+KWaCpf4fXwjf0 = X-Gm-Gg: ASbGncsF5WvKwwMwRp2YK4bMEd94WJjkv243lTbXv5VYxLdsI11HC4WmjKlxXbxZphV kFG1TQ9V8aijdOivPRvCGdUkaGTKtfcS3UucxthzqvUqNfF8RXb80RT/Lik7gGcV6O2/lr3E3Xv dbYpaUI33smFqnkT5ygX8LHoXXqJjvKAm9hC8ra0DVoONmIqYQ/yVp/+DiY0YbHmQfC9Tu1QB99 K6wmaOGwjcHxx8EfIqY9N655YiF28LwhgnyUxjcpialZ6F6Ew8PgKIcyKIhyBr+TrfEFJgI4Zse /xw2oxi1yUzDWkYDwh7A/Tkp5HMK3wn9hjQBik2Rac33rS/3M69zAzasm7D1BQ+z5ToeSM86UEV ahA== X-Google-Smtp-Source: AGHT+IF4ldq1Xj0QllHQs826ty0PgNOR/aQFXOR03YUP8fNtH/S40aAtPrbk82+q/rpOhKN2HsBt9g== X-Received: by 2002:a17:902:d4c6:b0:224:1781:a947 with SMTP id d9443c01a7336-2319813f761mr26920275ad.21.1747190920383; Tue, 13 May 2025 19:48:40 -0700 (PDT) Received: from tigerii.tok.corp.google.com ([2401:fa00:8f:203:d415:5e1d:3550:1855]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc75494cesm88759135ad.1.2025.05.13.19.48.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 May 2025 19:48:39 -0700 (PDT) From: Sergey Senozhatsky To: Andrew Morton , Zaslonko Mikhail Cc: Minchan Kim , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Sergey Senozhatsky Subject: [PATCH 2/2] zram: support deflate-specific params Date: Wed, 14 May 2025 11:47:51 +0900 Message-ID: <20250514024825.1745489-3-senozhatsky@chromium.org> X-Mailer: git-send-email 2.49.0.1045.g170613ef41-goog In-Reply-To: <20250514024825.1745489-1-senozhatsky@chromium.org> References: <20250514024825.1745489-1-senozhatsky@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: payefy8mypa6q8et1tya6wzkphkat4ed X-Rspam-User: X-Rspamd-Queue-Id: 7CEB840002 X-Rspamd-Server: rspam06 X-HE-Tag: 1747190932-151750 X-HE-Meta: U2FsdGVkX18+Yf9WBiVFu5/VNPPHCj2zRbM2P/AsBZ1Mx/LhcfxxHIM6jYLez7nqeaBVtZVMxEwRZD1yB+bbWAzeVT3QteLFCF/v6ufMWvFuSenWZ0PHIKcYTZdkcOYQMAFdy5APmfiwkqUtschPG2kry4+DYZlmwHWqpMtFCeHOcGx5d4opse/YnTlJ20Jf0GOPFEanJ/ZR+IPpJtLQsuxUf4HnZ7qFRXY0t6nvlXhtHv5urhzZattunzFktPacnrk+SllHE9BgMem9T52Ioh+f/tcKNSBu0rdgEEeNahcF0sCPUnhXsiyotpqgzBChL+XMTVO1N3Zqbyx0CFnwJ+d7nERSr0VoyqA6jgedrx6vRelNWMzQbnkOSGk9bwYPLh1Wr7kyK7o+eRtOkEAjUNV8V0AL5qqXG8RxaW3GlQF0fWLLLSEt6jDaivDUrMxKS9j4Z9Uc8UGsL+kMviyqKjlhp8d2wpeg/NlsF46y3yL97gqtNrdEaQycndEOvXDATA9fY0z4LfHIbq/cQ4KI0JZChhsxDOb4eKkDl2/DqdUF6teMizBHoDFVniVmh+rJVgFxN8OXfg7W2G9aSDozBQVC+3XPz7qiU0Xt/WG3J1x73oYug8+AtJbrYaIUB1ODajsU4JBr+IKRCmEe2P6JV/9WtKxEdo1HaneF9aEJS5WyFkG2NTXeM88mzTjSama6hD8Ke5bwnY9SbXD2WuzYoWUz+sz3NnvCwe6HZLYs+lPFk5JWJKUUs32FOE/ZccTX76Aq8rToDnpbwjOxA46W9FhdJ7nsgeBZW9x+ApEPONlHzR/ZvKDg8IyrKmLS/pNHZZXDi6LcTODteXlAjb9Veqmsf1uIVhtvf0EhAIF9tScVnJwJxXwnf3ys6gRIR7C1QdlZ6lq+oAzRexuzuLQlDcV4HsXzrp2By1jhPCvj0jC0yRMJtTlinjDmSjVOw2hLHqM/FmPSDoXPiY00ksn IsheMGOj Ivg0S9clxBogZ+jDvK1FkkHTYVA== 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: Introduce support of algorithm specific parameters in algorithm_params device attribute. The expected format is algorithm.param=value. For starters, add support for deflate.winbits parameter. Signed-off-by: Sergey Senozhatsky --- drivers/block/zram/backend_deflate.c | 10 ++++++---- drivers/block/zram/zcomp.h | 7 +++++++ drivers/block/zram/zram_drv.c | 17 +++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/block/zram/backend_deflate.c b/drivers/block/zram/backend_deflate.c index 4c00b5b6739f..b75016e0e654 100644 --- a/drivers/block/zram/backend_deflate.c +++ b/drivers/block/zram/backend_deflate.c @@ -8,7 +8,7 @@ #include "backend_deflate.h" /* Use the same value as crypto API */ -#define DEFLATE_DEF_WINBITS 11 +#define DEFLATE_DEF_WINBITS (-11) #define DEFLATE_DEF_MEMLEVEL MAX_MEM_LEVEL struct deflate_ctx { @@ -24,6 +24,8 @@ static int deflate_setup_params(struct zcomp_params *params) { if (params->level == ZCOMP_PARAM_NOT_SET) params->level = Z_DEFAULT_COMPRESSION; + if (params->deflate.winbits == ZCOMP_PARAM_NOT_SET) + params->deflate.winbits = DEFLATE_DEF_WINBITS; return 0; } @@ -57,13 +59,13 @@ static int deflate_create(struct zcomp_params *params, struct zcomp_ctx *ctx) return -ENOMEM; ctx->context = zctx; - sz = zlib_deflate_workspacesize(-DEFLATE_DEF_WINBITS, MAX_MEM_LEVEL); + sz = zlib_deflate_workspacesize(params->deflate.winbits, MAX_MEM_LEVEL); zctx->cctx.workspace = vzalloc(sz); if (!zctx->cctx.workspace) goto error; ret = zlib_deflateInit2(&zctx->cctx, params->level, Z_DEFLATED, - -DEFLATE_DEF_WINBITS, DEFLATE_DEF_MEMLEVEL, + params->deflate.winbits, DEFLATE_DEF_MEMLEVEL, Z_DEFAULT_STRATEGY); if (ret != Z_OK) goto error; @@ -73,7 +75,7 @@ static int deflate_create(struct zcomp_params *params, struct zcomp_ctx *ctx) if (!zctx->dctx.workspace) goto error; - ret = zlib_inflateInit2(&zctx->dctx, -DEFLATE_DEF_WINBITS); + ret = zlib_inflateInit2(&zctx->dctx, params->deflate.winbits); if (ret != Z_OK) goto error; diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index cfacdfe9044c..4acffe671a5e 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -7,6 +7,10 @@ #define ZCOMP_PARAM_NOT_SET INT_MIN +struct deflate_params { + s32 winbits; +}; + /* * Immutable driver (backend) parameters. The driver may attach private * data to it (e.g. driver representation of the dictionary, etc.). @@ -17,6 +21,9 @@ struct zcomp_params { void *dict; size_t dict_sz; s32 level; + union { + struct deflate_params deflate; + }; void *drv_data; }; diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index a11b7a6e35f4..54c57103715f 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1277,12 +1277,14 @@ static void comp_params_reset(struct zram *zram, u32 prio) vfree(params->dict); params->level = ZCOMP_PARAM_NOT_SET; + params->deflate.winbits = ZCOMP_PARAM_NOT_SET; params->dict_sz = 0; params->dict = NULL; } static int comp_params_store(struct zram *zram, u32 prio, s32 level, - const char *dict_path) + const char *dict_path, + struct deflate_params *deflate_params) { ssize_t sz = 0; @@ -1300,6 +1302,7 @@ static int comp_params_store(struct zram *zram, u32 prio, s32 level, zram->params[prio].dict_sz = sz; zram->params[prio].level = level; + zram->params[prio].deflate.winbits = deflate_params->winbits; return 0; } @@ -1310,9 +1313,12 @@ static ssize_t algorithm_params_store(struct device *dev, { s32 prio = ZRAM_PRIMARY_COMP, level = ZCOMP_PARAM_NOT_SET; char *args, *param, *val, *algo = NULL, *dict_path = NULL; + struct deflate_params deflate_params; struct zram *zram = dev_to_zram(dev); int ret; + deflate_params.winbits = ZCOMP_PARAM_NOT_SET; + args = skip_spaces(buf); while (*args) { args = next_arg(args, ¶m, &val); @@ -1343,6 +1349,13 @@ static ssize_t algorithm_params_store(struct device *dev, dict_path = val; continue; } + + if (!strcmp(param, "deflate.winbits")) { + ret = kstrtoint(val, 10, &deflate_params.winbits); + if (ret) + return ret; + continue; + } } /* Lookup priority by algorithm name */ @@ -1364,7 +1377,7 @@ static ssize_t algorithm_params_store(struct device *dev, if (prio < ZRAM_PRIMARY_COMP || prio >= ZRAM_MAX_COMPS) return -EINVAL; - ret = comp_params_store(zram, prio, level, dict_path); + ret = comp_params_store(zram, prio, level, dict_path, &deflate_params); return ret ? ret : len; } -- 2.49.0.1045.g170613ef41-goog