aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_atomic.c8
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c4
-rw-r--r--drivers/gpu/drm/drm_connector.c10
-rw-r--r--drivers/gpu/drm/drm_crtc.c2
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c6
-rw-r--r--drivers/gpu/drm/drm_fb_helper.c12
-rw-r--r--drivers/gpu/drm/drm_mode_config.c2
-rw-r--r--include/drm/drm_connector.h41
-rw-r--r--scripts/coccinelle/api/drm-get-put.cocci10
9 files changed, 65 insertions, 30 deletions
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 39e470eb8aea..c5cb56db99f6 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -150,7 +150,7 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)
150 state->connectors[i].state); 150 state->connectors[i].state);
151 state->connectors[i].ptr = NULL; 151 state->connectors[i].ptr = NULL;
152 state->connectors[i].state = NULL; 152 state->connectors[i].state = NULL;
153 drm_connector_unreference(connector); 153 drm_connector_put(connector);
154 } 154 }
155 155
156 for (i = 0; i < config->num_crtc; i++) { 156 for (i = 0; i < config->num_crtc; i++) {
@@ -1030,7 +1030,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
1030 if (!connector_state) 1030 if (!connector_state)
1031 return ERR_PTR(-ENOMEM); 1031 return ERR_PTR(-ENOMEM);
1032 1032
1033 drm_connector_reference(connector); 1033 drm_connector_get(connector);
1034 state->connectors[index].state = connector_state; 1034 state->connectors[index].state = connector_state;
1035 state->connectors[index].old_state = connector->state; 1035 state->connectors[index].old_state = connector->state;
1036 state->connectors[index].new_state = connector_state; 1036 state->connectors[index].new_state = connector_state;
@@ -1380,7 +1380,7 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
1380 crtc_state->connector_mask &= 1380 crtc_state->connector_mask &=
1381 ~(1 << drm_connector_index(conn_state->connector)); 1381 ~(1 << drm_connector_index(conn_state->connector));
1382 1382
1383 drm_connector_unreference(conn_state->connector); 1383 drm_connector_put(conn_state->connector);
1384 conn_state->crtc = NULL; 1384 conn_state->crtc = NULL;
1385 } 1385 }
1386 1386
@@ -1392,7 +1392,7 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
1392 crtc_state->connector_mask |= 1392 crtc_state->connector_mask |=
1393 1 << drm_connector_index(conn_state->connector); 1393 1 << drm_connector_index(conn_state->connector);
1394 1394
1395 drm_connector_reference(conn_state->connector); 1395 drm_connector_get(conn_state->connector);
1396 conn_state->crtc = crtc; 1396 conn_state->crtc = crtc;
1397 1397
1398 DRM_DEBUG_ATOMIC("Link connector state %p to [CRTC:%d:%s]\n", 1398 DRM_DEBUG_ATOMIC("Link connector state %p to [CRTC:%d:%s]\n",
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index bdfddfa87316..6e7d9dfce342 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -3351,7 +3351,7 @@ __drm_atomic_helper_connector_duplicate_state(struct drm_connector *connector,
3351{ 3351{
3352 memcpy(state, connector->state, sizeof(*state)); 3352 memcpy(state, connector->state, sizeof(*state));
3353 if (state->crtc) 3353 if (state->crtc)
3354 drm_connector_reference(connector); 3354 drm_connector_get(connector);
3355} 3355}
3356EXPORT_SYMBOL(__drm_atomic_helper_connector_duplicate_state); 3356EXPORT_SYMBOL(__drm_atomic_helper_connector_duplicate_state);
3357 3357
@@ -3477,7 +3477,7 @@ void
3477__drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state) 3477__drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state)
3478{ 3478{
3479 if (state->crtc) 3479 if (state->crtc)
3480 drm_connector_unreference(state->connector); 3480 drm_connector_put(state->connector);
3481} 3481}
3482EXPORT_SYMBOL(__drm_atomic_helper_connector_destroy_state); 3482EXPORT_SYMBOL(__drm_atomic_helper_connector_destroy_state);
3483 3483
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index a48e9a65046d..5a4be752a85e 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -35,8 +35,8 @@
35 * als fixed panels or anything else that can display pixels in some form. As 35 * als fixed panels or anything else that can display pixels in some form. As
36 * opposed to all other KMS objects representing hardware (like CRTC, encoder or 36 * opposed to all other KMS objects representing hardware (like CRTC, encoder or
37 * plane abstractions) connectors can be hotplugged and unplugged at runtime. 37 * plane abstractions) connectors can be hotplugged and unplugged at runtime.
38 * Hence they are reference-counted using drm_connector_reference() and 38 * Hence they are reference-counted using drm_connector_get() and
39 * drm_connector_unreference(). 39 * drm_connector_put().
40 * 40 *
41 * KMS driver must create, initialize, register and attach at a &struct 41 * KMS driver must create, initialize, register and attach at a &struct
42 * drm_connector for each such sink. The instance is created as other KMS 42 * drm_connector for each such sink. The instance is created as other KMS
@@ -557,7 +557,7 @@ drm_connector_list_iter_next(struct drm_connector_list_iter *iter)
557 spin_unlock_irqrestore(&config->connector_list_lock, flags); 557 spin_unlock_irqrestore(&config->connector_list_lock, flags);
558 558
559 if (old_conn) 559 if (old_conn)
560 drm_connector_unreference(old_conn); 560 drm_connector_put(old_conn);
561 561
562 return iter->conn; 562 return iter->conn;
563} 563}
@@ -576,7 +576,7 @@ void drm_connector_list_iter_put(struct drm_connector_list_iter *iter)
576{ 576{
577 iter->dev = NULL; 577 iter->dev = NULL;
578 if (iter->conn) 578 if (iter->conn)
579 drm_connector_unreference(iter->conn); 579 drm_connector_put(iter->conn);
580 lock_release(&connector_list_iter_dep_map, 0, _RET_IP_); 580 lock_release(&connector_list_iter_dep_map, 0, _RET_IP_);
581} 581}
582EXPORT_SYMBOL(drm_connector_list_iter_put); 582EXPORT_SYMBOL(drm_connector_list_iter_put);
@@ -1309,7 +1309,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
1309out: 1309out:
1310 mutex_unlock(&dev->mode_config.mutex); 1310 mutex_unlock(&dev->mode_config.mutex);
1311out_unref: 1311out_unref:
1312 drm_connector_unreference(connector); 1312 drm_connector_put(connector);
1313 1313
1314 return ret; 1314 return ret;
1315} 1315}
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index e2284539f82c..9594c623799b 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -685,7 +685,7 @@ out:
685 if (connector_set) { 685 if (connector_set) {
686 for (i = 0; i < crtc_req->count_connectors; i++) { 686 for (i = 0; i < crtc_req->count_connectors; i++) {
687 if (connector_set[i]) 687 if (connector_set[i])
688 drm_connector_unreference(connector_set[i]); 688 drm_connector_put(connector_set[i]);
689 } 689 }
690 } 690 }
691 kfree(connector_set); 691 kfree(connector_set);
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index 44ba0e990d6c..536051c627d8 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -465,7 +465,7 @@ drm_crtc_helper_disable(struct drm_crtc *crtc)
465 connector->dpms = DRM_MODE_DPMS_OFF; 465 connector->dpms = DRM_MODE_DPMS_OFF;
466 466
467 /* we keep a reference while the encoder is bound */ 467 /* we keep a reference while the encoder is bound */
468 drm_connector_unreference(connector); 468 drm_connector_put(connector);
469 } 469 }
470 drm_connector_list_iter_put(&conn_iter); 470 drm_connector_list_iter_put(&conn_iter);
471 } 471 }
@@ -623,7 +623,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
623 for (ro = 0; ro < set->num_connectors; ro++) { 623 for (ro = 0; ro < set->num_connectors; ro++) {
624 if (set->connectors[ro]->encoder) 624 if (set->connectors[ro]->encoder)
625 continue; 625 continue;
626 drm_connector_reference(set->connectors[ro]); 626 drm_connector_get(set->connectors[ro]);
627 } 627 }
628 628
629 /* a) traverse passed in connector list and get encoders for them */ 629 /* a) traverse passed in connector list and get encoders for them */
@@ -772,7 +772,7 @@ fail:
772 for (ro = 0; ro < set->num_connectors; ro++) { 772 for (ro = 0; ro < set->num_connectors; ro++) {
773 if (set->connectors[ro]->encoder) 773 if (set->connectors[ro]->encoder)
774 continue; 774 continue;
775 drm_connector_unreference(set->connectors[ro]); 775 drm_connector_put(set->connectors[ro]);
776 } 776 }
777 777
778 /* Try to restore the config */ 778 /* Try to restore the config */
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 1b068e6264d5..b243fdbdbb08 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -148,7 +148,7 @@ fail:
148 struct drm_fb_helper_connector *fb_helper_connector = 148 struct drm_fb_helper_connector *fb_helper_connector =
149 fb_helper->connector_info[i]; 149 fb_helper->connector_info[i];
150 150
151 drm_connector_unreference(fb_helper_connector->connector); 151 drm_connector_put(fb_helper_connector->connector);
152 152
153 kfree(fb_helper_connector); 153 kfree(fb_helper_connector);
154 fb_helper->connector_info[i] = NULL; 154 fb_helper->connector_info[i] = NULL;
@@ -185,7 +185,7 @@ int drm_fb_helper_add_one_connector(struct drm_fb_helper *fb_helper, struct drm_
185 if (!fb_helper_connector) 185 if (!fb_helper_connector)
186 return -ENOMEM; 186 return -ENOMEM;
187 187
188 drm_connector_reference(connector); 188 drm_connector_get(connector);
189 fb_helper_connector->connector = connector; 189 fb_helper_connector->connector = connector;
190 fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector; 190 fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector;
191 return 0; 191 return 0;
@@ -211,7 +211,7 @@ int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
211 if (i == fb_helper->connector_count) 211 if (i == fb_helper->connector_count)
212 return -EINVAL; 212 return -EINVAL;
213 fb_helper_connector = fb_helper->connector_info[i]; 213 fb_helper_connector = fb_helper->connector_info[i];
214 drm_connector_unreference(fb_helper_connector->connector); 214 drm_connector_put(fb_helper_connector->connector);
215 215
216 for (j = i + 1; j < fb_helper->connector_count; j++) { 216 for (j = i + 1; j < fb_helper->connector_count; j++) {
217 fb_helper->connector_info[j - 1] = fb_helper->connector_info[j]; 217 fb_helper->connector_info[j - 1] = fb_helper->connector_info[j];
@@ -633,7 +633,7 @@ static void drm_fb_helper_modeset_release(struct drm_fb_helper *helper,
633 int i; 633 int i;
634 634
635 for (i = 0; i < modeset->num_connectors; i++) { 635 for (i = 0; i < modeset->num_connectors; i++) {
636 drm_connector_unreference(modeset->connectors[i]); 636 drm_connector_put(modeset->connectors[i]);
637 modeset->connectors[i] = NULL; 637 modeset->connectors[i] = NULL;
638 } 638 }
639 modeset->num_connectors = 0; 639 modeset->num_connectors = 0;
@@ -650,7 +650,7 @@ static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper)
650 int i; 650 int i;
651 651
652 for (i = 0; i < helper->connector_count; i++) { 652 for (i = 0; i < helper->connector_count; i++) {
653 drm_connector_unreference(helper->connector_info[i]->connector); 653 drm_connector_put(helper->connector_info[i]->connector);
654 kfree(helper->connector_info[i]); 654 kfree(helper->connector_info[i]);
655 } 655 }
656 kfree(helper->connector_info); 656 kfree(helper->connector_info);
@@ -2192,7 +2192,7 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper,
2192 fb_crtc->y = offset->y; 2192 fb_crtc->y = offset->y;
2193 modeset->mode = drm_mode_duplicate(dev, 2193 modeset->mode = drm_mode_duplicate(dev,
2194 fb_crtc->desired_mode); 2194 fb_crtc->desired_mode);
2195 drm_connector_reference(connector); 2195 drm_connector_get(connector);
2196 modeset->connectors[modeset->num_connectors++] = connector; 2196 modeset->connectors[modeset->num_connectors++] = connector;
2197 modeset->fb = fb_helper->fb; 2197 modeset->fb = fb_helper->fb;
2198 modeset->x = offset->x; 2198 modeset->x = offset->x;
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 884cc4d26fb5..20aec165abd7 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -418,7 +418,7 @@ void drm_mode_config_cleanup(struct drm_device *dev)
418 * current connector itself, which means it is inherently safe 418 * current connector itself, which means it is inherently safe
419 * against unreferencing the current connector - but not against 419 * against unreferencing the current connector - but not against
420 * deleting it right away. */ 420 * deleting it right away. */
421 drm_connector_unreference(connector); 421 drm_connector_put(connector);
422 } 422 }
423 drm_connector_list_iter_put(&conn_iter); 423 drm_connector_list_iter_put(&conn_iter);
424 if (WARN_ON(!list_empty(&dev->mode_config.connector_list))) { 424 if (WARN_ON(!list_empty(&dev->mode_config.connector_list))) {
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index f08aa5dfc9d7..e0acdb674d85 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -812,25 +812,50 @@ static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
812} 812}
813 813
814/** 814/**
815 * drm_connector_reference - incr the connector refcnt 815 * drm_connector_get - acquire a connector reference
816 * @connector: connector 816 * @connector: DRM connector
817 * 817 *
818 * This function increments the connector's refcount. 818 * This function increments the connector's refcount.
819 */ 819 */
820static inline void drm_connector_get(struct drm_connector *connector)
821{
822 drm_mode_object_get(&connector->base);
823}
824
825/**
826 * drm_connector_put - release a connector reference
827 * @connector: DRM connector
828 *
829 * This function decrements the connector's reference count and frees the
830 * object if the reference count drops to zero.
831 */
832static inline void drm_connector_put(struct drm_connector *connector)
833{
834 drm_mode_object_put(&connector->base);
835}
836
837/**
838 * drm_connector_reference - acquire a connector reference
839 * @connector: DRM connector
840 *
841 * This is a compatibility alias for drm_connector_get() and should not be
842 * used by new code.
843 */
820static inline void drm_connector_reference(struct drm_connector *connector) 844static inline void drm_connector_reference(struct drm_connector *connector)
821{ 845{
822 drm_mode_object_reference(&connector->base); 846 drm_connector_get(connector);
823} 847}
824 848
825/** 849/**
826 * drm_connector_unreference - unref a connector 850 * drm_connector_unreference - release a connector reference
827 * @connector: connector to unref 851 * @connector: DRM connector
828 * 852 *
829 * This function decrements the connector's refcount and frees it if it drops to zero. 853 * This is a compatibility alias for drm_connector_put() and should not be
854 * used by new code.
830 */ 855 */
831static inline void drm_connector_unreference(struct drm_connector *connector) 856static inline void drm_connector_unreference(struct drm_connector *connector)
832{ 857{
833 drm_mode_object_unreference(&connector->base); 858 drm_connector_put(connector);
834} 859}
835 860
836const char *drm_get_connector_status_name(enum drm_connector_status status); 861const char *drm_get_connector_status_name(enum drm_connector_status status);
@@ -924,7 +949,7 @@ void drm_connector_list_iter_put(struct drm_connector_list_iter *iter);
924 * 949 *
925 * Note that @connector is only valid within the list body, if you want to use 950 * Note that @connector is only valid within the list body, if you want to use
926 * @connector after calling drm_connector_list_iter_put() then you need to grab 951 * @connector after calling drm_connector_list_iter_put() then you need to grab
927 * your own reference first using drm_connector_reference(). 952 * your own reference first using drm_connector_get().
928 */ 953 */
929#define drm_for_each_connector_iter(connector, iter) \ 954#define drm_for_each_connector_iter(connector, iter) \
930 while ((connector = drm_connector_list_iter_next(iter))) 955 while ((connector = drm_connector_list_iter_next(iter)))
diff --git a/scripts/coccinelle/api/drm-get-put.cocci b/scripts/coccinelle/api/drm-get-put.cocci
index a3742447c981..8a4c2cb7889e 100644
--- a/scripts/coccinelle/api/drm-get-put.cocci
+++ b/scripts/coccinelle/api/drm-get-put.cocci
@@ -20,6 +20,12 @@ expression object;
20| 20|
21- drm_mode_object_unreference(object) 21- drm_mode_object_unreference(object)
22+ drm_mode_object_put(object) 22+ drm_mode_object_put(object)
23|
24- drm_connector_reference(object)
25+ drm_connector_get(object)
26|
27- drm_connector_unreference(object)
28+ drm_connector_put(object)
23) 29)
24 30
25@r depends on report@ 31@r depends on report@
@@ -31,6 +37,10 @@ position p;
31drm_mode_object_unreference@p(object) 37drm_mode_object_unreference@p(object)
32| 38|
33drm_mode_object_reference@p(object) 39drm_mode_object_reference@p(object)
40|
41drm_connector_unreference@p(object)
42|
43drm_connector_reference@p(object)
34) 44)
35 45
36@script:python depends on report@ 46@script:python depends on report@