diff options
-rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index a6e42433ef0e..1c4d6746f90c 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
@@ -631,8 +631,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
631 | mode_changed = true; | 631 | mode_changed = true; |
632 | } | 632 | } |
633 | 633 | ||
634 | /* take a reference on all connectors in set */ | 634 | /* take a reference on all unbound connectors in set, reuse the |
635 | * already taken reference for bound connectors | ||
636 | */ | ||
635 | for (ro = 0; ro < set->num_connectors; ro++) { | 637 | for (ro = 0; ro < set->num_connectors; ro++) { |
638 | if (set->connectors[ro]->encoder) | ||
639 | continue; | ||
636 | drm_connector_reference(set->connectors[ro]); | 640 | drm_connector_reference(set->connectors[ro]); |
637 | } | 641 | } |
638 | 642 | ||
@@ -754,12 +758,6 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
754 | } | 758 | } |
755 | } | 759 | } |
756 | 760 | ||
757 | /* after fail drop reference on all connectors in save set */ | ||
758 | count = 0; | ||
759 | drm_for_each_connector(connector, dev) { | ||
760 | drm_connector_unreference(&save_connectors[count++]); | ||
761 | } | ||
762 | |||
763 | kfree(save_connectors); | 761 | kfree(save_connectors); |
764 | kfree(save_encoders); | 762 | kfree(save_encoders); |
765 | return 0; | 763 | return 0; |
@@ -776,8 +774,12 @@ fail: | |||
776 | *connector = save_connectors[count++]; | 774 | *connector = save_connectors[count++]; |
777 | } | 775 | } |
778 | 776 | ||
779 | /* after fail drop reference on all connectors in set */ | 777 | /* after fail drop reference on all unbound connectors in set, let |
778 | * bound connectors keep their reference | ||
779 | */ | ||
780 | for (ro = 0; ro < set->num_connectors; ro++) { | 780 | for (ro = 0; ro < set->num_connectors; ro++) { |
781 | if (set->connectors[ro]->encoder) | ||
782 | continue; | ||
781 | drm_connector_unreference(set->connectors[ro]); | 783 | drm_connector_unreference(set->connectors[ro]); |
782 | } | 784 | } |
783 | 785 | ||