linux/drivers/crypto
Heiko Stuebner ac7c8e6b6d crypto: rockchip - fix possible deadlock
Lockdep warns about a possible deadlock resulting from the use of regular
spin_locks:

=================================
[ INFO: inconsistent lock state ]
4.4.0-rc2+ #2724 Not tainted
---------------------------------
inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
ksoftirqd/0/3 [HC0[0]:SC1[1]:HE1:SE0] takes:
(&(&crypto_info->lock)->rlock){+.?...}, at: [<bf14a65c>] rk_crypto_tasklet_cb+0x24/0xb4 [rk_crypto]
{SOFTIRQ-ON-W} state was registered at:
  [<c007f4ac>] lock_acquire+0x178/0x218
  [<c0759bac>] _raw_spin_lock+0x54/0x64
  [<bf14af88>] rk_handle_req+0x7c/0xbc [rk_crypto]
  [<bf14b040>] rk_des_ecb_encrypt+0x2c/0x30 [rk_crypto]
  [<bf14b05c>] rk_aes_ecb_encrypt+0x18/0x1c [rk_crypto]
  [<c028c820>] skcipher_encrypt_ablkcipher+0x64/0x68
  [<c0290770>] __test_skcipher+0x2a8/0x8dc
  [<c0292e94>] test_skcipher+0x38/0xc4
  [<c0292fb0>] alg_test_skcipher+0x90/0xb0
  [<c0292158>] alg_test+0x1e8/0x280
  [<c028f6f4>] cryptomgr_test+0x34/0x54
  [<c004bbe8>] kthread+0xf4/0x10c
  [<c0010010>] ret_from_fork+0x14/0x24
irq event stamp: 10672
hardirqs last  enabled at (10672): [<c002fac8>] tasklet_action+0x48/0x104
hardirqs last disabled at (10671): [<c002faa0>] tasklet_action+0x20/0x104
softirqs last  enabled at (10658): [<c002ef84>] __do_softirq+0x358/0x49c
softirqs last disabled at (10669): [<c002f108>] run_ksoftirqd+0x40/0x80

other info that might help us debug this:
Possible unsafe locking scenario:

    CPU0
    ----
  lock(&(&crypto_info->lock)->rlock);
  <Interrupt>
    lock(&(&crypto_info->lock)->rlock);

 *** DEADLOCK ***

Fix this by moving to irq-disabling spinlocks.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2015-12-04 22:21:48 +08:00
..
amcc crypto: amcc - check return value of sg_nents_for_len 2015-11-17 22:00:38 +08:00
caam crypto: caam - check return value of sg_nents_for_len 2015-11-17 22:00:38 +08:00
ccp Merge branch 'acpi-pci' 2015-11-07 01:30:10 +01:00
marvell crypto: marvell - check return value of sg_nents_for_len 2015-11-17 22:00:35 +08:00
nx crypto: nx - use of_property_read_u32() 2015-11-24 18:19:21 +08:00
qat crypto: qat - fix typo in clean-files 2015-11-24 18:19:18 +08:00
qce crypto: qce - check return value of sg_nents_for_len 2015-11-17 22:00:36 +08:00
rockchip crypto: rockchip - fix possible deadlock 2015-12-04 22:21:48 +08:00
sunxi-ss crypto: sun4i-ss - add missing statesize 2015-11-17 22:00:42 +08:00
ux500 crypto: ux500 - Use devm_xxx() managed function 2015-10-14 22:23:38 +08:00
vmx crypto: vmx - Fixing opcode issue 2015-08-24 22:07:43 +08:00
atmel-aes-regs.h crypto: atmel - add Atmel AES driver 2012-07-11 11:07:40 +08:00
atmel-aes.c crypto: atmel - fix 64-bit warnings 2015-11-23 20:55:52 +08:00
atmel-sha-regs.h crypto: atmel-sha - add support for latest release of the IP (0x410) 2013-03-10 16:46:42 +08:00
atmel-sha.c crypto: atmel - use devm_xxx() managed function 2015-10-14 22:23:38 +08:00
atmel-tdes-regs.h crypto: atmel-tdes - add support for latest release of the IP (0x700) 2013-03-10 16:46:42 +08:00
atmel-tdes.c crypto: atmel - use devm_xxx() managed function 2015-10-14 22:23:38 +08:00
bfin_crc.c crypto: bfin_crc - replace sg_count by sg_nents 2015-09-21 23:05:53 +08:00
bfin_crc.h crypto: bfin_crc - access crc registers by readl and writel functions 2014-04-16 20:40:15 +08:00
geode-aes.c crypto: geode - Don't use tfm->__crt_alg->cra_name directly 2014-05-22 21:03:13 +08:00
geode-aes.h crypto: geode - Consistently use AES_KEYSIZE_128 2014-05-22 21:03:12 +08:00
hifn_795x.c crypto: hifn_795x - fix coding style 2015-11-17 21:58:35 +08:00
img-hash.c crypto: img-hash - fix spelling mistake in dev_err error message 2015-08-04 17:41:31 +08:00
ixp4xx_crypto.c crypto: ixp4xx - Delete unnecessary checks before the function call "dma_pool_destroy" 2015-11-17 22:00:41 +08:00
Kconfig crypto: rockchip - add crypto driver for rk3288 2015-11-27 21:19:32 +08:00
Makefile crypto: rockchip - add crypto driver for rk3288 2015-11-27 21:19:32 +08:00
mv_cesa.c crypto: marvell/cesa - another fix up for of_get_named_gen_pool() rename 2015-07-03 11:37:02 -07:00
mv_cesa.h crypto: mv_cesa - Add missing #define 2014-08-29 21:46:36 +08:00
mxs-dcp.c crypto: mxs-dcp - fix type of ret for wait_for_completion_timeout 2015-02-28 23:31:36 +13:00
n2_asm.S
n2_core.c crypto: n2 - set array of const as const 2015-10-15 21:05:20 +08:00
n2_core.h
omap-aes.c crypto: omap-aes - Use BIT() macro 2015-07-08 15:18:46 +08:00
omap-des.c crypto: omap-des - Fix unmapping of dma channels 2015-07-06 16:20:37 +08:00
omap-sham.c crypto/omap-sham: remove an open coded access to ->page_link 2015-08-17 08:12:57 -06:00
padlock-aes.c crypto: padlock-aes - use offset_in_page macro 2015-11-24 18:19:19 +08:00
padlock-sha.c x86/fpu: Rename i387.h to fpu/api.h 2015-05-19 15:47:30 +02:00
picoxcell_crypto_regs.h crypto: picoxcell - add support for the picoxcell crypto engines 2011-02-21 22:42:40 +11:00
picoxcell_crypto.c crypto: picoxcell - set [src|dst]_nents and nents as signed int 2015-11-23 20:55:55 +08:00
s5p-sss.c crypto: drop owner assignment from platform_drivers 2014-10-20 16:20:25 +02:00
sahara.c crypto: sahara - set nb_[in|out]_sg as signed int 2015-11-23 20:55:55 +08:00
talitos.c crypto: talitos - check return value of sg_nents_for_len 2015-11-17 22:00:36 +08:00
talitos.h crypto: talitos - Prevent panic in probe error path 2015-08-10 23:19:05 +08:00