[PATCH xf86-video-ati] Use xorg_list_append for the DRM event list

Michel Dänzer michel at daenzer.net
Wed Aug 16 09:35:57 UTC 2017


From: Michel Dänzer <michel.daenzer at amd.com>

We were adding entries at the start of the list, i.e. the list was
ordered from most recently added to least recently added. However, the
corresponding DRM events are generally expected to arrive in the same
order as they are queued, which means that radeon_drm_queue_alloc would
generally have to traverse the whole list to find the entry
corresponding to an arrived event. Fix this by adding entries at the end
of the list.

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/radeon_drm_queue.c | 2 +-
 src/radeon_list.h      | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/radeon_drm_queue.c b/src/radeon_drm_queue.c
index 31f24350e..37fdafeb9 100644
--- a/src/radeon_drm_queue.c
+++ b/src/radeon_drm_queue.c
@@ -105,7 +105,7 @@ radeon_drm_queue_alloc(xf86CrtcPtr crtc, ClientPtr client,
     e->handler = handler;
     e->abort = abort;
 
-    xorg_list_add(&e->list, &radeon_drm_queue);
+    xorg_list_append(&e->list, &radeon_drm_queue);
 
     return e->seq;
 }
diff --git a/src/radeon_list.h b/src/radeon_list.h
index a0038c96c..f9e4ff73c 100644
--- a/src/radeon_list.h
+++ b/src/radeon_list.h
@@ -35,6 +35,13 @@
 #define xorg_list_del			list_del
 #define xorg_list_for_each_entry	list_for_each_entry
 #define xorg_list_for_each_entry_safe	list_for_each_entry_safe
+
+static inline void
+xorg_list_append(struct list *entry, struct list *head)
+{
+    __list_add(entry, head->prev, head);
+}
+
 #endif
 
 #endif /* _RADEON_LIST_H_ */
-- 
2.14.1



More information about the amd-gfx mailing list