Re: [Bug #14670] i915: playing video via XVideo extension makes the screen flicker

Thomas Meyer
2010-01-13T21:06:34Z

Am Dienstag, den 12.01.2010, 09:57 -0800 schrieb Jesse Barnes:

> Yeah, the function tracer should be able to do it (though I don't know
> how to use it offhand, maybe through the perf tool?). Or you could
> just add some DRM_ERROR lines. :)

I set the function tracer to the function "drm_mode_getconnector":

here is the output, that i captured after I start playing a video with
totem (i.e. the flickering starts):

# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |
Xorg-1443 [000] 1880.280581: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.394308: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.395379: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.406780: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.420169: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.424712: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.444334: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.631332: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.632368: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.643349: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.656874: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.662623: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.764168: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.986639: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.988920: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1880.999856: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.013260: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.024310: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.069299: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.303194: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.305308: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.316421: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.329808: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.337493: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.420231: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.633036: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.634075: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.646363: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.659741: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.670751: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.742476: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.959634: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.960669: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.972904: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.986272: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1881.993965: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.078704: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.295050: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.296104: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.309439: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.322834: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.333858: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.407520: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.622870: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.623896: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.635987: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.649366: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.660390: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.772479: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.992680: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1882.993707: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.005845: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.019238: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.026922: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.142571: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.359167: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.360190: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.372398: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.385862: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.393457: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.479378: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.692285: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.693326: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.705552: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.718920: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.729979: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1883.808964: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.032179: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.033222: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.045422: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.058808: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.066525: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.151051: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.368836: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.369872: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.382019: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.395401: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.403100: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.504375: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.725273: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.726373: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.738545: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.751942: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.759633: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1884.828803: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.045242: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.046283: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.058442: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.071842: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.079498: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.162244: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.388404: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.389429: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.401620: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.415130: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.421548: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.510004: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.685747: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.686776: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.698176: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.711599: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.723703: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1885.808301: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.032422: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.033456: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.044685: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.058081: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.065622: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.140785: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.367987: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.369012: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.381254: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.394621: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.402334: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.456423: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.671279: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.672302: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.684470: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.697844: drm_mode_getconnector <-drm_ioctl
Xorg-1443 [000] 1886.705543: drm_mode_getconnector <-drm_ioctl

Any idea why the function "drm_mode_getconnector" is called so many
times?

The call chain seems to be

drm_ioctl ->
drm_mode_getconnector ->
drm_helper_probe_single_connector_modes ->
intel_crt_detect, intel_hdmi_detect and intel_lvds_detect

>
> > > The LVDS state will also be checked at ACPI LID event time, maybe
> > > your platforms is getting spurious LID events?
> >
> > maybe! where can I check this? acpid log file?
>
> Yeah or using acpi_listen I think.
>

acpi lid events seems to correspond to the lid status.

greets
thomas