On 21 July 2017 at 13:42, Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> wrote: > On Thu, Jul 20, 2017 at 12:40:00PM +0100, Ard Biesheuvel wrote: >> 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.