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 5E466C3ABD9 for ; Wed, 14 May 2025 10:58:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFDE56B0130; Wed, 14 May 2025 06:58:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D84E86B0131; Wed, 14 May 2025 06:58:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BFE586B0132; Wed, 14 May 2025 06:58:54 -0400 (EDT) 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 9E52F6B0130 for ; Wed, 14 May 2025 06:58:54 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C9ED71602C3 for ; Wed, 14 May 2025 10:58:54 +0000 (UTC) X-FDA: 83441215788.12.A1A834C Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf16.hostedemail.com (Postfix) with ESMTP id 8C5E1180007 for ; Wed, 14 May 2025 10:58:52 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=ni8Xan43; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf16.hostedemail.com: domain of zaslonko@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=zaslonko@linux.ibm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747220332; a=rsa-sha256; cv=none; b=s65D7yb0CU8vbTCdERKIPjkgq8H4t+tjnZENs/LT4TYH61g45vYhQrNRwCSQB0ACAQ22hq b89urzpyfh98KFelh5rm6KGZnJdcbMsLTN1yexEqs0ANhf5gM61vR7JSxA9Gov8D3wloVT 1jLgVrvKJYIfqDT5eG99p655emU7aPk= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=ni8Xan43; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf16.hostedemail.com: domain of zaslonko@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=zaslonko@linux.ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747220332; 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=BetRiIZTQ7bdSxfWgGALXL5bpIbRUZUx65iTjrbnDlM=; b=z+Uxq+XZpa03VoGjU8pcgDjyYaDyvRQjAQ4RLrMqs3EyR7eJb0VlI23XtFHLUH8nRfSNUm 2nsJ0lYErmfJxhpp+0TH8sxosZptaki+acc02OVzgkz60OApXX1sJub8aePfBbyaVTACNX tZgdGgOStofiZOYgPtaEuPksxYJRypM= Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54E6IOpn026361; Wed, 14 May 2025 10:58:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=BetRiI ZTQ7bdSxfWgGALXL5bpIbRUZUx65iTjrbnDlM=; b=ni8Xan43Ox8RyB5clmk2bA u9uqxqODZltxKqtiQvuuOHjIRqV/RkTpFRXu0wO6GEZdcxnoDRQLwc3e+q2OhJtS Z9Ggc20/8r/h1BWxAs03kf/7CWMY6+CaqtcWMQO5vzlA3Ef7yv0c6Un58RJ/Ctff KURlWmkQ2RWq/hjxLCqXPZ9lZOpyri4mapfewgvf10VJJe/vPgZgYNMKWLEd9Q0G YaSq9P36l6yTaARhKMbwzMf2i9PNVv67xb5WP+N369BhvcNlzGYo9JKADDxo61Ph 7vGwHJ5kU8ynF8DPIVzFF1RAPZxvjMfISsngoN8V4ot0JSd91oEVMRSl0TqXkwzQ == Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46mnst18gg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 14 May 2025 10:58:48 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54EA5JVB015329; Wed, 14 May 2025 10:58:47 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 46mbfpurn3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 14 May 2025 10:58:47 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54EAwkjh28836458 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 14 May 2025 10:58:46 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5B24F5804B; Wed, 14 May 2025 10:58:46 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E3B1658055; Wed, 14 May 2025 10:58:44 +0000 (GMT) Received: from [9.111.92.18] (unknown [9.111.92.18]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTPS; Wed, 14 May 2025 10:58:44 +0000 (GMT) Message-ID: Date: Wed, 14 May 2025 12:58:44 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] zram: support deflate-specific params To: Sergey Senozhatsky , Andrew Morton Cc: Minchan Kim , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Heiko Carstens , Ilya Leoshkevich References: <20250514024825.1745489-1-senozhatsky@chromium.org> <20250514024825.1745489-3-senozhatsky@chromium.org> Content-Language: en-US From: Zaslonko Mikhail In-Reply-To: <20250514024825.1745489-3-senozhatsky@chromium.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: L_ETc4ufNI1v3IPanPc7xG0qTfvH269h X-Authority-Analysis: v=2.4 cv=V+590fni c=1 sm=1 tr=0 ts=68247768 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=VnNF1IyMAAAA:8 a=cm27Pg_UAAAA:8 a=mYzGZE5f00aBUjGx16gA:9 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: L_ETc4ufNI1v3IPanPc7xG0qTfvH269h X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTE0MDA5MyBTYWx0ZWRfXyfTQETzYEIYv 3U66ROmOY7GI+ddWKXybCol7oktWJslIPJcwQWxHbmX8VqoqkKX6FaokbhuU8j8SlmHrSdjWCK6 kgL70r3JpnLCybnxW08c7G8ulehamSC4yraVz1M5TN/GqWKVahVRhLRUjjdVWqFxgNLEHHj5VwC I/qeLwNUunFPRN34oZGu13L5RTilM4uWJqwEXzYL9+FH1p7EX19XiPJW1yoJiILVtu58ij6bnLk V8d3ftxqKCG2UzN3iGrZGR/AV/HE3SEaHNXV3r2KClHRaCZJAFCxalP+9QQGVatNTvkIGGKkqGv Wvhl612g9OQoAFJcun+nDhKJgS45XnIeZJDWurXs/1+Uch/Gz3AlbULmyeJ6F/px1iyU8uleDbv ZuWhwmj83/8ycdWJL2MM/FOyEMoX9ccykV/Ne+5wDyHGJaIgCU/ww3gYssruT9DhaDGDqW/b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-14_03,2025-05-14_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 mlxlogscore=999 lowpriorityscore=0 bulkscore=0 suspectscore=0 impostorscore=0 malwarescore=0 phishscore=0 adultscore=0 clxscore=1011 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505070000 definitions=main-2505140093 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 8C5E1180007 X-Rspam-User: X-Stat-Signature: yw3tzk43ubt4mybtskidajjzrk6zb1u4 X-HE-Tag: 1747220332-923319 X-HE-Meta: U2FsdGVkX1/We+bZe66Sdb2bkrSGtAf14KpXZNAro5kW5ZzNg8XEVnQRFS3SIjis6zESDfYh4H2hwqb0B5t/ESefq5j6g02Zej/VsUsDYM1aB/pP460bKa7L4GY8IC64z5EOg4OvgMgiXypjftG3y7rrTnmbRiZmQf46D6OVVTsFi4BsB5JUXLpV3HaTR6eG4mrJzsl940ii3x8ELH8m59WsmP2M1+lBZWKa5Ga3iFjW+dg8dL/mvfr6ewnTVHSMNPPwbnNF/K9c4CncdrbFcGN+eL7ljiMc/5/PfTkuNLj4LsQaZuxrsVqDe3qQNvMk+icMiHsCSEyhumlf5KMpUwUhzQv6wbA9lccStgwB2bQti8edeiQrFL1q9WKLEUeAoUzc4NoX9voG6Ut+OLyBCBdfztjFe3jdgeRoNSJ6CSXeg7ZepNu9LHbrx1ouLkGNAjrrf/NS94vNFEbPdVEur469sZ+rcBZMiRSR1EBHfosWPa4OX5U+q2X8M4J4I09ewgJWId0D9OJ8bV1kS9Ax3MhpOi4C44n+sbkTXdBbMYX9EKLBQn8TzJ85V1swheK+0a3kL28O8dlzsan1j3Sa6AMxCCfVtACBvNV7ZgAtIYnO3rpojgT9j6H8YbgddosG9T65GpZ1cz/IO7awBrDuaOCNi9NW7wwlLFaHjfTQ0ACwdpderV13Q1J5v8awd3Eo3hIJzXaWG8AFiubgKubc0TddHdFxCAKerNndbz63rF+ZCWVcx5ftnykIYBdrpsEzyROiB8glQkawWZw23nCODUaR53FMZ/51Jh1O62awpiUUb6u9gX1nUkw5tLiu1L8oi8y506YRl8gdsBvqizVEL66gerdsfur4waZnHtW1kKM0AuPzal0IwCVyzcacxTZDSi///YuQ3gvszjAYDiQ/SONwrzQ1TE+dNOZZ0iuJjNc02Dq/Y4lc9dA14ec5NwsP+sfNZVHt3kM= 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: Looks good to me. Just a minor comment. If we intend to use raw deflate only, like we do now (no zlib header or trailer for the compressed data), we should probably change deflate.winbits to unsigned and pass '-deflate.winbits' to zlib_deflateInit2(). Also, here is another patch suggestion from my side on top of this one. Let me know what you think. ---8<--- zram: Utilize s390 hardware deflate acceleration for zram Utilize s390 hardware deflate acceleration for zram deflate compression by default when the facility is available. Signed-off-by: Mikhail Zaslonko diff --git a/drivers/block/zram/backend_deflate.c b/drivers/block/zram/backend_deflate.c index b75016e0e654..5bfc57522e3a 100644 --- a/drivers/block/zram/backend_deflate.c +++ b/drivers/block/zram/backend_deflate.c @@ -22,10 +22,23 @@ static void deflate_release_params(struct zcomp_params *params) 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; + /* + * In case of s390 zlib hardware support available, + * use maximum window size and level one as default compression + * parameters in order to utilize hardware deflate acceleration. + */ + if (params->level == ZCOMP_PARAM_NOT_SET) { + if (zlib_deflate_dfltcc_enabled()) + params->level = Z_BEST_SPEED; + else + params->level = Z_DEFAULT_COMPRESSION; + } + if (params->deflate.winbits == ZCOMP_PARAM_NOT_SET) { + if (zlib_deflate_dfltcc_enabled()) + params->deflate.winbits = -MAX_WBITS; + else + params->deflate.winbits = DEFLATE_DEF_WINBITS; + } return 0; } On 14.05.2025 04:47, Sergey Senozhatsky wrote: > 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; > } >