Message ID | 20240222081135.173040-2-21cnbao@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Herbert Xu |
Headers | show |
Series | zswap: remove the memcpy if acomp is not sleepable | expand |
On Thu, Feb 22, 2024 at 12:12 AM Barry Song <21cnbao@gmail.com> wrote: > > From: Barry Song <v-songbaohua@oppo.com> > > acomp's users might want to know if acomp is really async to > optimize themselves. One typical user which can benefit from > exposed async stat is zswap. > > In zswap, zsmalloc is the most commonly used allocator for > (and perhaps the only one). For zsmalloc, we cannot sleep > while we map the compressed memory, so we copy it to a > temporary buffer. By knowing the alg won't sleep can help > zswap to avoid the need for a buffer. This shows noticeable > improvement in load/store latency of zswap. > > Signed-off-by: Barry Song <v-songbaohua@oppo.com> > Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Chris Li <chrisl@kernel.org> Chris > --- > include/crypto/acompress.h | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/include/crypto/acompress.h b/include/crypto/acompress.h > index 574cffc90730..80e243611fe2 100644 > --- a/include/crypto/acompress.h > +++ b/include/crypto/acompress.h > @@ -160,6 +160,12 @@ static inline void acomp_request_set_tfm(struct acomp_req *req, > req->base.tfm = crypto_acomp_tfm(tfm); > } > > +static inline bool acomp_is_async(struct crypto_acomp *tfm) > +{ > + return crypto_comp_alg_common(tfm)->base.cra_flags & > + CRYPTO_ALG_ASYNC; > +} > + > static inline struct crypto_acomp *crypto_acomp_reqtfm(struct acomp_req *req) > { > return __crypto_acomp_tfm(req->base.tfm); > -- > 2.34.1 >
diff --git a/include/crypto/acompress.h b/include/crypto/acompress.h index 574cffc90730..80e243611fe2 100644 --- a/include/crypto/acompress.h +++ b/include/crypto/acompress.h @@ -160,6 +160,12 @@ static inline void acomp_request_set_tfm(struct acomp_req *req, req->base.tfm = crypto_acomp_tfm(tfm); } +static inline bool acomp_is_async(struct crypto_acomp *tfm) +{ + return crypto_comp_alg_common(tfm)->base.cra_flags & + CRYPTO_ALG_ASYNC; +} + static inline struct crypto_acomp *crypto_acomp_reqtfm(struct acomp_req *req) { return __crypto_acomp_tfm(req->base.tfm);