[PATCH] drm/atomic-helpers: Clear up cleanup_done a bit

Daniel Vetter daniel.vetter at ffwll.ch
Wed Jun 15 10:08:29 UTC 2016


It's not obvious at first sight that this is a fastpath, make that
clearer with a goto. Fallout from a discussion with Liviu on irc.

Cc: Liviu.Dudau at arm.com
Acked-by: Liviu.Dudau at arm.com
Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
---
 .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h  |  4 ++--
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h              |  3 ---
 drivers/gpu/drm/drm_atomic_helper.c                |  8 +++-----
 include/drm/drm_crtc.h                             | 23 ++++------------------
 4 files changed, 9 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
index ec4036a09f3e..a625b9137da2 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
@@ -187,12 +187,12 @@ int init_pipelines(struct device_queue_manager *dqm,
 unsigned int get_first_pipe(struct device_queue_manager *dqm);
 unsigned int get_pipes_num(struct device_queue_manager *dqm);
 
-extern inline unsigned int get_sh_mem_bases_32(struct kfd_process_device *pdd)
+static inline unsigned int get_sh_mem_bases_32(struct kfd_process_device *pdd)
 {
 	return (pdd->lds_base >> 16) & 0xFF;
 }
 
-extern inline unsigned int
+static inline unsigned int
 get_sh_mem_bases_nybble_64(struct kfd_process_device *pdd)
 {
 	return (pdd->lds_base >> 60) & 0x0E;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index d0d5f4baf72d..80113c335966 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -617,10 +617,7 @@ int kgd2kfd_resume(struct kfd_dev *kfd);
 int kfd_init_apertures(struct kfd_process *process);
 
 /* Queue Context Management */
-inline uint32_t lower_32(uint64_t x);
-inline uint32_t upper_32(uint64_t x);
 struct cik_sdma_rlc_registers *get_sdma_mqd(void *mqd);
-inline uint32_t get_sdma_base_addr(struct cik_sdma_rlc_registers *m);
 
 int init_queue(struct queue **q, struct queue_properties properties);
 void uninit_queue(struct queue *q);
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 716aa535eb98..0556c95b7ddb 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1579,11 +1579,8 @@ void drm_atomic_helper_commit_cleanup_done(struct drm_atomic_state *state)
 		/* commit_list borrows our reference, need to remove before we
 		 * clean up our drm_atomic_state. But only after it actually
 		 * completed, otherwise subsequent commits won't stall properly. */
-		if (try_wait_for_completion(&commit->flip_done)) {
-			list_del(&commit->commit_entry);
-			spin_unlock(&crtc->commit_lock);
-			continue;
-		}
+		if (try_wait_for_completion(&commit->flip_done))
+			goto del_commit:
 
 		spin_unlock(&crtc->commit_lock);
 
@@ -1597,6 +1594,7 @@ void drm_atomic_helper_commit_cleanup_done(struct drm_atomic_state *state)
 				  crtc->base.id, crtc->name);
 
 		spin_lock(&crtc->commit_lock);
+del_commit:
 		list_del(&commit->commit_entry);
 		spin_unlock(&crtc->commit_lock);
 	}
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 3c84ddc7e4c8..a39e1f17a20e 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -2820,29 +2820,14 @@ static inline void drm_connector_unreference(struct drm_connector *connector)
 #define drm_for_each_crtc(crtc, dev) \
 	list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
 
-static inline void
-assert_drm_connector_list_read_locked(struct drm_mode_config *mode_config)
-{
-	/*
-	 * The connector hotadd/remove code currently grabs both locks when
-	 * updating lists. Hence readers need only hold either of them to be
-	 * safe and the check amounts to
-	 *
-	 * WARN_ON(not_holding(A) && not_holding(B)).
-	 */
-	WARN_ON(!mutex_is_locked(&mode_config->mutex) &&
-		!drm_modeset_is_locked(&mode_config->connection_mutex));
-}
-
 #define drm_for_each_connector(connector, dev) \
 	/* loop to wrap everything into a srcu read-side critical section */	\
-	for (bool __conn_loop_srcu = true,					\
-	     int __conn_loop_srcu_ret = srcu_read_lock(&drm_connector_list_srcu);\
-	     __conn_loop_srcu; __conn_loop_srcu = false,			\
+	for (int __conn_loop_srcu = 1,					\
+	     __conn_loop_srcu_ret = srcu_read_lock(&drm_connector_list_srcu);\
+	     __conn_loop_srcu; __conn_loop_srcu = 0,			\
 	     srcu_read_unlock(&drm_connector_list_srcu, __conn_loop_srcu_ret))	\
 	/* loop to iterate over the connector_list, rcu-protected */		\
-	for (assert_drm_connector_list_read_locked(&(dev)->mode_config),	\
-	     connector = list_entry_rcu((dev)->mode_config.connector_list.next,	\
+	for (connector = list_entry_rcu((dev)->mode_config.connector_list.next,	\
 					struct drm_connector, head);		\
 	     &connector->head != (&(dev)->mode_config.connector_list);		\
 	     connector = list_entry_rcu(connector->head.next,			\
-- 
2.8.1



More information about the dri-devel mailing list