[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#438650: xserver-xorg-video-intel: fails to start (No valid modes)



   Good morning!

Here is some additional info. I've tried to step the Xorg in gdb.

The error is first reported by intel driver with message:

(EE) intel(0): No valid modes.

It is written at src/i830_driver.c:1377

   if (!xf86InitialConfiguration (pScrn, FALSE))  <== fails here
   {
      xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
      RestoreHWState(pScrn);
      PreInitCleanup(pScrn);
      return FALSE;
   }

Tracing shows, that xf86InitialConfiguration function fails and
returns NULL.

hw/xfree86/modes/xf86Crtc.c:1513

Bool
xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
{
    ...... // a lot of code skipped
    /*
     * Assign CRTCs to fit output configuration
     */
                             
    if (!xf86PickCrtcs (scrn, crtcs, modes, 0, width, height))    <== fails here
    {
        xfree (crtcs);
        xfree (modes);
        return FALSE;
    }

Function xf86InitialConfiguration fails to assign CRTS. It call function
xf86PickCrtcs and last return FALSE.

hw/xfree86/modes/xf86Crtc.c:787

static int
xf86PickCrtcs (ScrnInfoPtr      scrn,
               xf86CrtcPtr      *best_crtcs,
               DisplayModePtr   *modes,
               int              n,
               int              width,
               int              height)
{
    xf86CrtcConfigPtr   config = XF86_CRTC_CONFIG_PTR(scrn);
    int             c, o;
    xf86OutputPtr   output;
    xf86CrtcPtr     crtc;
    xf86CrtcPtr     *crtcs;
    xf86CrtcPtr     best_crtc;
    int             best_score;
    int             score;
    int             my_score;

    if (n == config->num_output)
        return 0;
    output = config->output[n];

    /*
     * Compute score with this output disabled
     */
    best_crtcs[n] = NULL;
    best_crtc = NULL;
    best_score = xf86PickCrtcs (scrn, best_crtcs, modes, n+1, width, height);
                  ^== this functions returns NULL
    if (modes[n] == NULL)
===>      return best_score; <== and we also return NULL here

At this point we have:
   n = 0, best_score = 0, modes[0] = 0, 
so we return NULL.

Here is some excerpt from GDB session.

(gdb) next
xf86PickCrtcs (scrn=0x820ff08, best_crtcs=0x8213710, modes=0x8213bb0, n=0, width=2048, height=2048)
    at ../../../../hw/xfree86/modes/xf86Crtc.c:807
807     in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) print modes
$15 = (DisplayModePtr *) 0x8213bb0
(gdb) print modes[0]
$16 = (DisplayModePtr) 0x0
(gdb) print n
$17 = 0
(gdb) print output
$18 = (xf86OutputPtr) 0x8212520
(gdb) print *output
$19 = {scrn = 0x820ff08, crtc = 0x0, possible_crtcs = 1, possible_clones = 1, interlaceAllowed = 0, doubleScanAllowed = 0,
  probed_modes = 0x0, options = 0x8212f40, conf_monitor = 0x8203f00, initial_x = 0, initial_y = 0, initial_rotation = 0,
  status = XF86OutputStatusDisconnected, MonInfo = 0x0, subpixel_order = 0, mm_width = 0, mm_height = 0,
  name = 0x8212578 "VGA", funcs = 0xb7bc9b60, driver_private = 0x8212a68, use_screen_monitor = 1, randr_output = 0x0}

  <=== NOTE "status = XF86OutputStatusDisconnected" here, is it ok?
(gdb) print best_score
$20 = 0
(gdb) next
806     in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
807     in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
868     in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) next
xf86InitialConfiguration (scrn=0x820ff08, canGrow=0) at ../../../../hw/xfree86/modes/xf86Crtc.c:1620
1620    in ../../../../hw/xfree86/modes/xf86Crtc.c
(gdb) bt
#0  xf86InitialConfiguration (scrn=0x820ff08, canGrow=0) at ../../../../hw/xfree86/modes/xf86Crtc.c:1620
#1  0xb7b9df50 in I830PreInit (pScrn=0x820ff08, flags=<value optimized out>) at ../../src/i830_driver.c:1377
#2  0x080a8394 in InitOutput (pScreenInfo=0x81fe360, argc=1, argv=0xbfec3fd4) at ../../../../hw/xfree86/common/xf86Init.c:601
#3  0x08076c6b in main (argc=1, argv=0xbfec3fd4, envp=0xbfec3fdc) at ../../dix/main.c:370
(gdb)  

This function just returned FALSE, so all subsequent functions just
returns with error.

Any ideas? What else can I trace to find useful information?

You can send me a patch and I will recompile server or intel driver with
it.

With best regards,
   Alexander.



Reply to: