Reviewed-by: Jamey Sharp <[email protected]>

I haven't tested it, nor do I have mind-reading powers, but I think
this logic means what you think it means. Thanks for the revisions.

Jamey

On 10/19/11, Dave Airlie <[email protected]> wrote:
> From: Adam Jackson <[email protected]>
>
> So on RHEL5 anaconda sets an xorg.conf with a fixed 800x600 mode in it,
> we run radeonfb and fbdev since ati won't work in userspace due to domain
> issues in the older codebase.
>
> On certain pseries blades the built-in KVM can't accept an 800x600-43 mode,
> it requires the 800x600-60 mode, so we have to have the kernel radeonfb
> driver reject the 800x600-43 mode when it sees it. However then fbdev
> doesn't try any of the other 800x600 modes in the modelist, and we end up
> getting a default 640x480 mode we don't want.
>
> This patch changes the mode validation loop to continue on with the other
> modes
> that match to find one that works.
>
> v2: move code around to avoid extra loop, after comment from Jamey.
>
> Signed-off-by: Dave Airlie <[email protected]>
> ---
>  hw/xfree86/fbdevhw/fbdevhw.c |   21 +++++++++++++--------
>  1 files changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
> index dee731b..7bd409e 100644
> --- a/hw/xfree86/fbdevhw/fbdevhw.c
> +++ b/hw/xfree86/fbdevhw/fbdevhw.c
> @@ -509,20 +509,25 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
>       pScrn->virtualY = pScrn->display->virtualY;
>
>       for (modename = pScrn->display->modes; *modename != NULL; modename++) {
> -             for (mode = pScrn->monitor->Modes; mode != NULL; mode = 
> mode->next)
> -                     if (0 == strcmp(mode->name,*modename))
> -                             break;
> +
> +             mode = pScrn->monitor->Modes;
> +
> +             for (; mode != NULL; mode = mode->next) {
> +                     if (0 == strcmp(mode->name,*modename)) {
> +                             if (fbdevHWSetMode(pScrn, mode, TRUE))
> +                                     break;
> +
> +                             xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> +                                        "\tmode \"%s\" test failed\n", 
> *modename);
> +                     }
> +             }
> +
>               if (NULL == mode) {
>                       xf86DrvMsg(pScrn->scrnIndex, X_INFO,
>                                  "\tmode \"%s\" not found\n", *modename);
>                       continue;
>               }
>
> -             if (!fbdevHWSetMode(pScrn, mode, TRUE)) {
> -                     xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> -                                "\tmode \"%s\" test failed\n", *modename);
> -                     continue;
> -             }
>               xf86DrvMsg(pScrn->scrnIndex, X_INFO,
>                          "\tmode \"%s\" ok\n", *modename);
>
> --
> 1.7.6.4
>
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to