]> git.baikalelectronics.ru Git - kernel.git/commit
padata: Replace delayed timer with immediate workqueue in padata_reorder
authorHerbert Xu <herbert@gondor.apana.org.au>
Thu, 18 Jul 2019 15:01:46 +0000 (23:01 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 27 Jul 2019 11:08:36 +0000 (21:08 +1000)
commit013787c5e9d793fefab815807b952f91117dba70
tree3b7912a87e273ec7be4b8e2306e678c19556bdcb
parentafe9af2f9eaf4b8ce4f3222176e355338a50958b
padata: Replace delayed timer with immediate workqueue in padata_reorder

The function padata_reorder will use a timer when it cannot progress
while completed jobs are outstanding (pd->reorder_objects > 0).  This
is suboptimal as if we do end up using the timer then it would have
introduced a gratuitous delay of one second.

In fact we can easily distinguish between whether completed jobs
are outstanding and whether we can make progress.  All we have to
do is look at the next pqueue list.

This patch does that by replacing pd->processed with pd->cpu so
that the next pqueue is more accessible.

A work queue is used instead of the original try_again to avoid
hogging the CPU.

Note that we don't bother removing the work queue in
padata_flush_queues because the whole premise is broken.  You
cannot flush async crypto requests so it makes no sense to even
try.  A subsequent patch will fix it by replacing it with a ref
counting scheme.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
include/linux/padata.h
kernel/padata.c