OSDN Git Service

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)
commit6fc4dbcf0276279d488c5fbbfabe94734134f4fa
tree3b7912a87e273ec7be4b8e2306e678c19556bdcb
parent97ac82d9135d989c81268cb0a02d336993b6f9cf
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