[patch] xserver: fix deadloop when preferred mode > 1
Alex Deucher
alexdeucher at gmail.com
Sat Sep 29 10:01:08 PDT 2007
On 9/29/07, Hong Liu <hong.liu at intel.com> wrote:
> I think we should fix this deadloop problem first and later
> we could think out some solutions, for example we may add
> refresh rate to mode name to uniquely identify mode.
Agreed.
Alex
>
> Thanks,
> Hong
>
> On Fri, 2007-09-28 at 09:18 -0400, Alex Deucher wrote:
> > On 9/28/07, Hong Liu <hong.liu at intel.com> wrote:
> > > When preferred mode option is enabled and there are more than 1 mode
> > > matches the preferred mode, X will get in dead-loop.
> > >
> >
> > Keithp and I discussed this last weekend and I came up with a similar
> > patch (http://www.botchco.com/alex/xorg/fix_crtc_loop.diff)
> > However, the question is, if we have multiple modes with the same
> > name, which one does the user want? The first one we find? Do we
> > care? Yeah for non-unique strings.
> >
> > Alex
> >
> > > Thanks,
> > > Hong
> > >
> > > diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
> > > index 064ff16..78479bb 100644
> > > --- a/hw/xfree86/modes/xf86Crtc.c
> > > +++ b/hw/xfree86/modes/xf86Crtc.c
> > > @@ -1400,25 +1400,33 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
> > >
> > > if (preferred_mode)
> > > {
> > > - for (mode = output->probed_modes; mode; mode = mode->next)
> > > + mode = output->probed_modes;
> > > + while (mode)
> > > {
> > > + DisplayModePtr next;
> > > +
> > > if (!strcmp (preferred_mode, mode->name))
> > > {
> > > + next = mode->next;
> > > if (mode != output->probed_modes)
> > > {
> > > if (mode->prev)
> > > - mode->prev->next = mode->next;
> > > - if (mode->next)
> > > - mode->next->prev = mode->prev;
> > > + mode->prev->next = next;
> > > + if (next)
> > > + next->prev = mode->prev;
> > > mode->next = output->probed_modes;
> > > output->probed_modes->prev = mode;
> > > mode->prev = NULL;
> > > output->probed_modes = mode;
> > > }
> > > mode->type |= M_T_PREFERRED;
> > > + mode = next;
> > > + continue;
> > > }
> > > else
> > > mode->type &= ~M_T_PREFERRED;
> > > +
> > > + mode = mode->next;
> > > }
> > > }
> > >
> > > _______________________________________________
> > > xorg mailing list
> > > xorg at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/xorg
> > >
>
More information about the xorg
mailing list