Patch "dma-buf/sw-sync: Reduce irqsave/irqrestore from known context" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
dma-buf/sw-sync: Reduce irqsave/irqrestore from known context
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
dma-buf-sw-sync-reduce-irqsave-irqrestore-from-known-context.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a6aa8fca4d792c72947e341d7842d2f700534335Mon Sep 17 00:00:00 2001
From: Chris Wilson <[email protected]>
Date: Thu, 29 Jun 2017 13:59:27 +0100
Subject: dma-buf/sw-sync: Reduce irqsave/irqrestore from known context
From: Chris Wilson <[email protected]>
commit a6aa8fca4d792c72947e341d7842d2f700534335 upstream.
If we know the context under which we are called, then we can use the simpler form of spin_lock_irq (saving the save/restore).
--- drivers/dma-buf/sw_sync.c | 15 +++++++++------ drivers/dma-buf/sync_debug.c | 14 ++++++-------- 2 files changed, 15 insertions(+), 14 deletions(-)
drivers/dma-buf/sw_sync.c +9 -6
@@ -135,12 +135,11 @@ static void sync_timeline_put(struct syn*/ static void sync_timeline_signal (struct sync_timeline *obj,unsigned int inc) { -unsigned long flags;struct sync_pt *pt, *next;trace_sync_timeline (obj); -spin_lock_irqsave (&obj->child_list_lock, flags); +spin_lock_irq (&obj->child_list_lock); obj->value += inc;
@@ -150,7 +149,7 @@ static void sync_timeline_signal(structlist_del_init (&pt->active_list); } -spin_unlock_irqrestore (&obj->child_list_lock, flags); +spin_unlock_irq (&obj->child_list_lock); }/**
@@ -167,7 +166,6 @@ static void sync_timeline_signal(structstatic struct sync_pt *sync_pt_create (struct sync_timeline *obj,int size,unsigned int value) { -unsigned long flags;struct sync_pt *pt;if (size <sizeof (*pt))
@@ -177,13 +175,16 @@ static struct sync_pt *sync_pt_create(stif (!pt)return NULL ; -spin_lock_irqsave (&obj->child_list_lock, flags); +spin_lock_irq (&obj->child_list_lock); +sync_timeline_get (obj);fence_init (&pt->base, &timeline_fence_ops, &obj->child_list_lock, obj->context, value);list_add_tail (&pt->child_list, &obj->child_list_head);INIT_LIST_HEAD (&pt->active_list); -spin_unlock_irqrestore (&obj->child_list_lock, flags); + +spin_unlock_irq (&obj->child_list_lock); +return pt; }
@@ -206,9 +207,11 @@ static void timeline_fence_release(strucunsigned long flags;spin_lock_irqsave (fence->lock, flags); +list_del (&pt->child_list);if (!list_empty (&pt->active_list))list_del (&pt->active_list); +spin_unlock_irqrestore (fence->lock, flags);sync_timeline_put (parent);
drivers/dma-buf/sync_debug.c +6 -8
@@ -116,17 +116,16 @@ static void sync_print_fence(struct seq_static void sync_print_obj (struct seq_file *s,struct sync_timeline *obj) {struct list_head *pos; -unsigned long flags;seq_printf (s,"%s: %d\n" , obj->name, obj->value); -spin_lock_irqsave (&obj->child_list_lock, flags); +spin_lock_irq (&obj->child_list_lock);list_for_each (pos, &obj->child_list_head) {struct sync_pt *pt = container_of(pos, struct sync_pt, child_list);sync_print_fence (s, &pt->base, false); } -spin_unlock_irqrestore (&obj->child_list_lock, flags); +spin_unlock_irq (&obj->child_list_lock); } static void sync_print_sync_file(struct seq_file *s,
@@ -149,12 +148,11 @@ static void sync_print_sync_file(structstatic int sync_debugfs_show (struct seq_file *s,void *unused) { -unsigned long flags;struct list_head *pos;seq_puts (s,"objs:\n--------------\n" ); -spin_lock_irqsave (&sync_timeline_list_lock, flags); +spin_lock_irq (&sync_timeline_list_lock);list_for_each (pos, &sync_timeline_list_head) {struct sync_timeline *obj = container_of(pos, struct sync_timeline,
@@ -163,11 +161,11 @@ static int sync_debugfs_show(struct seq_sync_print_obj (s, obj);seq_puts (s,"\n" ); } -spin_unlock_irqrestore (&sync_timeline_list_lock, flags); +spin_unlock_irq (&sync_timeline_list_lock);seq_puts (s,"fences:\n--------------\n" ); -spin_lock_irqsave (&sync_file_list_lock, flags); +spin_lock_irq (&sync_file_list_lock);list_for_each (pos, &sync_file_list_head) {struct sync_file *sync_file = container_of(pos, struct sync_file, sync_file_list);
@@ -175,7 +173,7 @@ static int sync_debugfs_show(struct seq_sync_print_sync_file (s, sync_file);seq_puts (s,"\n" ); } -spin_unlock_irqrestore (&sync_file_list_lock, flags); +spin_unlock_irq (&sync_file_list_lock);return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/dma-buf-sw-sync-fix-the-is-signaled-test-to-handle-u32-wraparound.patch queue-4.9/dma-fence-clear-fence-status-during-dma_fence_init.patch queue-4.9/dma-buf-sw-sync-fix-locking-around-sync_timeline-lists.patch queue-4.9/dma-fence-wrap-querying-the-fence-status.patch queue-4.9/dma-buf-sw_sync-clean-up-list-before-signaling-the-fence.patch queue-4.9/dma-buf-sw-sync-reduce-irqsave-irqrestore-from-known-context.patch queue-4.9/dma-buf-sw_sync-move-timeline_fence_ops-around.patch queue-4.9/dma-buf-sw-sync-prevent-user-overflow-on-timeline-advance.patch queue-4.9/dma-fence-introduce-drm_fence_set_error-helper.patch queue-4.9/dma-buf-sw_sync-force-signal-all-unsignaled-fences-on-dying-timeline.patch queue-4.9/dma-buf-sw-sync-use-an-rbtree-to-sort-fences-in-the-timeline.patch queue-4.9/dma-buf-sw-sync-sync_pt-is-private-and-of-fixed-size.patch queue-4.9/dma-buf-dma-fence-extract-__dma_fence_is_later.patch