Commit a0ca6ca022ac197e159bb5d22a08e3c3aebb242c
Committed by
Herbert Xu
1 parent
14a8e29cc2
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
crypto: caam - one tasklet per job ring
there is no noticeable benefit for multiple cores to process one job ring's output ring: in fact, we can benefit from cache effects of having the back-half stay on the core that receives a particular ring's interrupts, and further relax general contention and the locking involved with reading outring_used, since tasklets run atomically. Signed-off-by: Kim Phillips <kim.phillips@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Showing 2 changed files with 6 additions and 9 deletions Side-by-side Diff
drivers/crypto/caam/intern.h
... | ... | @@ -43,7 +43,7 @@ |
43 | 43 | struct device *parentdev; /* points back to controller dev */ |
44 | 44 | int ridx; |
45 | 45 | struct caam_job_ring __iomem *rregs; /* JobR's register space */ |
46 | - struct tasklet_struct irqtask[NR_CPUS]; | |
46 | + struct tasklet_struct irqtask; | |
47 | 47 | int irq; /* One per queue */ |
48 | 48 | int assign; /* busy/free */ |
49 | 49 |
drivers/crypto/caam/jr.c
... | ... | @@ -43,7 +43,7 @@ |
43 | 43 | wr_reg32(&jrp->rregs->jrintstatus, irqstate); |
44 | 44 | |
45 | 45 | preempt_disable(); |
46 | - tasklet_schedule(&jrp->irqtask[smp_processor_id()]); | |
46 | + tasklet_schedule(&jrp->irqtask); | |
47 | 47 | preempt_enable(); |
48 | 48 | |
49 | 49 | return IRQ_HANDLED; |
50 | 50 | |
... | ... | @@ -322,11 +322,9 @@ |
322 | 322 | |
323 | 323 | jrp = dev_get_drvdata(dev); |
324 | 324 | |
325 | - /* Connect job ring interrupt handler. */ | |
326 | - for_each_possible_cpu(i) | |
327 | - tasklet_init(&jrp->irqtask[i], caam_jr_dequeue, | |
328 | - (unsigned long)dev); | |
325 | + tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev); | |
329 | 326 | |
327 | + /* Connect job ring interrupt handler. */ | |
330 | 328 | error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED, |
331 | 329 | "caam-jobr", dev); |
332 | 330 | if (error) { |
333 | 331 | |
... | ... | @@ -416,12 +414,11 @@ |
416 | 414 | { |
417 | 415 | struct caam_drv_private_jr *jrp = dev_get_drvdata(dev); |
418 | 416 | dma_addr_t inpbusaddr, outbusaddr; |
419 | - int ret, i; | |
417 | + int ret; | |
420 | 418 | |
421 | 419 | ret = caam_reset_hw_jr(dev); |
422 | 420 | |
423 | - for_each_possible_cpu(i) | |
424 | - tasklet_kill(&jrp->irqtask[i]); | |
421 | + tasklet_kill(&jrp->irqtask); | |
425 | 422 | |
426 | 423 | /* Release interrupt */ |
427 | 424 | free_irq(jrp->irq, dev); |