• Chuck Ebbert's avatar
    x86: Clear TS in irq_ts_save() when in an atomic section · 0b8c3d5a
    Chuck Ebbert authored
    The dynamic FPU context allocation changes caused the padlock driver
    to generate the below warning. Fix it by masking TS when doing padlock
    encryption operations in an atomic section.
    
    This solves:
    
    BUG: sleeping function called from invalid context at mm/slub.c:1602
    in_atomic(): 1, irqs_disabled(): 0, pid: 82, name: cryptomgr_test
    Pid: 82, comm: cryptomgr_test Not tainted 2.6.29.4-168.test7.fc11.x86_64 #1
    Call Trace:
    [<ffffffff8103ff16>] __might_sleep+0x10b/0x110
    [<ffffffff810cd3b2>] kmem_cache_alloc+0x37/0xf1
    [<ffffffff81018505>] init_fpu+0x49/0x8a
    [<ffffffff81012a83>] math_state_restore+0x3e/0xbc
    [<ffffffff813ac6d0>] do_device_not_available+0x9/0xb
    [<ffffffff810123ab>] device_not_available+0x1b/0x20
    [<ffffffffa001c066>] ? aes_crypt+0x66/0x74 [padlock_aes]
    [<ffffffff8119a51a>] ? blkcipher_walk_next+0x257/0x2e0
    [<ffffffff8119a731>] ? blkcipher_walk_first+0x18e/0x19d
    [<ffffffffa001c1fe>] aes_encrypt+0x9d/0xe5 [padlock_aes]
    [<ffffffffa0027253>] crypt+0x6b/0x114 [xts]
    [<ffffffffa001c161>] ? aes_encrypt+0x0/0xe5 [padlock_aes]
    [<ffffffffa001c161>] ? aes_encrypt+0x0/0xe5 [padlock_aes]
    [<ffffffffa0027390>] encrypt+0x49/0x4b [xts]
    [<ffffffff81199acc>] async_encrypt+0x3c/0x3e
    [<ffffffff8119dafc>] test_skcipher+0x1da/0x658
    [<ffffffff811979c3>] ? crypto_spawn_tfm+0x8e/0xb1
    [<ffffffff8119672d>] ? __crypto_alloc_tfm+0x11b/0x15f
    [<ffffffff811979c3>] ? crypto_spawn_tfm+0x8e/0xb1
    [<ffffffff81199dbe>] ? skcipher_geniv_init+0x2b/0x47
    [<ffffffff8119a905>] ? async_chainiv_init+0x5c/0x61
    [<ffffffff8119dfdd>] alg_test_skcipher+0x63/0x9b
    [<ffffffff8119e1bc>] alg_test+0x12d/0x175
    [<ffffffff8119c488>] cryptomgr_test+0x38/0x54
    [<ffffffff8119c450>] ? cryptomgr_test+0x0/0x54
    [<ffffffff8105c6c9>] kthread+0x4d/0x78
    [<ffffffff8101264a>] child_rip+0xa/0x20
    [<ffffffff81011f67>] ? restore_args+0x0/0x30
    [<ffffffff8105c67c>] ? kthread+0x0/0x78
    [<ffffffff81012640>] ? child_rip+0x0/0x20
    Signed-off-by: default avatarChuck Ebbert <cebbert@redhat.com>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    LKML-Reference: <20090609104050.50158cfe@dhcp-100-2-144.bos.redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    0b8c3d5a
i387.h 10.2 KB