Re: [PATCH] crypto: scompress - eliminate percpu scratch buffers
From: Ard Biesheuvel <hidden>
Date: 2017-07-21 13:09:40
On 21 July 2017 at 13:42, Herbert Xu [off-list ref] wrote:
On Thu, Jul 20, 2017 at 12:40:00PM +0100, Ard Biesheuvel wrote:quoted
The scompress code unconditionally allocates 2 per-CPU scratch buffers of 128 KB each, in order to avoid allocation overhead in the async wrapper that encapsulates the synchronous compression algorithm, since it may execute in atomic context.The whole point of pre-allocation is that we cannot allocate 128K (or 64K as it was before scomp) at run-time, and in particular, for IPsec which runs in softirq path. Am I missing something?
Right. And is req->dst guaranteed to be assigned in that case? Because crypto_scomp_sg_alloc() happily allocates pages and kmalloc()s the scatterlist if req->dst == NULL. Is there any way we could make these scratch buffers part of the request structure instead? Or at least defer allocating them until the first call to crypto_scomp_init_tfm()? And on top of that, we should probably only use the per-CPU scratch buffers if CRYPTO_TFM_REQ_MAY_SLEEP is cleared, because in that case, we are not pre-emptible to begin with, and the concern does not apply.