summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-08-18 17:22:12 +0900
committerMichel Dänzer <michel@daenzer.net>2017-08-22 18:35:00 +0900
commit828fb44cf953f78bd65d8f391bdabe2b1b3d53ae (patch)
treeeb8b200217b44f355f3930e4618965735171dab9
parent22740f86d028cdd0f556543df7444516a86f923b (diff)
Use xorg_list_append for the DRM event list
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 amdgpu_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. (Ported from radeon commit 3e24770b1b472fc15df56d06f5f04778c9db63dd) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/amdgpu_drm_queue.c2
-rw-r--r--src/amdgpu_list.h7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/amdgpu_drm_queue.c b/src/amdgpu_drm_queue.c
index e8810fd..eb3ca63 100644
--- a/src/amdgpu_drm_queue.c
+++ b/src/amdgpu_drm_queue.c
@@ -105,7 +105,7 @@ amdgpu_drm_queue_alloc(xf86CrtcPtr crtc, ClientPtr client,
e->handler = handler;
e->abort = abort;
- xorg_list_add(&e->list, &amdgpu_drm_queue);
+ xorg_list_append(&e->list, &amdgpu_drm_queue);
return e->seq;
}
diff --git a/src/amdgpu_list.h b/src/amdgpu_list.h
index a2b1d3c..eb28835 100644
--- a/src/amdgpu_list.h
+++ b/src/amdgpu_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 /* _AMDGPU_LIST_H_ */