public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Intel graphics CPU usage - SDVO detect bogosity?
@ 2010-08-16  2:32 Linus Torvalds
  2010-08-16  2:51 ` Markus Trippelsdorf
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Linus Torvalds @ 2010-08-16  2:32 UTC (permalink / raw)
  To: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson
  Cc: DRI mailing list, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 811 bytes --]

I started wondering why 'top' was showing an otherwise idle system as
having a load average of 0.5+, and worker threads constantly using the
CPU.

So I did a system-wide profile, and got the attached output (look at
it in a really wide terminal).

There seems to be something _seriously_ wrong with i915 SDVO detect.
This is on an Apple Mac Mini (hey, your favorite problem child!), and
apparently it spends 20% of its non-idle CPU time just doing udelay's
for the i2c SDVO connection detection.

That sounds a bit wrong, doesn't it?

I don't know how recent this is - it might have been going on for some
time without me noticing. It's the wife's computer, and the same thing
doesn't seem to happen on my Core i5 desktop

Any ideas? Any information I can give about the machine?

                        Linus

[-- Attachment #2: system-profile.txt --]
[-- Type: text/plain, Size: 113776 bytes --]

# Events: 6K cycles
#
# Overhead          Command                Shared Object                               Symbol
# ........  ...............  ...........................  ...................................
#
    20.57%      kworker/1:2  [kernel.kallsyms]            [k] delay_tsc
                |
                --- delay_tsc
                   |          
                   |--58.58%-- __const_udelay
                   |          |          
                   |          |--65.76%-- set_clock
                   |          |          |          
                   |          |          |--54.59%-- sclhi
                   |          |          |          |          
                   |          |          |          |--78.84%-- i2c_outb
                   |          |          |          |          |          
                   |          |          |          |          |--60.80%-- try_address
                   |          |          |          |          |          bit_xfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--77.41%-- i2c_transfer
                   |          |          |          |          |          |          |          
                   |          |          |          |          |          |          |--54.01%-- intel_sdvo_read_byte
                   |          |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          |          
                   |          |          |          |          |          |          |--27.23%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          |          
                   |          |          |          |          |          |           --18.76%-- intel_sdvo_write_byte
                   |          |          |          |          |          |                     |          
                   |          |          |          |          |          |                     |--68.97%-- intel_sdvo_write_cmd
                   |          |          |          |          |          |                     |          intel_sdvo_detect
                   |          |          |          |          |          |                     |          output_poll_execute
                   |          |          |          |          |          |                     |          process_one_work
                   |          |          |          |          |          |                     |          worker_thread
                   |          |          |          |          |          |                     |          kthread
                   |          |          |          |          |          |                     |          kernel_thread_helper
                   |          |          |          |          |          |                     |          
                   |          |          |          |          |          |                      --31.03%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |                                i2c_transfer
                   |          |          |          |          |          |                                drm_do_probe_ddc_edid
                   |          |          |          |          |          |                                drm_get_edid
                   |          |          |          |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |                                intel_sdvo_detect
                   |          |          |          |          |          |                                output_poll_execute
                   |          |          |          |          |          |                                process_one_work
                   |          |          |          |          |          |                                worker_thread
                   |          |          |          |          |          |                                kthread
                   |          |          |          |          |          |                                kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --22.59%-- intel_sdvo_master_xfer
                   |          |          |          |          |                     i2c_transfer
                   |          |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |          |                     drm_get_edid
                   |          |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |                     intel_sdvo_detect
                   |          |          |          |          |                     output_poll_execute
                   |          |          |          |          |                     process_one_work
                   |          |          |          |          |                     worker_thread
                   |          |          |          |          |                     kthread
                   |          |          |          |          |                     kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --39.20%-- bit_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     |          
                   |          |          |          |                     |--50.45%-- intel_sdvo_write_byte
                   |          |          |          |                     |          |          
                   |          |          |          |                     |          |--55.44%-- intel_sdvo_master_xfer
                   |          |          |          |                     |          |          i2c_transfer
                   |          |          |          |                     |          |          drm_do_probe_ddc_edid
                   |          |          |          |                     |          |          drm_get_edid
                   |          |          |          |                     |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     |          |          intel_sdvo_detect
                   |          |          |          |                     |          |          output_poll_execute
                   |          |          |          |                     |          |          process_one_work
                   |          |          |          |                     |          |          worker_thread
                   |          |          |          |                     |          |          kthread
                   |          |          |          |                     |          |          kernel_thread_helper
                   |          |          |          |                     |          |          
                   |          |          |          |                     |           --44.56%-- intel_sdvo_write_cmd
                   |          |          |          |                     |                     intel_sdvo_detect
                   |          |          |          |                     |                     output_poll_execute
                   |          |          |          |                     |                     process_one_work
                   |          |          |          |                     |                     worker_thread
                   |          |          |          |                     |                     kthread
                   |          |          |          |                     |                     kernel_thread_helper
                   |          |          |          |                     |          
                   |          |          |          |                     |--30.86%-- intel_sdvo_read_byte
                   |          |          |          |                     |          intel_sdvo_read_response
                   |          |          |          |                     |          intel_sdvo_detect
                   |          |          |          |                     |          output_poll_execute
                   |          |          |          |                     |          process_one_work
                   |          |          |          |                     |          worker_thread
                   |          |          |          |                     |          kthread
                   |          |          |          |                     |          kernel_thread_helper
                   |          |          |          |                     |          
                   |          |          |          |                      --18.68%-- intel_sdvo_master_xfer
                   |          |          |          |                                i2c_transfer
                   |          |          |          |                                drm_do_probe_ddc_edid
                   |          |          |          |                                drm_get_edid
                   |          |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |          |                                intel_sdvo_detect
                   |          |          |          |                                output_poll_execute
                   |          |          |          |                                process_one_work
                   |          |          |          |                                worker_thread
                   |          |          |          |                                kthread
                   |          |          |          |                                kernel_thread_helper
                   |          |          |          |          
                   |          |          |          |--9.17%-- bit_xfer
                   |          |          |          |          i2c_transfer
                   |          |          |          |          |          
                   |          |          |          |          |--76.39%-- intel_sdvo_read_byte
                   |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          process_one_work
                   |          |          |          |          |          worker_thread
                   |          |          |          |          |          kthread
                   |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --23.61%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |          |--6.44%-- i2c_stop
                   |          |          |          |          |          
                   |          |          |          |          |--66.37%-- bit_xfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--83.11%-- i2c_transfer
                   |          |          |          |          |          |          intel_sdvo_read_byte
                   |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --16.89%-- intel_sdvo_master_xfer
                   |          |          |          |          |                     i2c_transfer
                   |          |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |          |                     drm_get_edid
                   |          |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |                     intel_sdvo_detect
                   |          |          |          |          |                     output_poll_execute
                   |          |          |          |          |                     process_one_work
                   |          |          |          |          |                     worker_thread
                   |          |          |          |          |                     kthread
                   |          |          |          |          |                     kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --33.63%-- try_address
                   |          |          |          |                     bit_xfer
                   |          |          |          |                     intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |          |--2.80%-- acknak
                   |          |          |          |          bit_xfer
                   |          |          |          |          i2c_transfer
                   |          |          |          |          intel_sdvo_read_byte
                   |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --2.74%-- i2c_repstart
                   |          |          |                     bit_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     |          
                   |          |          |                     |--73.68%-- intel_sdvo_read_byte
                   |          |          |                     |          intel_sdvo_read_response
                   |          |          |                     |          intel_sdvo_detect
                   |          |          |                     |          output_poll_execute
                   |          |          |                     |          process_one_work
                   |          |          |                     |          worker_thread
                   |          |          |                     |          kthread
                   |          |          |                     |          kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                      --26.32%-- intel_sdvo_master_xfer
                   |          |          |                                i2c_transfer
                   |          |          |                                drm_do_probe_ddc_edid
                   |          |          |                                drm_get_edid
                   |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |                                intel_sdvo_detect
                   |          |          |                                output_poll_execute
                   |          |          |                                process_one_work
                   |          |          |                                worker_thread
                   |          |          |                                kthread
                   |          |          |                                kernel_thread_helper
                   |          |          |          
                   |          |          |--41.61%-- i2c_outb
                   |          |          |          |          
                   |          |          |          |--60.29%-- try_address
                   |          |          |          |          bit_xfer
                   |          |          |          |          |          
                   |          |          |          |          |--73.29%-- i2c_transfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--60.15%-- intel_sdvo_read_byte
                   |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--21.43%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --18.43%-- intel_sdvo_write_byte
                   |          |          |          |          |                     |          
                   |          |          |          |          |                     |--53.62%-- intel_sdvo_write_cmd
                   |          |          |          |          |                     |          intel_sdvo_detect
                   |          |          |          |          |                     |          output_poll_execute
                   |          |          |          |          |                     |          process_one_work
                   |          |          |          |          |                     |          worker_thread
                   |          |          |          |          |                     |          kthread
                   |          |          |          |          |                     |          kernel_thread_helper
                   |          |          |          |          |                     |          
                   |          |          |          |          |                      --46.38%-- intel_sdvo_master_xfer
                   |          |          |          |          |                                i2c_transfer
                   |          |          |          |          |                                drm_do_probe_ddc_edid
                   |          |          |          |          |                                drm_get_edid
                   |          |          |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |                                intel_sdvo_detect
                   |          |          |          |          |                                output_poll_execute
                   |          |          |          |          |                                process_one_work
                   |          |          |          |          |                                worker_thread
                   |          |          |          |          |                                kthread
                   |          |          |          |          |                                kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --26.71%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --39.71%-- bit_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     |          
                   |          |          |                     |--44.17%-- intel_sdvo_write_byte
                   |          |          |                     |          |          
                   |          |          |                     |          |--62.27%-- intel_sdvo_write_cmd
                   |          |          |                     |          |          intel_sdvo_detect
                   |          |          |                     |          |          output_poll_execute
                   |          |          |                     |          |          process_one_work
                   |          |          |                     |          |          worker_thread
                   |          |          |                     |          |          kthread
                   |          |          |                     |          |          kernel_thread_helper
                   |          |          |                     |          |          
                   |          |          |                     |           --37.73%-- intel_sdvo_master_xfer
                   |          |          |                     |                     i2c_transfer
                   |          |          |                     |                     drm_do_probe_ddc_edid
                   |          |          |                     |                     drm_get_edid
                   |          |          |                     |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     |                     intel_sdvo_detect
                   |          |          |                     |                     output_poll_execute
                   |          |          |                     |                     process_one_work
                   |          |          |                     |                     worker_thread
                   |          |          |                     |                     kthread
                   |          |          |                     |                     kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                     |--28.61%-- intel_sdvo_master_xfer
                   |          |          |                     |          i2c_transfer
                   |          |          |                     |          drm_do_probe_ddc_edid
                   |          |          |                     |          drm_get_edid
                   |          |          |                     |          intel_sdvo_hdmi_sink_detect
                   |          |          |                     |          intel_sdvo_detect
                   |          |          |                     |          output_poll_execute
                   |          |          |                     |          process_one_work
                   |          |          |                     |          worker_thread
                   |          |          |                     |          kthread
                   |          |          |                     |          kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                      --27.22%-- intel_sdvo_read_byte
                   |          |          |                                intel_sdvo_read_response
                   |          |          |                                intel_sdvo_detect
                   |          |          |                                output_poll_execute
                   |          |          |                                process_one_work
                   |          |          |                                worker_thread
                   |          |          |                                kthread
                   |          |          |                                kernel_thread_helper
                   |          |          |          
                   |          |          |--2.33%-- bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          |          
                   |          |          |          |--83.09%-- intel_sdvo_read_byte
                   |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --16.91%-- intel_sdvo_master_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     drm_do_probe_ddc_edid
                   |          |          |                     drm_get_edid
                   |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |          |--0.72%-- i2c_start
                   |          |          |          bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          |          
                   |          |          |          |--55.05%-- intel_sdvo_master_xfer
                   |          |          |          |          i2c_transfer
                   |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          drm_get_edid
                   |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --44.95%-- intel_sdvo_read_byte
                   |          |          |                     intel_sdvo_read_response
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |           --0.76%-- [...]
                   |          |          
                   |          |--33.31%-- set_data
                   |          |          |          
                   |          |          |--79.58%-- i2c_outb
                   |          |          |          |          
                   |          |          |          |--64.98%-- try_address
                   |          |          |          |          bit_xfer
                   |          |          |          |          |          
                   |          |          |          |          |--75.92%-- i2c_transfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--52.45%-- intel_sdvo_read_byte
                   |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--33.67%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --13.88%-- intel_sdvo_write_byte
                   |          |          |          |          |                     |          
                   |          |          |          |          |                     |--71.16%-- intel_sdvo_master_xfer
                   |          |          |          |          |                     |          i2c_transfer
                   |          |          |          |          |                     |          drm_do_probe_ddc_edid
                   |          |          |          |          |                     |          drm_get_edid
                   |          |          |          |          |                     |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |                     |          intel_sdvo_detect
                   |          |          |          |          |                     |          output_poll_execute
                   |          |          |          |          |                     |          process_one_work
                   |          |          |          |          |                     |          worker_thread
                   |          |          |          |          |                     |          kthread
                   |          |          |          |          |                     |          kernel_thread_helper
                   |          |          |          |          |                     |          
                   |          |          |          |          |                      --28.84%-- intel_sdvo_write_cmd
                   |          |          |          |          |                                intel_sdvo_detect
                   |          |          |          |          |                                output_poll_execute
                   |          |          |          |          |                                process_one_work
                   |          |          |          |          |                                worker_thread
                   |          |          |          |          |                                kthread
                   |          |          |          |          |                                kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --24.08%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --35.02%-- bit_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     |          
                   |          |          |                     |--39.73%-- intel_sdvo_read_byte
                   |          |          |                     |          intel_sdvo_read_response
                   |          |          |                     |          intel_sdvo_detect
                   |          |          |                     |          output_poll_execute
                   |          |          |                     |          process_one_work
                   |          |          |                     |          worker_thread
                   |          |          |                     |          kthread
                   |          |          |                     |          kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                     |--35.15%-- intel_sdvo_write_byte
                   |          |          |                     |          |          
                   |          |          |                     |          |--55.49%-- intel_sdvo_master_xfer
                   |          |          |                     |          |          i2c_transfer
                   |          |          |                     |          |          drm_do_probe_ddc_edid
                   |          |          |                     |          |          drm_get_edid
                   |          |          |                     |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |                     |          |          intel_sdvo_detect
                   |          |          |                     |          |          output_poll_execute
                   |          |          |                     |          |          process_one_work
                   |          |          |                     |          |          worker_thread
                   |          |          |                     |          |          kthread
                   |          |          |                     |          |          kernel_thread_helper
                   |          |          |                     |          |          
                   |          |          |                     |           --44.51%-- intel_sdvo_write_cmd
                   |          |          |                     |                     intel_sdvo_detect
                   |          |          |                     |                     output_poll_execute
                   |          |          |                     |                     process_one_work
                   |          |          |                     |                     worker_thread
                   |          |          |                     |                     kthread
                   |          |          |                     |                     kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                      --25.11%-- intel_sdvo_master_xfer
                   |          |          |                                i2c_transfer
                   |          |          |                                drm_do_probe_ddc_edid
                   |          |          |                                drm_get_edid
                   |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |                                intel_sdvo_detect
                   |          |          |                                output_poll_execute
                   |          |          |                                process_one_work
                   |          |          |                                worker_thread
                   |          |          |                                kthread
                   |          |          |                                kernel_thread_helper
                   |          |          |          
                   |          |          |--8.40%-- i2c_stop
                   |          |          |          |          
                   |          |          |          |--81.46%-- bit_xfer
                   |          |          |          |          |          
                   |          |          |          |          |--77.24%-- i2c_transfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--56.12%-- intel_sdvo_write_byte
                   |          |          |          |          |          |          |          
                   |          |          |          |          |          |          |--78.63%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          |          
                   |          |          |          |          |          |           --21.37%-- intel_sdvo_write_cmd
                   |          |          |          |          |          |                     intel_sdvo_detect
                   |          |          |          |          |          |                     output_poll_execute
                   |          |          |          |          |          |                     process_one_work
                   |          |          |          |          |          |                     worker_thread
                   |          |          |          |          |          |                     kthread
                   |          |          |          |          |          |                     kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --43.88%-- intel_sdvo_read_byte
                   |          |          |          |          |                     intel_sdvo_read_response
                   |          |          |          |          |                     intel_sdvo_detect
                   |          |          |          |          |                     output_poll_execute
                   |          |          |          |          |                     process_one_work
                   |          |          |          |          |                     worker_thread
                   |          |          |          |          |                     kthread
                   |          |          |          |          |                     kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --22.76%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --18.54%-- try_address
                   |          |          |                     bit_xfer
                   |          |          |                     intel_sdvo_master_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     drm_do_probe_ddc_edid
                   |          |          |                     drm_get_edid
                   |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |          |--5.89%-- i2c_start
                   |          |          |          |          
                   |          |          |          |--86.80%-- bit_xfer
                   |          |          |          |          |          
                   |          |          |          |          |--84.79%-- i2c_transfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--52.45%-- intel_sdvo_read_byte
                   |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--35.83%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --11.72%-- intel_sdvo_write_byte
                   |          |          |          |          |                     intel_sdvo_write_cmd
                   |          |          |          |          |                     intel_sdvo_detect
                   |          |          |          |          |                     output_poll_execute
                   |          |          |          |          |                     process_one_work
                   |          |          |          |          |                     worker_thread
                   |          |          |          |          |                     kthread
                   |          |          |          |          |                     kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --15.21%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --13.20%-- try_address
                   |          |          |                     bit_xfer
                   |          |          |                     intel_sdvo_master_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     drm_do_probe_ddc_edid
                   |          |          |                     drm_get_edid
                   |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |          |--3.80%-- i2c_repstart
                   |          |          |          bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          |          
                   |          |          |          |--79.53%-- intel_sdvo_read_byte
                   |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --20.47%-- intel_sdvo_master_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     drm_do_probe_ddc_edid
                   |          |          |                     drm_get_edid
                   |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |           --2.33%-- bit_xfer
                   |          |                     i2c_transfer
                   |          |                     |          
                   |          |                     |--66.56%-- intel_sdvo_read_byte
                   |          |                     |          intel_sdvo_read_response
                   |          |                     |          intel_sdvo_detect
                   |          |                     |          output_poll_execute
                   |          |                     |          process_one_work
                   |          |                     |          worker_thread
                   |          |                     |          kthread
                   |          |                     |          kernel_thread_helper
                   |          |                     |          
                   |          |                      --33.44%-- intel_sdvo_master_xfer
                   |          |                                i2c_transfer
                   |          |                                drm_do_probe_ddc_edid
                   |          |                                drm_get_edid
                   |          |                                intel_sdvo_hdmi_sink_detect
                   |          |                                intel_sdvo_detect
                   |          |                                output_poll_execute
                   |          |                                process_one_work
                   |          |                                worker_thread
                   |          |                                kthread
                   |          |                                kernel_thread_helper
                   |          |          
                   |           --0.94%-- ata_sff_pio_task
                   |                     process_one_work
                   |                     worker_thread
                   |                     kthread
                   |                     kernel_thread_helper
                   |          
                   |--41.27%-- __udelay
                   |          |          
                   |          |--47.81%-- sclhi
                   |          |          |          
                   |          |          |--80.24%-- i2c_outb
                   |          |          |          |          
                   |          |          |          |--67.22%-- try_address
                   |          |          |          |          bit_xfer
                   |          |          |          |          |          
                   |          |          |          |          |--74.33%-- i2c_transfer
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--55.74%-- intel_sdvo_read_byte
                   |          |          |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |          |--24.93%-- intel_sdvo_master_xfer
                   |          |          |          |          |          |          i2c_transfer
                   |          |          |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          |          |          drm_get_edid
                   |          |          |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          |          process_one_work
                   |          |          |          |          |          |          worker_thread
                   |          |          |          |          |          |          kthread
                   |          |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          |          
                   |          |          |          |          |           --19.33%-- intel_sdvo_write_byte
                   |          |          |          |          |                     |          
                   |          |          |          |          |                     |--69.27%-- intel_sdvo_master_xfer
                   |          |          |          |          |                     |          i2c_transfer
                   |          |          |          |          |                     |          drm_do_probe_ddc_edid
                   |          |          |          |          |                     |          drm_get_edid
                   |          |          |          |          |                     |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          |                     |          intel_sdvo_detect
                   |          |          |          |          |                     |          output_poll_execute
                   |          |          |          |          |                     |          process_one_work
                   |          |          |          |          |                     |          worker_thread
                   |          |          |          |          |                     |          kthread
                   |          |          |          |          |                     |          kernel_thread_helper
                   |          |          |          |          |                     |          
                   |          |          |          |          |                      --30.73%-- intel_sdvo_write_cmd
                   |          |          |          |          |                                intel_sdvo_detect
                   |          |          |          |          |                                output_poll_execute
                   |          |          |          |          |                                process_one_work
                   |          |          |          |          |                                worker_thread
                   |          |          |          |          |                                kthread
                   |          |          |          |          |                                kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --25.67%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --32.78%-- bit_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     |          
                   |          |          |                     |--45.56%-- intel_sdvo_write_byte
                   |          |          |                     |          |          
                   |          |          |                     |          |--51.26%-- intel_sdvo_master_xfer
                   |          |          |                     |          |          i2c_transfer
                   |          |          |                     |          |          drm_do_probe_ddc_edid
                   |          |          |                     |          |          drm_get_edid
                   |          |          |                     |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |                     |          |          intel_sdvo_detect
                   |          |          |                     |          |          output_poll_execute
                   |          |          |                     |          |          process_one_work
                   |          |          |                     |          |          worker_thread
                   |          |          |                     |          |          kthread
                   |          |          |                     |          |          kernel_thread_helper
                   |          |          |                     |          |          
                   |          |          |                     |           --48.74%-- intel_sdvo_write_cmd
                   |          |          |                     |                     intel_sdvo_detect
                   |          |          |                     |                     output_poll_execute
                   |          |          |                     |                     process_one_work
                   |          |          |                     |                     worker_thread
                   |          |          |                     |                     kthread
                   |          |          |                     |                     kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                     |--28.14%-- intel_sdvo_read_byte
                   |          |          |                     |          intel_sdvo_read_response
                   |          |          |                     |          intel_sdvo_detect
                   |          |          |                     |          output_poll_execute
                   |          |          |                     |          process_one_work
                   |          |          |                     |          worker_thread
                   |          |          |                     |          kthread
                   |          |          |                     |          kernel_thread_helper
                   |          |          |                     |          
                   |          |          |                      --26.31%-- intel_sdvo_master_xfer
                   |          |          |                                i2c_transfer
                   |          |          |                                drm_do_probe_ddc_edid
                   |          |          |                                drm_get_edid
                   |          |          |                                intel_sdvo_hdmi_sink_detect
                   |          |          |                                intel_sdvo_detect
                   |          |          |                                output_poll_execute
                   |          |          |                                process_one_work
                   |          |          |                                worker_thread
                   |          |          |                                kthread
                   |          |          |                                kernel_thread_helper
                   |          |          |          
                   |          |          |--15.21%-- bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          |          
                   |          |          |          |--50.56%-- intel_sdvo_master_xfer
                   |          |          |          |          i2c_transfer
                   |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          drm_get_edid
                   |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --49.44%-- intel_sdvo_read_byte
                   |          |          |                     intel_sdvo_read_response
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |          |--2.26%-- i2c_stop
                   |          |          |          bit_xfer
                   |          |          |          |          
                   |          |          |          |--65.95%-- i2c_transfer
                   |          |          |          |          intel_sdvo_read_byte
                   |          |          |          |          intel_sdvo_read_response
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --34.05%-- intel_sdvo_master_xfer
                   |          |          |                     i2c_transfer
                   |          |          |                     drm_do_probe_ddc_edid
                   |          |          |                     drm_get_edid
                   |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |          |--1.52%-- acknak
                   |          |          |          bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          intel_sdvo_read_byte
                   |          |          |          intel_sdvo_read_response
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --0.77%-- i2c_repstart
                   |          |                     bit_xfer
                   |          |                     i2c_transfer
                   |          |                     intel_sdvo_master_xfer
                   |          |                     i2c_transfer
                   |          |                     drm_do_probe_ddc_edid
                   |          |                     drm_get_edid
                   |          |                     intel_sdvo_hdmi_sink_detect
                   |          |                     intel_sdvo_detect
                   |          |                     output_poll_execute
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |          |--35.95%-- i2c_outb
                   |          |          |          
                   |          |          |--54.57%-- bit_xfer
                   |          |          |          i2c_transfer
                   |          |          |          |          
                   |          |          |          |--44.96%-- intel_sdvo_master_xfer
                   |          |          |          |          i2c_transfer
                   |          |          |          |          drm_do_probe_ddc_edid
                   |          |          |          |          drm_get_edid
                   |          |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          |          intel_sdvo_detect
                   |          |          |          |          output_poll_execute
                   |          |          |          |          process_one_work
                   |          |          |          |          worker_thread
                   |          |          |          |          kthread
                   |          |          |          |          kernel_thread_helper
                   |          |          |          |          
                   |          |          |          |--30.17%-- intel_sdvo_write_byte
                   |          |          |          |          |          
                   |          |          |          |          |--62.78%-- intel_sdvo_write_cmd
                   |          |          |          |          |          intel_sdvo_detect
                   |          |          |          |          |          output_poll_execute
                   |          |          |          |          |          process_one_work
                   |          |          |          |          |          worker_thread
                   |          |          |          |          |          kthread
                   |          |          |          |          |          kernel_thread_helper
                   |          |          |          |          |          
                   |          |          |          |           --37.22%-- intel_sdvo_master_xfer
                   |          |          |          |                     i2c_transfer
                   |          |          |          |                     drm_do_probe_ddc_edid
                   |          |          |          |                     drm_get_edid
                   |          |          |          |                     intel_sdvo_hdmi_sink_detect
                   |          |          |          |                     intel_sdvo_detect
                   |          |          |          |                     output_poll_execute
                   |          |          |          |                     process_one_work
                   |          |          |          |                     worker_thread
                   |          |          |          |                     kthread
                   |          |          |          |                     kernel_thread_helper
                   |          |          |          |          
                   |          |          |           --24.87%-- intel_sdvo_read_byte
                   |          |          |                     intel_sdvo_read_response
                   |          |          |                     intel_sdvo_detect
                   |          |          |                     output_poll_execute
                   |          |          |                     process_one_work
                   |          |          |                     worker_thread
                   |          |          |                     kthread
                   |          |          |                     kernel_thread_helper
                   |          |          |          
                   |          |           --45.43%-- try_address
                   |          |                     bit_xfer
                   |          |                     |          
                   |          |                     |--61.71%-- i2c_transfer
                   |          |                     |          |          
                   |          |                     |          |--54.76%-- intel_sdvo_read_byte
                   |          |                     |          |          intel_sdvo_read_response
                   |          |                     |          |          intel_sdvo_detect
                   |          |                     |          |          output_poll_execute
                   |          |                     |          |          process_one_work
                   |          |                     |          |          worker_thread
                   |          |                     |          |          kthread
                   |          |                     |          |          kernel_thread_helper
                   |          |                     |          |          
                   |          |                     |          |--23.35%-- intel_sdvo_write_byte
                   |          |                     |          |          |          
                   |          |                     |          |          |--68.82%-- intel_sdvo_write_cmd
                   |          |                     |          |          |          intel_sdvo_detect
                   |          |                     |          |          |          output_poll_execute
                   |          |                     |          |          |          process_one_work
                   |          |                     |          |          |          worker_thread
                   |          |                     |          |          |          kthread
                   |          |                     |          |          |          kernel_thread_helper
                   |          |                     |          |          |          
                   |          |                     |          |           --31.18%-- intel_sdvo_master_xfer
                   |          |                     |          |                     i2c_transfer
                   |          |                     |          |                     drm_do_probe_ddc_edid
                   |          |                     |          |                     drm_get_edid
                   |          |                     |          |                     intel_sdvo_hdmi_sink_detect
                   |          |                     |          |                     intel_sdvo_detect
                   |          |                     |          |                     output_poll_execute
                   |          |                     |          |                     process_one_work
                   |          |                     |          |                     worker_thread
                   |          |                     |          |                     kthread
                   |          |                     |          |                     kernel_thread_helper
                   |          |                     |          |          
                   |          |                     |           --21.89%-- intel_sdvo_master_xfer
                   |          |                     |                     i2c_transfer
                   |          |                     |                     drm_do_probe_ddc_edid
                   |          |                     |                     drm_get_edid
                   |          |                     |                     intel_sdvo_hdmi_sink_detect
                   |          |                     |                     intel_sdvo_detect
                   |          |                     |                     output_poll_execute
                   |          |                     |                     process_one_work
                   |          |                     |                     worker_thread
                   |          |                     |                     kthread
                   |          |                     |                     kernel_thread_helper
                   |          |                     |          
                   |          |                      --38.29%-- intel_sdvo_master_xfer
                   |          |                                i2c_transfer
                   |          |                                drm_do_probe_ddc_edid
                   |          |                                drm_get_edid
                   |          |                                intel_sdvo_hdmi_sink_detect
                   |          |                                intel_sdvo_detect
                   |          |                                output_poll_execute
                   |          |                                process_one_work
                   |          |                                worker_thread
                   |          |                                kthread
                   |          |                                kernel_thread_helper
                   |          |          
                   |          |--5.39%-- bit_xfer
                   |          |          i2c_transfer
                   |          |          |          
                   |          |          |--72.70%-- intel_sdvo_read_byte
                   |          |          |          intel_sdvo_read_response
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --27.30%-- intel_sdvo_master_xfer
                   |          |                     i2c_transfer
                   |          |                     drm_do_probe_ddc_edid
                   |          |                     drm_get_edid
                   |          |                     intel_sdvo_hdmi_sink_detect
                   |          |                     intel_sdvo_detect
                   |          |                     output_poll_execute
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |          |--2.94%-- i2c_start
                   |          |          |          
                   |          |          |--62.60%-- try_address
                   |          |          |          bit_xfer
                   |          |          |          intel_sdvo_master_xfer
                   |          |          |          i2c_transfer
                   |          |          |          drm_do_probe_ddc_edid
                   |          |          |          drm_get_edid
                   |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --37.40%-- bit_xfer
                   |          |                     i2c_transfer
                   |          |                     intel_sdvo_write_byte
                   |          |                     |          
                   |          |                     |--66.68%-- intel_sdvo_master_xfer
                   |          |                     |          i2c_transfer
                   |          |                     |          drm_do_probe_ddc_edid
                   |          |                     |          drm_get_edid
                   |          |                     |          intel_sdvo_hdmi_sink_detect
                   |          |                     |          intel_sdvo_detect
                   |          |                     |          output_poll_execute
                   |          |                     |          process_one_work
                   |          |                     |          worker_thread
                   |          |                     |          kthread
                   |          |                     |          kernel_thread_helper
                   |          |                     |          
                   |          |                      --33.32%-- intel_sdvo_write_cmd
                   |          |                                intel_sdvo_detect
                   |          |                                output_poll_execute
                   |          |                                process_one_work
                   |          |                                worker_thread
                   |          |                                kthread
                   |          |                                kernel_thread_helper
                   |          |          
                   |          |--2.83%-- i2c_stop
                   |          |          |          
                   |          |          |--52.04%-- try_address
                   |          |          |          bit_xfer
                   |          |          |          intel_sdvo_master_xfer
                   |          |          |          i2c_transfer
                   |          |          |          drm_do_probe_ddc_edid
                   |          |          |          drm_get_edid
                   |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --47.96%-- bit_xfer
                   |          |                     i2c_transfer
                   |          |                     |          
                   |          |                     |--51.56%-- intel_sdvo_read_byte
                   |          |                     |          intel_sdvo_read_response
                   |          |                     |          intel_sdvo_detect
                   |          |                     |          output_poll_execute
                   |          |                     |          process_one_work
                   |          |                     |          worker_thread
                   |          |                     |          kthread
                   |          |                     |          kernel_thread_helper
                   |          |                     |          
                   |          |                     |--27.13%-- intel_sdvo_master_xfer
                   |          |                     |          i2c_transfer
                   |          |                     |          drm_do_probe_ddc_edid
                   |          |                     |          drm_get_edid
                   |          |                     |          intel_sdvo_hdmi_sink_detect
                   |          |                     |          intel_sdvo_detect
                   |          |                     |          output_poll_execute
                   |          |                     |          process_one_work
                   |          |                     |          worker_thread
                   |          |                     |          kthread
                   |          |                     |          kernel_thread_helper
                   |          |                     |          
                   |          |                      --21.31%-- intel_sdvo_write_byte
                   |          |                                intel_sdvo_write_cmd
                   |          |                                intel_sdvo_detect
                   |          |                                output_poll_execute
                   |          |                                process_one_work
                   |          |                                worker_thread
                   |          |                                kthread
                   |          |                                kernel_thread_helper
                   |          |          
                   |          |--2.56%-- i2c_repstart
                   |          |          bit_xfer
                   |          |          i2c_transfer
                   |          |          |          
                   |          |          |--71.95%-- intel_sdvo_master_xfer
                   |          |          |          i2c_transfer
                   |          |          |          drm_do_probe_ddc_edid
                   |          |          |          drm_get_edid
                   |          |          |          intel_sdvo_hdmi_sink_detect
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --28.05%-- intel_sdvo_read_byte
                   |          |                     intel_sdvo_read_response
                   |          |                     intel_sdvo_detect
                   |          |                     output_poll_execute
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |          |--1.79%-- acknak
                   |          |          bit_xfer
                   |          |          i2c_transfer
                   |          |          |          
                   |          |          |--79.48%-- intel_sdvo_read_byte
                   |          |          |          intel_sdvo_read_response
                   |          |          |          intel_sdvo_detect
                   |          |          |          output_poll_execute
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --20.52%-- intel_sdvo_master_xfer
                   |          |                     i2c_transfer
                   |          |                     drm_do_probe_ddc_edid
                   |          |                     drm_get_edid
                   |          |                     intel_sdvo_hdmi_sink_detect
                   |          |                     intel_sdvo_detect
                   |          |                     output_poll_execute
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |           --0.74%-- try_address
                   |                     bit_xfer
                   |                     intel_sdvo_master_xfer
                   |                     i2c_transfer
                   |                     drm_do_probe_ddc_edid
                   |                     drm_get_edid
                   |                     intel_sdvo_hdmi_sink_detect
                   |                     intel_sdvo_detect
                   |                     output_poll_execute
                   |                     process_one_work
                   |                     worker_thread
                   |                     kthread
                   |                     kernel_thread_helper
                    --0.15%-- [...]

    10.91%          swapper  [kernel.kallsyms]            [k] read_hpet
     2.71%      kworker/0:2  [kernel.kallsyms]            [k] kmem_cache_alloc
                |
                --- kmem_cache_alloc
                   |          
                   |--33.13%-- acpi_ps_alloc_op
                   |          |          
                   |          |--76.46%-- acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |          |--14.48%-- acpi_ps_get_next_arg
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |           --9.06%-- acpi_ps_complete_this_op
                   |                     acpi_ps_complete_op
                   |                     acpi_ps_parse_loop
                   |                     acpi_ps_parse_aml
                   |                     acpi_ps_execute_method
                   |                     acpi_ns_evaluate
                   |                     acpi_ev_asynch_execute_gpe_method
                   |                     acpi_os_execute_deferred
                   |                     process_one_work
                   |                     worker_thread
                   |                     kthread
                   |                     kernel_thread_helper
                   |          
                   |--31.47%-- acpi_ut_allocate_object_desc_dbg
                   |          acpi_ut_create_internal_object_dbg
                   |          |          
                   |          |--58.69%-- acpi_ds_create_operand
                   |          |          acpi_ds_create_operands
                   |          |          acpi_ds_exec_end_op
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |          |--17.30%-- acpi_ex_opcode_2A_1T_1R
                   |          |          acpi_ds_exec_end_op
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |          |--9.58%-- acpi_ut_create_integer_object
                   |          |          |          
                   |          |          |--73.32%-- acpi_ex_read_data_from_field
                   |          |          |          acpi_ex_resolve_node_to_value
                   |          |          |          acpi_ex_resolve_to_value
                   |          |          |          acpi_ds_evaluate_name_path
                   |          |          |          acpi_ds_exec_end_op
                   |          |          |          acpi_ps_parse_loop
                   |          |          |          acpi_ps_parse_aml
                   |          |          |          acpi_ps_execute_method
                   |          |          |          acpi_ns_evaluate
                   |          |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          |          acpi_os_execute_deferred
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --26.68%-- acpi_ps_execute_method
                   |          |                     acpi_ns_evaluate
                   |          |                     acpi_ev_asynch_execute_gpe_method
                   |          |                     acpi_os_execute_deferred
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |          |--8.85%-- acpi_ex_opcode_2A_0T_1R
                   |          |          acpi_ds_exec_end_op
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |           --5.58%-- acpi_ut_copy_iobject_to_iobject
                   |                     acpi_ds_evaluate_name_path
                   |                     acpi_ds_exec_end_op
                   |                     acpi_ps_parse_loop
                   |                     acpi_ps_parse_aml
                   |                     acpi_ps_execute_method
                   |                     acpi_ns_evaluate
                   |                     acpi_ev_asynch_execute_gpe_method
                   |                     acpi_os_execute_deferred
                   |                     process_one_work
                   |                     worker_thread
                   |                     kthread
                   |                     kernel_thread_helper
                   |          
                   |--30.79%-- acpi_ut_create_generic_state
                   |          |          
                   |          |--53.14%-- acpi_ps_push_scope
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |          |--31.04%-- acpi_ds_result_push
                   |          |          |          
                   |          |          |--70.35%-- acpi_ds_exec_end_op
                   |          |          |          acpi_ps_parse_loop
                   |          |          |          acpi_ps_parse_aml
                   |          |          |          acpi_ps_execute_method
                   |          |          |          acpi_ns_evaluate
                   |          |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          |          acpi_os_execute_deferred
                   |          |          |          process_one_work
                   |          |          |          worker_thread
                   |          |          |          kthread
                   |          |          |          kernel_thread_helper
                   |          |          |          
                   |          |           --29.65%-- acpi_ds_evaluate_name_path
                   |          |                     acpi_ds_exec_end_op
                   |          |                     acpi_ps_parse_loop
                   |          |                     acpi_ps_parse_aml
                   |          |                     acpi_ps_execute_method
                   |          |                     acpi_ns_evaluate
                   |          |                     acpi_ev_asynch_execute_gpe_method
                   |          |                     acpi_os_execute_deferred
                   |          |                     process_one_work
                   |          |                     worker_thread
                   |          |                     kthread
                   |          |                     kernel_thread_helper
                   |          |          
                   |          |--10.41%-- acpi_ut_create_control_state
                   |          |          acpi_ds_exec_begin_control_op
                   |          |          acpi_ds_exec_begin_op
                   |          |          acpi_ps_parse_loop
                   |          |          acpi_ps_parse_aml
                   |          |          acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |           --5.41%-- acpi_ps_init_scope
                   |                     acpi_ds_init_aml_walk
                   |                     |          
                   |                     |--52.13%-- acpi_ds_call_control_method
                   |                     |          acpi_ps_parse_aml
                   |                     |          acpi_ps_execute_method
                   |                     |          acpi_ns_evaluate
                   |                     |          acpi_ev_asynch_execute_gpe_method
                   |                     |          acpi_os_execute_deferred
                   |                     |          process_one_work
                   |                     |          worker_thread
                   |                     |          kthread
                   |                     |          kernel_thread_helper
                   |                     |          
                   |                      --47.87%-- acpi_ps_execute_method
                   |                                acpi_ns_evaluate
                   |                                acpi_ev_asynch_execute_gpe_method
                   |                                acpi_os_execute_deferred
                   |                                process_one_work
                   |                                worker_thread
                   |                                kthread
                   |                                kernel_thread_helper
                   |          
                   |--2.84%-- acpi_ds_create_walk_state
                   |          |          
                   |          |--51.83%-- acpi_ps_execute_method
                   |          |          acpi_ns_evaluate
                   |          |          acpi_ev_asynch_execute_gpe_method
                   |          |          acpi_os_execute_deferred
                   |          |          process_one_work
                   |          |          worker_thread
                   |          |          kthread
                   |          |          kernel_thread_helper
                   |          |          
                   |           --48.17%-- acpi_ds_call_control_method
                   |                     acpi_ps_parse_aml
                   |                     acpi_ps_execute_method
                   |                     acpi_ns_evaluate
                   |                     acpi_ev_asynch_execute_gpe_method
                   |                     acpi_os_execute_deferred
                   |                     process_one_work
                   |                     worker_thread
                   |                     kthread
                   |                     kernel_thread_helper
                   |          
                   |--0.80%-- acpi_ev_asynch_execute_gpe_method
                   |          acpi_os_execute_deferred
                   |          process_one_work
                   |          worker_thread
                   |          kthread
                   |          kernel_thread_helper
                    --0.97%-- [...]


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  2:32 Intel graphics CPU usage - SDVO detect bogosity? Linus Torvalds
@ 2010-08-16  2:51 ` Markus Trippelsdorf
  2010-08-16  3:30 ` Dave Airlie
  2010-08-16  4:06 ` Andy Lutomirski
  2 siblings, 0 replies; 9+ messages in thread
From: Markus Trippelsdorf @ 2010-08-16  2:51 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	DRI mailing list, linux-kernel

On Sun, Aug 15, 2010 at 07:32:15PM -0700, Linus Torvalds wrote:
> I started wondering why 'top' was showing an otherwise idle system as
> having a load average of 0.5+, and worker threads constantly using the
> CPU.
> 
> So I did a system-wide profile, and got the attached output (look at
> it in a really wide terminal).
> 
> There seems to be something _seriously_ wrong with i915 SDVO detect.
> This is on an Apple Mac Mini (hey, your favorite problem child!), and
> apparently it spends 20% of its non-idle CPU time just doing udelay's
> for the i2c SDVO connection detection.
> 
> That sounds a bit wrong, doesn't it?
> 
> I don't know how recent this is - it might have been going on for some
> time without me noticing. It's the wife's computer, and the same thing
> doesn't seem to happen on my Core i5 desktop
> 
> Any ideas? Any information I can give about the machine?

You're not alone. I'm seeing similar things on my machine (AMD,Radeon).
The monitor outputs are polled every 10 sec in drivers/gpu/drm/drm_crtc_helper.c.

There is a patch attached to the following bug report that disables
polling and solves the problem for me:
http://bugs.freedesktop.org/show_bug.cgi?id=29536

-- 
»A man who doesn't know he is in prison can never escape.«
William S. Burroughs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  2:32 Intel graphics CPU usage - SDVO detect bogosity? Linus Torvalds
  2010-08-16  2:51 ` Markus Trippelsdorf
@ 2010-08-16  3:30 ` Dave Airlie
  2010-08-16  4:01   ` Linus Torvalds
  2010-08-16  4:06 ` Andy Lutomirski
  2 siblings, 1 reply; 9+ messages in thread
From: Dave Airlie @ 2010-08-16  3:30 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	linux-kernel, DRI mailing list

On Sun, 2010-08-15 at 19:32 -0700, Linus Torvalds wrote:
> I started wondering why 'top' was showing an otherwise idle system as
> having a load average of 0.5+, and worker threads constantly using the
> CPU.
> 
> So I did a system-wide profile, and got the attached output (look at
> it in a really wide terminal).
> 
> There seems to be something _seriously_ wrong with i915 SDVO detect.
> This is on an Apple Mac Mini (hey, your favorite problem child!), and
> apparently it spends 20% of its non-idle CPU time just doing udelay's
> for the i2c SDVO connection detection.
> 
> That sounds a bit wrong, doesn't it?

At least we should replace mdelay with msleep in those functions.

Can you get a boot with drm.debug=4?

