mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto updates from Herbert Xu:
"Here is the crypto update for 4.15:
API:
- Disambiguate EBUSY when queueing crypto request by adding ENOSPC.
This change touches code outside the crypto API.
- Reset settings when empty string is written to rng_current.
Algorithms:
- Add OSCCA SM3 secure hash.
Drivers:
- Remove old mv_cesa driver (replaced by marvell/cesa).
- Enable rfc3686/ecb/cfb/ofb AES in crypto4xx.
- Add ccm/gcm AES in crypto4xx.
- Add support for BCM7278 in iproc-rng200.
- Add hash support on Exynos in s5p-sss.
- Fix fallback-induced error in vmx.
- Fix output IV in atmel-aes.
- Fix empty GCM hash in mediatek.
Others:
- Fix DoS potential in lib/mpi.
- Fix potential out-of-order issues with padata"
* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (162 commits)
lib/mpi: call cond_resched() from mpi_powm() loop
crypto: stm32/hash - Fix return issue on update
crypto: dh - Remove pointless checks for NULL 'p' and 'g'
crypto: qat - Clean up error handling in qat_dh_set_secret()
crypto: dh - Don't permit 'key' or 'g' size longer than 'p'
crypto: dh - Don't permit 'p' to be 0
crypto: dh - Fix double free of ctx->p
hwrng: iproc-rng200 - Add support for BCM7278
dt-bindings: rng: Document BCM7278 RNG200 compatible
crypto: chcr - Replace _manual_ swap with swap macro
crypto: marvell - Add a NULL entry at the end of mv_cesa_plat_id_table[]
hwrng: virtio - Virtio RNG devices need to be re-registered after suspend/resume
crypto: atmel - remove empty functions
crypto: ecdh - remove empty exit()
MAINTAINERS: update maintainer for qat
crypto: caam - remove unused param of ctx_map_to_sec4_sg()
crypto: caam - remove unneeded edesc zeroization
crypto: atmel-aes - Reset the controller before each use
crypto: atmel-aes - properly set IV after {en,de}crypt
hwrng: core - Reset user selected rng by writing "" to rng_current
...
This commit is contained in:
commit
37dc79565c
135 changed files with 5701 additions and 4648 deletions
|
|
@ -131,6 +131,7 @@ int padata_do_parallel(struct padata_instance *pinst,
|
|||
padata->cb_cpu = cb_cpu;
|
||||
|
||||
target_cpu = padata_cpu_hash(pd);
|
||||
padata->cpu = target_cpu;
|
||||
queue = per_cpu_ptr(pd->pqueue, target_cpu);
|
||||
|
||||
spin_lock(&queue->parallel.lock);
|
||||
|
|
@ -275,11 +276,51 @@ static void padata_reorder(struct parallel_data *pd)
|
|||
return;
|
||||
}
|
||||
|
||||
static void invoke_padata_reorder(struct work_struct *work)
|
||||
{
|
||||
struct padata_parallel_queue *pqueue;
|
||||
struct parallel_data *pd;
|
||||
|
||||
local_bh_disable();
|
||||
pqueue = container_of(work, struct padata_parallel_queue, reorder_work);
|
||||
pd = pqueue->pd;
|
||||
padata_reorder(pd);
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
static void padata_reorder_timer(unsigned long arg)
|
||||
{
|
||||
struct parallel_data *pd = (struct parallel_data *)arg;
|
||||
unsigned int weight;
|
||||
int target_cpu, cpu;
|
||||
|
||||
padata_reorder(pd);
|
||||
cpu = get_cpu();
|
||||
|
||||
/* We don't lock pd here to not interfere with parallel processing
|
||||
* padata_reorder() calls on other CPUs. We just need any CPU out of
|
||||
* the cpumask.pcpu set. It would be nice if it's the right one but
|
||||
* it doesn't matter if we're off to the next one by using an outdated
|
||||
* pd->processed value.
|
||||
*/
|
||||
weight = cpumask_weight(pd->cpumask.pcpu);
|
||||
target_cpu = padata_index_to_cpu(pd, pd->processed % weight);
|
||||
|
||||
/* ensure to call the reorder callback on the correct CPU */
|
||||
if (cpu != target_cpu) {
|
||||
struct padata_parallel_queue *pqueue;
|
||||
struct padata_instance *pinst;
|
||||
|
||||
/* The timer function is serialized wrt itself -- no locking
|
||||
* needed.
|
||||
*/
|
||||
pinst = pd->pinst;
|
||||
pqueue = per_cpu_ptr(pd->pqueue, target_cpu);
|
||||
queue_work_on(target_cpu, pinst->wq, &pqueue->reorder_work);
|
||||
} else {
|
||||
padata_reorder(pd);
|
||||
}
|
||||
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
static void padata_serial_worker(struct work_struct *serial_work)
|
||||
|
|
@ -323,10 +364,21 @@ void padata_do_serial(struct padata_priv *padata)
|
|||
int cpu;
|
||||
struct padata_parallel_queue *pqueue;
|
||||
struct parallel_data *pd;
|
||||
int reorder_via_wq = 0;
|
||||
|
||||
pd = padata->pd;
|
||||
|
||||
cpu = get_cpu();
|
||||
|
||||
/* We need to run on the same CPU padata_do_parallel(.., padata, ..)
|
||||
* was called on -- or, at least, enqueue the padata object into the
|
||||
* correct per-cpu queue.
|
||||
*/
|
||||
if (cpu != padata->cpu) {
|
||||
reorder_via_wq = 1;
|
||||
cpu = padata->cpu;
|
||||
}
|
||||
|
||||
pqueue = per_cpu_ptr(pd->pqueue, cpu);
|
||||
|
||||
spin_lock(&pqueue->reorder.lock);
|
||||
|
|
@ -336,7 +388,13 @@ void padata_do_serial(struct padata_priv *padata)
|
|||
|
||||
put_cpu();
|
||||
|
||||
padata_reorder(pd);
|
||||
/* If we're running on the wrong CPU, call padata_reorder() via a
|
||||
* kernel worker.
|
||||
*/
|
||||
if (reorder_via_wq)
|
||||
queue_work_on(cpu, pd->pinst->wq, &pqueue->reorder_work);
|
||||
else
|
||||
padata_reorder(pd);
|
||||
}
|
||||
EXPORT_SYMBOL(padata_do_serial);
|
||||
|
||||
|
|
@ -384,8 +442,14 @@ static void padata_init_pqueues(struct parallel_data *pd)
|
|||
struct padata_parallel_queue *pqueue;
|
||||
|
||||
cpu_index = 0;
|
||||
for_each_cpu(cpu, pd->cpumask.pcpu) {
|
||||
for_each_possible_cpu(cpu) {
|
||||
pqueue = per_cpu_ptr(pd->pqueue, cpu);
|
||||
|
||||
if (!cpumask_test_cpu(cpu, pd->cpumask.pcpu)) {
|
||||
pqueue->cpu_index = -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
pqueue->pd = pd;
|
||||
pqueue->cpu_index = cpu_index;
|
||||
cpu_index++;
|
||||
|
|
@ -393,6 +457,7 @@ static void padata_init_pqueues(struct parallel_data *pd)
|
|||
__padata_list_init(&pqueue->reorder);
|
||||
__padata_list_init(&pqueue->parallel);
|
||||
INIT_WORK(&pqueue->work, padata_parallel_worker);
|
||||
INIT_WORK(&pqueue->reorder_work, invoke_padata_reorder);
|
||||
atomic_set(&pqueue->num_obj, 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue