+ crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep.patch added to mm-unstable branch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     Subject: crypto: introduce acomp_is_sleepable to expose if comp drivers might sleep
has been added to the -mm mm-unstable branch.  Its filename is
     crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep.patch

This patch will shortly appear at
     https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep.patch

This patch will later appear in the mm-unstable branch at
    git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Before you just go and hit "reply", please:
   a) Consider who else should be cc'ed
   b) Prefer to cc a suitable mailing list as well
   c) Ideally: find the original patch on the mailing list and do a
      reply-to-all to that, adding suitable additional cc's

*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***

The -mm tree is included into linux-next via the mm-everything
branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there every 2-3 working days

------------------------------------------------------
From: Barry Song <v-songbaohua@xxxxxxxx>
Subject: crypto: introduce acomp_is_sleepable to expose if comp drivers might sleep
Date: Sat, 17 Feb 2024 17:51:00 +1300

Patch series "mm/zswap & crypto/compress: remove a couple of memcpy", v3.

The patchset removes a couple of memcpy in zswap and crypto to improve
zswap's performance.

Thanks for Chengming Zhou's test and perf data.
Quote from Chengming,
 I just tested these three patches on my server, found improvement in the
 kernel build testcase on a tmpfs with zswap (lz4 + zsmalloc) enabled.
 
         mm-stable 501a06fe8e4c  patched
 real    1m38.028s               1m32.317s
 user    19m11.482s              18m39.439s
 sys     19m26.445s              17m5.646s


This patch (of 3):

Almost all CPU-based compressors/decompressors are actually synchronous
though they support acomp APIs.  While some hardware has hardware-based
accelerators to offload CPU's work such as hisilicon and intel/qat/, their
drivers are working in async mode.  Letting acomp's users know exactly if
the acomp is really async will help users know if the compression and
decompression procedure can sleep.

Generally speaking, async and sleepable are semantically similar but not
equal.  But for compress drivers, they are actually equal at least due to
the below facts.

Firstly, scompress drivers - crypto/deflate.c, lz4.c, zstd.c, lzo.c etc
have no sleep.  Secondly, zRAM has been using these scompress drivers for
years in atomic contexts, and never worried those drivers going to sleep.

Link: https://lkml.kernel.org/r/20240217045102.55339-1-21cnbao@xxxxxxxxx
Link: https://lkml.kernel.org/r/20240217045102.55339-2-21cnbao@xxxxxxxxx
Signed-off-by: Barry Song <v-songbaohua@xxxxxxxx>
Tested-by: Chengming Zhou <zhouchengming@xxxxxxxxxxxxx>
Cc: Barry Song <v-songbaohua@xxxxxxxx>
Cc: Chris Li <chrisl@xxxxxxxxxx>
Cc: Dan Streetman <ddstreet@xxxxxxxx>
Cc: David S. Miller <davem@xxxxxxxxxxxxx>
Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
Cc: Nhat Pham <nphamcs@xxxxxxxxx>
Cc: Seth Jennings <sjenning@xxxxxxxxxx>
Cc: Vitaly Wool <vitaly.wool@xxxxxxxxxxxx>
Cc: Yosry Ahmed <yosryahmed@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 crypto/acompress.c         |    8 ++++++++
 include/crypto/acompress.h |    9 +++++++++
 2 files changed, 17 insertions(+)

--- a/crypto/acompress.c~crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep
+++ a/crypto/acompress.c
@@ -152,6 +152,14 @@ struct crypto_acomp *crypto_alloc_acomp_
 }
 EXPORT_SYMBOL_GPL(crypto_alloc_acomp_node);
 
+bool acomp_is_sleepable(struct crypto_acomp *acomp)
+{
+	struct crypto_tfm *tfm = crypto_acomp_tfm(acomp);
+
+	return tfm->__crt_alg->cra_type == &crypto_acomp_type;
+}
+EXPORT_SYMBOL_GPL(acomp_is_sleepable);
+
 struct acomp_req *acomp_request_alloc(struct crypto_acomp *acomp)
 {
 	struct crypto_tfm *tfm = crypto_acomp_tfm(acomp);
--- a/include/crypto/acompress.h~crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep
+++ a/include/crypto/acompress.h
@@ -205,6 +205,15 @@ struct acomp_req *acomp_request_alloc(st
 void acomp_request_free(struct acomp_req *req);
 
 /**
+ * acomp_is_sleepable() -- check if an acomp is sleepable
+ *
+ * @tfm:	ACOMPRESS tfm handle allocated with crypto_alloc_acomp()
+ *
+ * Return:	true if the acomp is sleepable, otherwise, false
+ */
+bool acomp_is_sleepable(struct crypto_acomp *tfm);
+
+/**
  * acomp_request_set_callback() -- Sets an asynchronous callback
  *
  * Callback will be called when an asynchronous operation on a given
_

Patches currently in -mm which might be from v-songbaohua@xxxxxxxx are

zram-do-not-allocate-physically-contiguous-strm-buffers.patch
crypto-introduce-acomp_is_sleepable-to-expose-if-comp-drivers-might-sleep.patch
mm-zswap-remove-the-memcpy-if-acomp-is-not-sleepable.patch
crypto-scompress-remove-memcpy-if-sg_nents-is-1.patch





[Index of Archives]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux