linux/drivers/gpu/drm/i915
Chris Wilson 579de73b04 drm/i915: Exit cherryview_irq_handler() after one pass
This effectively reverts

commit 8e5fd599eb
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Wed Apr 9 13:28:50 2014 +0300

    drm/i915/chv: Make CHV irq handler loop until all interrupts are consumed

as under continuous execlists load we can saturate the IRQ handler,
destablising the tsc clock and triggering the NMI watchdog to declare a hung
CPU.

[  552.756051] clocksource: timekeeping watchdog on CPU0: Marking clocksource 'tsc' as unstable because the skew is too large:
[  552.756080] clocksource:                       'refined-jiffies' wd_now: 10003b480 wd_last: 10003b28c mask: ffffffff
[  552.756091] clocksource:                       'tsc' cs_now: d55d31aa50 cs_last: d17446166c mask: ffffffffffffffff
[  552.756210] clocksource: Switched to clocksource refined-jiffies
[  575.217870] NMI watchdog: Watchdog detected hard LOCKUP on cpu 1
[  575.217893] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.5.0-rc7+ #18
[  575.217905] Hardware name:                  /NUC5CPYB, BIOS PYBSWCEL.86A.0027.2015.0507.1758 05/07/2015
[  575.217915]  0000000000000000 ffff88027fd05bc0 ffffffff81288c6d 0000000000000000
[  575.217935]  0000000000000001 ffff88027fd05be0 ffffffff810e72d1 0000000000000000
[  575.217951]  ffff88027fd05c80 ffff88027fd05c20 ffffffff81114b60 0000000181015f1e
[  575.217967] Call Trace:
[  575.217973]  <NMI>  [<ffffffff81288c6d>] dump_stack+0x4f/0x72
[  575.217994]  [<ffffffff810e72d1>] watchdog_overflow_callback+0x151/0x160
[  575.218003]  [<ffffffff81114b60>] __perf_event_overflow+0xa0/0x1e0
[  575.218016]  [<ffffffff811154c4>] perf_event_overflow+0x14/0x20
[  575.218028]  [<ffffffff8101d2ca>] intel_pmu_handle_irq+0x1da/0x460
[  575.218042]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218052]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218064]  [<ffffffff81014ae8>] perf_event_nmi_handler+0x28/0x50
[  575.218075]  [<ffffffff81007540>] nmi_handle+0x60/0x130
[  575.218086]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218096]  [<ffffffff810079c0>] do_nmi+0x140/0x470
[  575.218108]  [<ffffffff81559ec7>] end_repeat_nmi+0x1a/0x1e
[  575.218119]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218129]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218139]  [<ffffffff814a8aae>] ? poll_idle+0x3e/0x70
[  575.218148]  <<EOE>>  [<ffffffff814a8353>] cpuidle_enter_state+0xf3/0x2f0
[  575.218164]  [<ffffffff814a8587>] cpuidle_enter+0x17/0x20
[  575.218175]  [<ffffffff810aaa3a>] call_cpuidle+0x2a/0x40
[  575.218185]  [<ffffffff810aade3>] cpu_startup_entry+0x273/0x330
[  575.218196]  [<ffffffff81033a1e>] start_secondary+0x10e/0x130

However, not servicing all available IIR within the handler does hurt the
throughput of pathological nop execbuf by about 20%, with a similar effect
upon the dispatch latency of a series of execbuf.

v2: use do {} while(0) for a smaller patch, and easier to revert again

I have reasonable confidence that we do not miss GT interrupts (as
execlists provides a stress case with a failure mechanism easily
detected by igt), however I have less confidence about all the other
sources of interrupts and worry that may lose a display hotplug
interrupt, for example.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93467
Testcase: igt/gem_exec_nop/basic # requires NMI watchdog
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Antti Koskipää <antti.koskipaa@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1457946117-6714-1-git-send-email-chris@chris-wilson.co.uk
2016-03-30 14:24:01 +01:00
..
dvo_ch7xxx.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7017.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ivch.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ns2501.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_sil164.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_tfp410.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo.h drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
i915_cmd_parser.c drm/i915: Bump command parser version for new whitelisted registers 2016-03-21 10:03:26 +01:00
i915_debugfs.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_dma.c drm/i915: Rename GGTT init functions 2016-03-30 13:47:18 +03:00
i915_drv.c drm/i915: Call intel_dp_mst_resume() before resuming displays 2016-03-30 08:23:41 +02:00
i915_drv.h drm/i915: Update DRIVER_DATE to 20160330 2016-03-30 09:33:11 +02:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_debug.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_dmabuf.c drm/i915: Use CPU mapping for userspace dma-buf mmap() 2016-02-09 11:21:03 +01:00
i915_gem_evict.c drm/i915: Rename vma->*_list to *_link for consistency 2016-02-26 13:15:39 +00:00
i915_gem_execbuffer.c drm/i915: Rename dev_priv->gtt to dev_priv->ggtt 2016-03-18 15:18:15 +02:00
i915_gem_fence.c Linux 4.4-rc4 2015-12-08 11:04:26 +10:00
i915_gem_gtt.c drm/i915: Rename GGTT init functions 2016-03-30 13:47:18 +03:00
i915_gem_gtt.h drm/i915: Rename GGTT init functions 2016-03-30 13:47:18 +03:00
i915_gem_render_state.c drm/i915: Rename intel_engine_cs struct members 2016-03-16 15:33:17 +00:00
i915_gem_render_state.h drm/i915: Rename intel_engine_cs function parameters 2016-03-16 15:33:10 +00:00
i915_gem_shrinker.c drm/i915: Rename vma->*_list to *_link for consistency 2016-02-26 13:15:39 +00:00
i915_gem_stolen.c drm/i915: Rename dev_priv->gtt to dev_priv->ggtt 2016-03-18 15:18:15 +02:00
i915_gem_tiling.c drm/i915: get runtime PM reference around GEM set_tiling IOCTL 2015-11-17 18:43:30 +02:00
i915_gem_userptr.c drm/i915: Avoid snooping with userptr where not supported 2016-03-02 13:46:21 +00:00
i915_gem.c drm/i915: Rename GGTT init functions 2016-03-30 13:47:18 +03:00
i915_gpu_error.c drm/i915: introduce for_each_engine_id() 2016-03-24 14:34:06 +00:00
i915_guc_reg.h drm/i915/guc: Add GuC ADS (Addition Data Structure) - allocation 2016-01-05 11:33:34 +01:00
i915_guc_submission.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_ioc32.c
i915_irq.c drm/i915: Exit cherryview_irq_handler() after one pass 2016-03-30 14:24:01 +01:00
i915_params.c drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_params.h drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_reg.h drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
i915_suspend.c drm/i915/bxt: Don't save/restore eDP panel power during suspend (v3) 2016-02-08 11:32:32 +02:00
i915_sysfs.c drm/i915: Hold RPM reference while setting freq limits through sysfs 2016-03-02 18:50:47 +02:00
i915_trace_points.c
i915_trace.h drm/i915: More intel_engine_cs renaming 2016-03-16 15:33:24 +00:00
i915_vgpu.c drm/i915: Rename dev_priv->gtt to dev_priv->ggtt 2016-03-18 15:18:15 +02:00
i915_vgpu.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_acpi.c drm/i915: Drop unnecessary #include <linux/vga_switcheroo.h> 2015-10-13 10:18:38 +02:00
intel_atomic_plane.c drm/i915: Pass the correct crtc state to .update_plane() 2016-03-10 13:49:31 +02:00
intel_atomic.c drm/i915: Remove some post-commit members from intel_crtc->atomic, v3. 2016-03-16 14:50:25 +01:00
intel_audio.c drm/i915: Move load time init of display/audio hooks earlier 2016-03-17 15:22:04 +02:00
intel_bios.c drm/i915: remove unused dev_priv->render_reclock_avail 2016-03-29 15:12:40 +03:00
intel_bios.h drm/i915: hide away VBT private data in a separate header 2016-03-17 11:58:57 +02:00
intel_color.c drm/i915: Implement color management on chv 2016-03-21 11:41:28 -07:00
intel_crt.c drm/i915: Move HSW/BDW pll selection logic to intel_dpll_mgr.c 2016-03-09 11:55:31 +02:00
intel_csr.c drm/i915/csr: Allow matching unknown HW steppings with generic firmware 2016-03-16 17:53:00 +02:00
intel_ddi.c drm/i915: move edp low vswing config to vbt data 2016-03-29 15:12:20 +03:00
intel_display.c drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
intel_dp_link_training.c drm/i915/dp: reduce missing TPS3 support errors to debug logging 2016-02-08 11:37:17 +02:00
intel_dp_mst.c drm/i915: Fix race condition in intel_dp_destroy_mst_connector() 2016-03-17 09:12:28 +01:00
intel_dp.c drm/i915: move edp low vswing config to vbt data 2016-03-29 15:12:20 +03:00
intel_dpll_mgr.c drm/i915: fix sparse warning for using false as NULL 2016-03-17 11:12:07 +02:00
intel_dpll_mgr.h drm/i915: Use a crtc mask instead of a refcount for dpll functions, v2. 2016-03-17 09:27:28 +01:00
intel_drv.h drm/i915: Implement color management on bdw/skl/bxt/kbl 2016-03-21 11:40:31 -07:00
intel_dsi_panel_vbt.c drm/i915/dsi: start using enum mipi_dsi_pixel_format 2016-03-16 17:55:52 +02:00
intel_dsi_pll.c drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
intel_dsi.c drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
intel_dsi.h drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
intel_dvo.c drm: Pass 'name' to drm_encoder_init() 2015-12-11 09:13:20 +01:00
intel_fbc.c drm/i915: Rename dev_priv->gtt to dev_priv->ggtt 2016-03-18 15:18:15 +02:00
intel_fbdev.c drm/i915: Fix races on fbdev 2016-03-30 08:23:41 +02:00
intel_fifo_underrun.c drm/i915: make transcoder_name return a string 2016-03-16 18:09:53 +02:00
intel_frontbuffer.c
intel_guc_fwif.h drm/i915/guc: Decouple GuC engine id from ring id 2016-01-25 10:56:30 +00:00
intel_guc_loader.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
intel_guc.h drm/i915/guc: Decouple GuC engine id from ring id 2016-01-25 10:56:30 +00:00
intel_hdmi.c Merge drm-fixes into drm-next. 2016-03-14 09:46:02 +10:00
intel_hotplug.c drm/i915: intel_hpd_init(): Fix suspend/resume reprobing 2016-01-13 10:49:42 +02:00
intel_i2c.c drm/i915: Actually retry with bit-banging after GMBUS timeout 2016-03-11 10:23:28 +02:00
intel_lrc.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
intel_lrc.h drm/i915: Rename intel_engine_cs function parameters 2016-03-16 15:33:10 +00:00
intel_lvds.c drm/i915: fix deadlock on lid open 2016-03-30 12:17:13 +02:00
intel_mocs.c drm/i915: introduce for_each_engine_id() 2016-03-24 14:34:06 +00:00
intel_mocs.h
intel_modes.c drm/i915: Add HDMI aspect ratio property for SDVO 2015-09-30 10:20:12 +02:00
intel_opregion.c drm/i915/opregion: handle VBT sizes bigger than 6 KB 2015-12-17 11:40:57 +02:00
intel_overlay.c drm/i915: Rename dev_priv->gtt to dev_priv->ggtt 2016-03-18 15:18:15 +02:00
intel_panel.c drm/i915/panel: setup pwm backlight based on connector type 2016-03-16 18:28:50 +02:00
intel_pm.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
intel_psr.c Revert "drm/i915: Enable PSR by default on Valleyview and Cherryview." 2016-03-10 13:49:22 +02:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915: introduce for_each_engine_id() 2016-03-24 14:34:06 +00:00
intel_ringbuffer.h drm/i915: Use an array of register tables in command parser 2016-03-21 10:02:01 +01:00
intel_runtime_pm.c drm/i915/bxt: add dsi transcoders 2016-03-21 12:58:58 +02:00
intel_sdvo_regs.h drm/i915/sdvo: revert bogus kernel-doc comments to normal comments 2016-01-20 10:21:34 +02:00
intel_sdvo.c drm/i915: move sdvo mappings to vbt data 2016-03-29 15:12:30 +03:00
intel_sideband.c drm/i915: Extend gpio read/write to other cores 2016-02-04 19:11:17 +02:00
intel_sprite.c drm/i915: Pass drm_frambuffer to intel_compute_page_offset() 2016-03-01 12:48:09 +02:00
intel_tv.c drm/i915: move VBT based TV presence check to intel_bios.c 2016-03-16 18:28:07 +02:00
intel_uncore.c drm/i915: Rename __force_wake_get to __force_wake_auto 2016-03-30 12:02:21 +01:00
intel_vbt_defs.h drm/i915: hide away VBT private data in a separate header 2016-03-17 11:58:57 +02:00
Kconfig drm/i915: Kconfig for extra driver debugging 2016-03-03 17:26:57 +00:00
Kconfig.debug drm/i915: Kconfig for extra driver debugging 2016-03-03 17:26:57 +00:00
Makefile drm/i915: Extract out gamma table and CSC to their own file 2016-03-21 11:39:08 -07:00