use GFP_ATOMIC to allocate crypt_virt BUG: sleeping function called from invalid context at mm/page_alloc.c:1470 in_atomic(): 0, irqs_disabled(): 128, pid: 1376, name: cryptomgr_test 1 lock held by cryptomgr_test/1376: #0: (&desc_lock){....}, at: [<bf147050>] get_crypt_desc+0x14/0xe8 [ixp4xx_crypto] [<c0028954>] (dump_stack+0x0/0x14) from [<c0030f2c>] (__might_sleep+0xcc/0xe8) [<c0030e60>] (__might_sleep+0x0/0xe8) from [<c00676e4>] (__alloc_pages_internal+0xa4/0x430) r4:000000d0 [<c0067640>] (__alloc_pages_internal+0x0/0x430) from [<c0029ea8>] (__dma_alloc+0x180/0x3e8) [<c0029d28>] (__dma_alloc+0x0/0x3e8) from [<c002a198>] (dma_alloc_coherent+0x58/0x64) [<c002a140>] (dma_alloc_coherent+0x0/0x64) from [<bf147078>] (get_crypt_desc+0x3c/0xe8 [ixp4xx_crypto]) r7:c3bc3ce8 r6:c3bc3cc0 r5:20000013 r4:bf14a81c [<bf14703c>] (get_crypt_desc+0x0/0xe8 [ixp4xx_crypto]) from [<bf147788>] (ablk_perform+0x68/0x248 [ixp4xx_crypto]) r7:c3bc3ce8 r6:c3bc3cc0 r5:c2cefc2c r4:00000000 [<bf147720>] (ablk_perform+0x0/0x248 [ixp4xx_crypto]) from [<bf1479f0>] (ablk_encrypt+0x14/0x18 [ixp4xx_crypto]) [<bf1479dc>] (ablk_encrypt+0x0/0x18 [ixp4xx_crypto]) from [<c012bf4c>] (test_skcipher+0x1bc/0x668) [<c012bd90>] (test_skcipher+0x0/0x668) from [<c012d428>] (alg_test_skcipher+0x60/0xa0) [<c012d3c8>] (alg_test_skcipher+0x0/0xa0) from [<c012ce84>] (alg_test+0x128/0x160) r7:00000000 r6:00000286 r5:c39ddd80 r4:c39dddc0 [<c012cd5c>] (alg_test+0x0/0x160) from [<c012bb0c>] (cryptomgr_test+0x38/0x58) [<c012bad4>] (cryptomgr_test+0x0/0x58) from [<c004bc7c>] (kthread+0x58/0x90) r4:c2e38000 [<c004bc24>] (kthread+0x0/0x90) from [<c0039ed4>] (do_exit+0x0/0x6d0) r6:00000000 r5:00000000 r4:00000000 Note this is somewhat hard to reproduce, but can be reproduced under memory pressure when you first initialize ixp4xx_crypto. Signed-off-by: Karl Hiramoto <karl@xxxxxxxxxxxx> --- drivers/crypto/ixp4xx_crypto.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c index 6c6656d..564d68f 100644 --- a/drivers/crypto/ixp4xx_crypto.c +++ b/drivers/crypto/ixp4xx_crypto.c @@ -246,7 +246,7 @@ static int setup_crypt_desc(void) BUILD_BUG_ON(sizeof(struct crypt_ctl) != 64); crypt_virt = dma_alloc_coherent(dev, NPE_QLEN * sizeof(struct crypt_ctl), - &crypt_phys, GFP_KERNEL); + &crypt_phys, GFP_ATOMIC); if (!crypt_virt) return -ENOMEM; memset(crypt_virt, 0, NPE_QLEN * sizeof(struct crypt_ctl)); -- 1.6.4.4 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html