• Vladimir Murzin's avatar
    iommu/arm-smmu: remove pgtable_page_{c,d}tor() · 93b14135
    Vladimir Murzin authored
    
    
    If split page table lock for PTE tables is enabled (CONFIG_SPLIT_PTLOCK_CPUS
    <=NR_CPUS) pgtable_page_ctor() leads to non-atomic allocation for ptlock with
    a spinlock held, resulting in:
    
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 466 at kernel/locking/lockdep.c:2742 lockdep_trace_alloc+0xd8/0xf4()
    DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags))
    Modules linked in:
    CPU: 0 PID: 466 Comm: dma0chan0-copy0 Not tainted 3.16.0-3d47efb-clean-pl330-dma_test-ve-a15-a32-slr-m
    c-on-3+ #55
    [<80014748>] (unwind_backtrace) from [<80011640>] (show_stack+0x10/0x14)
    [<80011640>] (show_stack) from [<802bf864>] (dump_stack+0x80/0xb4)
    [<802bf864>] (dump_stack) from [<8002385c>] (warn_slowpath_common+0x64/0x88)
    [<8002385c>] (warn_slowpath_common) from [<80023914>] (warn_slowpath_fmt+0x30/0x40)
    [<80023914>] (warn_slowpath_fmt) from [<8005d818>] (lockdep_trace_alloc+0xd8/0xf4)
    [<8005d818>] (lockdep_trace_alloc) from [<800d3d78>] (kmem_cache_alloc+0x24/0x144)
    [<800d3d78>] (kmem_cache_alloc) from [<800bfae4>] (ptlock_alloc+0x18/0x2c)
    [<800bfae4>] (ptlock_alloc) from [<802b1ec0>] (arm_smmu_handle_mapping+0x4c0/0x690)
    [<802b1ec0>] (arm_smmu_handle_mapping) from [<802b0cd8>] (iommu_map+0xe0/0x148)
    [<802b0cd8>] (iommu_map) from [<80019098>] (arm_coherent_iommu_map_page+0x160/0x278)
    [<80019098>] (arm_coherent_iommu_map_page) from [<801f4d78>] (dmatest_func+0x60c/0x1098)
    [<801f4d78>] (dmatest_func) from [<8003f8ac>] (kthread+0xcc/0xe8)
    [<8003f8ac>] (kthread) from [<8000e868>] (ret_from_fork+0x14/0x2c)
    ---[ end trace ce0d27e6f434acf8 ]--
    
    Split page tables lock is not used in the driver. In fact, page tables are
    guarded with domain lock, so remove calls to pgtable_page_{c,d}tor().
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarVladimir Murzin <vladimir.murzin@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    93b14135
arm-smmu.c 51.8 KB