drm: fix deadlock of syncobj v6
v2: add a mutex between sync_cb execution and free. v3: clearly separating the roles for pt_lock and cb_mutex (Chris) v4: the cb_mutex should be taken outside of the pt_lock around this if() block. (Chris) v5: fix a corner case v6: tidy drm_syncobj_fence_get_or_add_callback up. (Chris) Tested by syncobj_basic and syncobj_wait of igt. Signed-off-by: Chunming Zhou <david1.zhou@amd.com> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Christian König <christian.koenig@amd.com> Cc: intel-gfx@lists.freedesktop.org Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.kernel.org/patch/10652893/
This commit is contained in:
parent
3d42f1ddc4
commit
43cf1fc0e2
2 changed files with 95 additions and 97 deletions
|
|
@ -75,9 +75,13 @@ struct drm_syncobj {
|
|||
*/
|
||||
struct list_head cb_list;
|
||||
/**
|
||||
* @lock: Protects syncobj list and write-locks &fence.
|
||||
* @pt_lock: Protects pt list.
|
||||
*/
|
||||
spinlock_t lock;
|
||||
spinlock_t pt_lock;
|
||||
/**
|
||||
* @cb_mutex: Protects syncobj cb list.
|
||||
*/
|
||||
struct mutex cb_mutex;
|
||||
/**
|
||||
* @file: A file backing for this syncobj.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue