• Rob Herring's avatar
    drm/panfrost: Fix sleeping while atomic in panfrost_gem_open · 0a9a4b61
    Rob Herring authored
    We can't hold the mm_lock spinlock as panfrost_mmu_map() can sleep:
    
    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:909
    in_atomic(): 1, irqs_disabled(): 0, pid: 974, name: glmark2-es2-drm
    1 lock held by glmark2-es2-drm/974:
    CPU: 5 PID: 974 Comm: glmark2-es2-drm Tainted: G        W    L    5.3.0-rc1+ #94
    Hardware name: 96boards Rock960 (DT)
    Call trace:
     dump_backtrace+0x0/0x130
     show_stack+0x14/0x20
     dump_stack+0xc4/0x10c
     ___might_sleep+0x158/0x228
     __might_sleep+0x50/0x88
     __mutex_lock+0x58/0x800
     mutex_lock_interruptible_nested+0x1c/0x28
     drm_gem_shmem_get_pages+0x24/0xa0
     drm_gem_shmem_get_pages_sgt+0x48/0xd0
     panfrost_mmu_map+0x38/0xf8 [panfrost]
     panfrost_gem_open+0xc0/0xd8 [panfrost]
     drm_gem_handle_create_tail+0xe8/0x198
     drm_gem_handle_create+0x3c/0x50
     panfrost_gem_create_with_handle+0x70/0xa0 [panfrost]
     panfrost_ioctl_create_bo+0x48/0x80 [panfrost]
     drm_ioctl_kernel+0xb8/0x110
     drm_ioctl+0x244/0x3f0
     do_vfs_ioctl+0xbc/0x910
     ksys_ioctl+0x78/0xa8
     __arm64_sys_ioctl+0x1c/0x28
     el0_svc_common.constprop.0+0x90/0x168
     el0_svc_handler+0x28/0x78
     el0_svc+0x8/0xc
    
    Fixes: a5efb4c9 ("drm/panfrost: Restructure the GEM object creation")
    Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Reviewed-by: default avatarSteven Price <steven.price@arm.com>
    Signed-off-by: default avatarRob Herring <robh@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190819161204.3106-5-robh@kernel.org
    0a9a4b61
panfrost_gem.c 4.76 KB