On Mon, Feb 20, 2017 at 04:37:47PM +0100, Tomasz Lis wrote: > I tested this variant (reverted the change to "pass" variable before > testing), and it fixes the issue with count=0 as well as possible > infinite loop issue. > > But something needs to be done with the "pass" var, one way or the > other - commented below. > > > W dniu 2017-02-18 o 16:37, Chris Wilson pisze: > >If we cease making progress in finding matching outputs for a tiled > >configuration, stop looping over the remaining unconfigured outputs. > > > >Fixes: b0ee9e7fa5b4 ("drm/fb: add support for tiled monitor configurations. (v2)") > >Cc: Tomasz Lis <tomasz.lis@xxxxxxxxx> > >Cc: Dave Airlie <airlied@xxxxxxxxxx> > >Cc: Daniel Vetter <daniel.vetter@xxxxxxxxx> > >Cc: Jani Nikula <jani.nikula@xxxxxxxxxxxxxxx> > >Cc: Sean Paul <seanpaul@xxxxxxxxxxxx> > >Cc: <stable@xxxxxxxxxxxxxxx> # v3.19+ > >--- > > drivers/gpu/drm/i915/intel_fbdev.c | 7 +++---- > > 1 file changed, 3 insertions(+), 4 deletions(-) > > > >diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c > >index 041322fef607..32d0af6b07a7 100644 > >--- a/drivers/gpu/drm/i915/intel_fbdev.c > >+++ b/drivers/gpu/drm/i915/intel_fbdev.c > >@@ -348,7 +348,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > > bool *enabled, int width, int height) > > { > > struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); > >- unsigned long conn_configured, mask; > >+ unsigned long conn_configured, conn_seq, mask; > > unsigned int count = min(fb_helper->connector_count, BITS_PER_LONG); > > int i, j; > > bool *save_enabled; > >@@ -365,6 +365,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > > mask = GENMASK(count - 1, 0); > > conn_configured = 0; > > retry: > >+ conn_seq = conn_configured; > > for (i = 0; i < count; i++) { > > struct drm_fb_helper_connector *fb_conn; > > struct drm_connector *connector; > >@@ -489,10 +490,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > > conn_configured |= BIT(i); > > } > >- if ((conn_configured & mask) != mask) { > >- pass++; > This doesn't seem right; increasing the amount of passes should > stay, or the use of "pass" variable should be completely replaced by > conn_seq. Good catch. diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index 32d0af6b07a7..f7e9a4e69595 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c @@ -355,7 +355,6 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, bool fallback = true; int num_connectors_enabled = 0; int num_connectors_detected = 0; - int pass = 0; save_enabled = kcalloc(count, sizeof(bool), GFP_KERNEL); if (!save_enabled) @@ -379,7 +378,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, if (conn_configured & BIT(i)) continue; - if (pass == 0 && !connector->has_tile) + if (conn_seq == 0 && !connector->has_tile) continue; if (connector->status == connector_status_connected) Suggestions for a better name than conn_seq much appreciated. -Chris -- Chris Wilson, Intel Open Source Technology Centre