I wonder are we picking up a bad SDVO, the insane code retries 50 times
with a hard loop delay.

Dave.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  3:30 ` Dave Airlie
@ 2010-08-16  4:01   ` Linus Torvalds
  2010-08-16  4:29     ` Dave Airlie
  0 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2010-08-16  4:01 UTC (permalink / raw)
  To: Dave Airlie
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	linux-kernel, DRI mailing list

On Sun, Aug 15, 2010 at 8:30 PM, Dave Airlie <airlied@redhat.com> wrote:
>
> At least we should replace mdelay with msleep in those functions.

How precise does the timing have to be? I think i2c is self-clocking,
so it's ok to see big skews? Becuase msleep() can be off by quite a
bit (mdelay can too, but it's _way_ more rare, and requires either a
preemptible kernel or serious interrupt activity).

> Can you get a boot with drm.debug=4?

Sure. That results in a truncated dmesg (with a 128k buffer). The
thing seems to spew out something every ten seconds:

  ...
  [  232.610044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
             (SDVO_CMD_GET_ATTACHED_DISPLAYS)
  [  232.624504] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
             (Success)
  [  232.624517] [drm:intel_sdvo_detect], SDVO response 1 0
  [  232.624524] [drm:intel_sdvo_debug_write], SDVOB: W: 7A 01
             (SDVO_CMD_SET_CONTROL_BUS_SWITCH)
  [  242.672044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
             (SDVO_CMD_GET_ATTACHED_DISPLAYS)
  [  242.686503] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
             (Success)
  [  242.686516] [drm:intel_sdvo_detect], SDVO response 1 0
  [  242.686523] [drm:intel_sdvo_debug_write], SDVOB: W: 7A 01
             (SDVO_CMD_SET_CONTROL_BUS_SWITCH)
  [  252.750044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
             (SDVO_CMD_GET_ATTACHED_DISPLAYS)
  [  252.764526] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
             (Success)
  [  252.764539] [drm:intel_sdvo_detect], SDVO response 1 0
  ...

It looks like it takes about 15 ms each time.  But 15 ms each 10s
doesn't seem to be enough to account for the load average. Maybe it
gets synchronized with the timer tick or something, causing the load
average to look artificially inflated (it also doesn't match up with
kworker using 1%+ CPU time).

So maybe there is something else going on. Maybe the load average
thing comes from some interaction with the new workqueue thing.

I'll send the whole dmesg to you in a private message, I don't think
we want 128kB of crud on lkml.

> I wonder are we picking up a bad SDVO, the insane code retries 50 times
> with a hard loop delay.

Well, I'm not seeing any failures, but maybe those don't get printed out?

                        Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  2:32 Intel graphics CPU usage - SDVO detect bogosity? Linus Torvalds
  2010-08-16  2:51 ` Markus Trippelsdorf
  2010-08-16  3:30 ` Dave Airlie
@ 2010-08-16  4:06 ` Andy Lutomirski
  2010-08-16  4:27   ` Linus Torvalds
  2 siblings, 1 reply; 9+ messages in thread
From: Andy Lutomirski @ 2010-08-16  4:06 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	DRI mailing list, linux-kernel

Linus Torvalds wrote:
> I started wondering why 'top' was showing an otherwise idle system as
> having a load average of 0.5+, and worker threads constantly using the
> CPU.
> 
> So I did a system-wide profile, and got the attached output (look at
> it in a really wide terminal).
> 
> There seems to be something _seriously_ wrong with i915 SDVO detect.
> This is on an Apple Mac Mini (hey, your favorite problem child!), and
> apparently it spends 20% of its non-idle CPU time just doing udelay's
> for the i2c SDVO connection detection.

You might be hitting the infamous hotplug storm [1].  The symptoms vary 
by kernel version.

2.6.34 and before: udevadm --monitor shows craploads of events and, as 
long as X is running, X keeps reprobing the outputs which (depending on 
the particular bug) can suck cpu in the i2c code or cause more hotplug 
events.  It also makes X oddly laggy.

2.6.35 and newer: The kernel is smart enough to probe outputs itself 
before telling X, so the events never hit userspace.  But things still 
can get a bit laggy.

Anyone know why merely *reading* /sys/class/drm/whatever/status causes 
the output to get probed?  (I see it in the code, but I have no idea why 
that code's still there after most of the rest of the hotplug code got 
cleaned up in 2.6.36).

Once I find some free time, I plan on trying to at least fix the issue 
that causes this bug for me.  (It's apparently quite nontrivial due to 
silliness in the way dock/undock (!) works on some laptops.)


[1] for example: 
http://www.mail-archive.com/intel-gfx@lists.freedesktop.org/msg00921.html

> 
> That sounds a bit wrong, doesn't it?
> 
> I don't know how recent this is - it might have been going on for some
> time without me noticing. It's the wife's computer, and the same thing
> doesn't seem to happen on my Core i5 desktop
> 
> Any ideas? Any information I can give about the machine?

If I'm right, the outputs of intel_bios_dumper and intel_bios_reader 
could be instructive (both are in intel-gpu-tools).

You could also try intel_reg_write 0x61110 0x0 and see if the problem 
stops (at least until a suspend/resume cycle).  That command turns off 
output hotplug on the card, which has the side effect that the kernel 
will stop acting on bogus interrupts.

--Andy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  4:06 ` Andy Lutomirski
@ 2010-08-16  4:27   ` Linus Torvalds
  2010-08-16 14:27     ` Andy Lutomirski
  0 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2010-08-16  4:27 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	DRI mailing list, linux-kernel

On Sun, Aug 15, 2010 at 9:06 PM, Andy Lutomirski <luto@myrealbox.com> wrote:
>
> You might be hitting the infamous hotplug storm [1].  The symptoms vary by
> kernel version.

Hmm. I don't think it's a storm. The drm.debug=4 thing shows things
just every 10 seconds. That seems pretty controlled.

Of course, it seems to be several milliseconds worth of work then, so
it's not _too_ controlled. I must be missing some detail.

> If I'm right, the outputs of intel_bios_dumper and intel_bios_reader could
> be instructive (both are in intel-gpu-tools).

My version of intel-gpu-tools must be old (fedora 12). It has
intel_gpu_dump and intel_reg_write and some other apps, but not the
bios-dumper/reader.

Not that I could read the output of them anyway, I bet ;)

> You could also try intel_reg_write 0x61110 0x0 and see if the problem stops
> (at least until a suspend/resume cycle).  That command turns off output
> hotplug on the card, which has the side effect that the kernel will stop
> acting on bogus interrupts.

  # intel_reg_write 0x61110 0x0
  Value before: 0x4000220
  Value after: 0x0

but it doesn't seem to change any behavior. Still that sdvo probe
every 10 s, and still 1% of CPU for kworker in top. But that kworker
thing definitely has to be separate from the 10-second sdvo probe,
because it shows up all the time (ie top updates every second).

But right now the wife is using that machine, so I can't check the "it
should be totally idle, what the heck is going on" behavior at the
moment.

                Linus


                          Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  4:01   ` Linus Torvalds
@ 2010-08-16  4:29     ` Dave Airlie
  0 siblings, 0 replies; 9+ messages in thread
From: Dave Airlie @ 2010-08-16  4:29 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Dave Airlie, Chris Wilson, Zhao Yakui, Jesse Barnes, Adam Jackson,
	linux-kernel, DRI mailing list

On Sun, 2010-08-15 at 21:01 -0700, Linus Torvalds wrote:
> On Sun, Aug 15, 2010 at 8:30 PM, Dave Airlie <airlied@redhat.com> wrote:
> >
> > At least we should replace mdelay with msleep in those functions.
> 
> How precise does the timing have to be? I think i2c is self-clocking,
> so it's ok to see big skews? Becuase msleep() can be off by quite a
> bit (mdelay can too, but it's _way_ more rare, and requires either a
> preemptible kernel or serious interrupt activity).

In this case it definitely doesn't matter, I expect msleep to be a much
nicer to the system in general idea esp in routines we can all at
runtime from userspace.

> 
> > Can you get a boot with drm.debug=4?
> 
> Sure. That results in a truncated dmesg (with a 128k buffer). The
> thing seems to spew out something every ten seconds:
> 
>   ...
>   [  232.610044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
>              (SDVO_CMD_GET_ATTACHED_DISPLAYS)
>   [  232.624504] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
>              (Success)
>   [  232.624517] [drm:intel_sdvo_detect], SDVO response 1 0
>   [  232.624524] [drm:intel_sdvo_debug_write], SDVOB: W: 7A 01
>              (SDVO_CMD_SET_CONTROL_BUS_SWITCH)
>   [  242.672044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
>              (SDVO_CMD_GET_ATTACHED_DISPLAYS)
>   [  242.686503] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
>              (Success)
>   [  242.686516] [drm:intel_sdvo_detect], SDVO response 1 0
>   [  242.686523] [drm:intel_sdvo_debug_write], SDVOB: W: 7A 01
>              (SDVO_CMD_SET_CONTROL_BUS_SWITCH)
>   [  252.750044] [drm:intel_sdvo_debug_write], SDVOB: W: 0B
>              (SDVO_CMD_GET_ATTACHED_DISPLAYS)
>   [  252.764526] [drm:intel_sdvo_debug_response], SDVOB: R: 01 00
>              (Success)
>   [  252.764539] [drm:intel_sdvo_detect], SDVO response 1 0
>   ...
> 
> It looks like it takes about 15 ms each time.  But 15 ms each 10s
> doesn't seem to be enough to account for the load average. Maybe it
> gets synchronized with the timer tick or something, causing the load
> average to look artificially inflated (it also doesn't match up with
> kworker using 1%+ CPU time).
> 
> So maybe there is something else going on. Maybe the load average
> thing comes from some interaction with the new workqueue thing.
> 
> I'll send the whole dmesg to you in a private message, I don't think
> we want 128kB of crud on lkml.
> 
> > I wonder are we picking up a bad SDVO, the insane code retries 50 times
> > with a hard loop delay.
> 
> Well, I'm not seeing any failures, but maybe those don't get printed out?

Oh wierd, so not where I thought it was, I expect then the SDVO HDMI
detection is completely insane,

intel_sdvo_hdmi_sink_detect looks to contain some really uninspiring
code. Might be worth adding some debug in there to see if it sinks a lot
of time.

Dave.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16  4:27   ` Linus Torvalds
@ 2010-08-16 14:27     ` Andy Lutomirski
  2010-08-16 15:13       ` [Intel-gfx] " Adam Jackson
  0 siblings, 1 reply; 9+ messages in thread
From: Andy Lutomirski @ 2010-08-16 14:27 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-kernel, DRI mailing list, intel-gfx

[cc: intel-gfx]

Linus Torvalds wrote:
 > On Sun, Aug 15, 2010 at 9:06 PM, Andy Lutomirski <luto@myrealbox.com> wrote:
 >> You might be hitting the infamous hotplug storm [1].  The symptoms vary by
 >> kernel version.
 >
 > Hmm. I don't think it's a storm. The drm.debug=4 thing shows things
 > just every 10 seconds. That seems pretty controlled.

OK, probably not the hotplug storm.  That's always been at least once per
second and sometimes several for me.

 >
 > Of course, it seems to be several milliseconds worth of work then, so
 > it's not _too_ controlled. I must be missing some detail.
 >
 >> If I'm right, the outputs of intel_bios_dumper and intel_bios_reader could
 >> be instructive (both are in intel-gpu-tools).
 >
 > My version of intel-gpu-tools must be old (fedora 12). It has
 > intel_gpu_dump and intel_reg_write and some other apps, but not the
 > bios-dumper/reader.
 >
 > Not that I could read the output of them anyway, I bet ;)
 >
 >> You could also try intel_reg_write 0x61110 0x0 and see if the problem stops
 >> (at least until a suspend/resume cycle).  That command turns off output
 >> hotplug on the card, which has the side effect that the kernel will stop
 >> acting on bogus interrupts.
 >
 >   # intel_reg_write 0x61110 0x0
 >   Value before: 0x4000220
 >   Value after: 0x0
 >
 > but it doesn't seem to change any behavior. Still that sdvo probe
 > every 10 s, and still 1% of CPU for kworker in top. But that kworker
 > thing definitely has to be separate from the 10-second sdvo probe,
 > because it shows up all the time (ie top updates every second).

Almost certainly not the hotplug storm bug.

The 10 seconds is probably the timer in output_poll_execute (drm_crtc_helper.c):

#define DRM_OUTPUT_POLL_PERIOD (10*HZ)

The code in output_poll_execute (which is in your perf output) looks wrong:

         list_for_each_entry(connector, &dev->mode_config.connector_list, head) {

                 /* if this is HPD or polled don't check it -
                    TV out for instance */
                 if (!connector->polled)
                         continue;

                 else if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT))
                         repoll = true;

[ so if we have DRM_CONNECTOR_POLL_CONNECT set we requeue the *entire*
   work item.  or if we have DRM_CONNECTOR_POLL_DISCONNECT and it's not
   even connected, we still poll. ]

                 old_status = connector->status;
                 /* if we are connected and don't want to poll for disconnect
                    skip it */
                 if (old_status == connector_status_connected &&
                     !(connector->polled & DRM_CONNECTOR_POLL_DISCONNECT) &&
                     !(connector->polled & DRM_CONNECTOR_POLL_HPD))
                         continue;

[ but if the status isn't connector_status_connected, we poll it even if we're
   only in here due to a *different* connector ]

                 status = connector->funcs->detect(connector);

[ ->detect is the expensive part ]

                 if (old_status != status)
                         changed = true;
         }

But that's really the problem, because intel_sdvo_dvi_init contains:

         connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;

I don't know if SDVO is supposed to send hotplug interrupts because that section of the docs is incomplete.

--Andy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Intel-gfx] Intel graphics CPU usage - SDVO detect bogosity?
  2010-08-16 14:27     ` Andy Lutomirski
@ 2010-08-16 15:13       ` Adam Jackson
  0 siblings, 0 replies; 9+ messages in thread
From: Adam Jackson @ 2010-08-16 15:13 UTC (permalink / raw)
  To: Andy Lutomirski; +Cc: Linus Torvalds, intel-gfx, linux-kernel, DRI mailing list

[-- Attachment #1: Type: text/plain, Size: 1095 bytes --]

On Mon, 2010-08-16 at 10:27 -0400, Andy Lutomirski wrote:

> But that's really the problem, because intel_sdvo_dvi_init contains:
> 
>          connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
> 
> I don't know if SDVO is supposed to send hotplug interrupts because
> that section of the docs is incomplete.

SDVO can generate interrupts, although a particular SDVO output type
might not.  (The G45 docs are missing this section, but the 965 docs are
applicable.)  We don't have that turned on, of course, because that
would be entirely too sensible.

You'd probably need to uncomment the #if 0'd intel_sdvo_set_hotplug() in
intel_sdvo.c, and call that from the appropriate bit of
intel_sdvo_init().  For pre-gen4 you'd probably also need to set
SDVO_INTERRUPT_ENABLE in the appropriate SDVOx register, but in gen4+
that bit is used for bpc selection.

Having done that you'd then need to wait the inevitable six months to
find out which SDVO devices actually have functioning hotplug and which
ones are just plain lying about it.

- ajax

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-08-16 15:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-16  2:32 Intel graphics CPU usage - SDVO detect bogosity? Linus Torvalds
2010-08-16  2:51 ` Markus Trippelsdorf
2010-08-16  3:30 ` Dave Airlie
2010-08-16  4:01   ` Linus Torvalds
2010-08-16  4:29     ` Dave Airlie
2010-08-16  4:06 ` Andy Lutomirski
2010-08-16  4:27   ` Linus Torvalds
2010-08-16 14:27     ` Andy Lutomirski
2010-08-16 15:13       ` [Intel-gfx] " Adam Jackson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox