Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752193AbbFHF5C (ORCPT ); Mon, 8 Jun 2015 01:57:02 -0400 Received: from mail-qc0-f178.google.com ([209.85.216.178]:35629 "EHLO mail-qc0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751612AbbFHF4p (ORCPT ); Mon, 8 Jun 2015 01:56:45 -0400 Date: Sun, 7 Jun 2015 22:56:41 -0700 From: Jeremiah Mahler To: linux-kernel@vger.kernel.org, Daniel Vetter , Jani Nikula , David Airlie , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [BUG, bisect] Re: drm/i915: WARN_ON(dev_priv->mm.busy) Message-ID: <20150608055641.GA2594@hudson.localdomain> Mail-Followup-To: Jeremiah Mahler , linux-kernel@vger.kernel.org, Daniel Vetter , Jani Nikula , David Airlie , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20150607030934.GA8956@hudson.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20150607030934.GA8956@hudson.localdomain> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8045 Lines: 160 all, On Sat, Jun 06, 2015 at 08:09:34PM -0700, Jeremiah Mahler wrote: > all, > > On all my machines with Intel graphics I get the following warning > in the logs when the machine is suspended. Apparently some part of > the graphics system is busy when it should be idle. This is present > on the latest linux-next 20150604. > > ... > [ 33.141747] Suspending console(s) (use no_console_suspend to debug) > [ 33.142146] wlan0: deauthenticating from 00:1a:70:5a:6e:0b by local > choice (Reason: 3=DEAUTH_LEAVING) > [ 33.147395] queueing ieee80211 work while going to suspend > [ 33.151597] cfg80211: Calling CRDA to update world regulatory domain > [ 33.190430] sd 0:0:0:0: [sda] Synchronizing SCSI cache > [ 33.190523] sd 0:0:0:0: [sda] Stopping disk > [ 33.275743] ------------[ cut here ]------------ > [ 33.275764] WARNING: CPU: 0 PID: 1617 at > drivers/gpu/drm/i915/i915_gem.c:4808 i915_gem_suspend+0xe4/0xf0 [i915]() > [ 33.275766] WARN_ON(dev_priv->mm.busy) > [ 33.275811] Modules linked in: binfmt_misc snd_hda_codec_hdmi > hid_generic isl29018(C) industrialio regmap_i2c cyapatp crc_itu_t usbhid > hid arc4 x86_pkg_temp_thermal intel_powerclamp intel_rapl iosf_mbi > coretemp ath9k tpm_infineon kvm_intel kvm ath9k_common ath9k_hw > crct10dif_pclmul crc32_pclmul crc32c_intel chromeos_laptop ath mac80211 > ghash_clmulni_intel cryptd i915 cfg80211 pcspkr serio_raw sg ath3k btusb > btrtl lpc_ich snd_hda_codec_realtek shpchp i2c_i801 mfd_core > snd_hda_codec_generic btbcm btintel bluetooth snd_hda_intel battery > snd_hda_codec ac i2c_algo_bit drm_kms_helper tpm_tis snd_hwdep tpm > snd_hda_core drm snd_pcm video rfkill processor button snd_timer snd > soundcore i2c_designware_pci i2c_designware_core evdev uvcvideo > videobuf2_vmalloc videobuf2_memops videobuf2_core v4l2_common videodev > [ 33.275825] media i2c_core fuse autofs4 ext4 crc16 mbcache jbd2 > sd_mod fan xhci_pci sdhci_acpi sdhci xhci_hcd mmc_core thermal > thermal_sys usbcore ahci libahci usb_common libata scsi_mod > [ 33.275828] CPU: 0 PID: 1617 Comm: kworker/u4:4 Tainted: G C > 4.1.0-rc6-next-20150604+ #207 > [ 33.275829] Hardware name: Acer Peppy, BIOS 04/30/2014 > [ 33.275834] Workqueue: events_unbound async_run_entry_fn > [ 33.275838] 0000000000000000 ffffffffa05b7908 ffffffff8152ca4d > ffff880035effc58 > [ 33.275840] ffffffff8106bce1 ffff880073587f20 0000000000000000 > ffff880073580000 > [ 33.275842] ffff88003534f860 ffff880073580000 ffffffff8106bd5a > ffffffffa05c74c1 > [ 33.275843] Call Trace: > [ 33.275849] [] ? dump_stack+0x40/0x50 > [ 33.275853] [] ? warn_slowpath_common+0x81/0xb0 > [ 33.275855] [] ? warn_slowpath_fmt+0x4a/0x50 > [ 33.275865] [] ? i915_gem_suspend+0xe4/0xf0 [i915] > [ 33.275872] [] ? i915_drm_suspend+0x61/0x1b0 > [i915] > [ 33.275876] [] ? pci_pm_suspend+0x71/0x140 > [ 33.275878] [] ? pci_pm_freeze+0xd0/0xd0 > [ 33.275881] [] ? dpm_run_callback+0x39/0xd0 > [ 33.275883] [] ? __device_suspend+0xe4/0x300 > [ 33.275884] [] ? async_suspend+0x1e/0x90 > [ 33.275887] [] ? async_run_entry_fn+0x43/0x150 > [ 33.275890] [] ? process_one_work+0x148/0x3b0 > [ 33.275892] [] ? worker_thread+0x4a/0x440 > [ 33.275895] [] ? rescuer_thread+0x2e0/0x2e0 > [ 33.275898] [] ? kthread+0xc1/0xe0 > [ 33.275901] [] ? > kthread_create_on_node+0x190/0x190 > [ 33.275904] [] ? ret_from_fork+0x3f/0x70 > [ 33.275907] [] ? > kthread_create_on_node+0x190/0x190 > [ 33.275908] ---[ end trace e1c3eb5e163b3520 ]--- > [ 33.560558] PM: suspend of devices complete after 423.034 msecs > [ 33.577985] PM: late suspend of devices complete after 17.589 msecs > [ 33.579036] xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI > [ 33.594059] PM: noirq suspend of devices complete after 16.226 msecs > [ 33.594498] ACPI: Preparing to enter system sleep state S3 > [ 33.595066] ACPI : EC: EC stopped > ... > > -- > - Jeremiah Mahler I bisected the kernel and found that the following patch introduced the bug. From b47161858ba13c9c7e03333132230d66e008dd55 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 27 Apr 2015 13:41:17 +0100 Subject: [PATCH] drm/i915: Implement inter-engine read-read optimisations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, we only track the last request globally across all engines. This prevents us from issuing concurrent read requests on e.g. the RCS and BCS engines (or more likely the render and media engines). Without semaphores, we incur costly stalls as we synchronise between rings - greatly impacting the current performance of Broadwell versus Haswell in certain workloads (like video decode). With the introduction of reference counted requests, it is much easier to track the last request per ring, as well as the last global write request so that we can optimise inter-engine read read requests (as well as better optimise certain CPU waits). v2: Fix inverted readonly condition for nonblocking waits. v3: Handle non-continguous engine array after waits v4: Rebase, tidy, rewrite ring list debugging v5: Use obj->active as a bitfield, it looks cool v6: Micro-optimise, mostly involving moving code around v7: Fix retire-requests-upto for execlists (and multiple rq->ringbuf) v8: Rebase v9: Refactor i915_gem_object_sync() to allow the compiler to better optimise it. Benchmark: igt/gem_read_read_speed hsw:gt3e (with semaphores): Before: Time to read-read 1024k: 275.794µs After: Time to read-read 1024k: 123.260µs hsw:gt3e (w/o semaphores): Before: Time to read-read 1024k: 230.433µs After: Time to read-read 1024k: 124.593µs bdw-u (w/o semaphores): Before After Time to read-read 1x1: 26.274µs 10.350µs Time to read-read 128x128: 40.097µs 21.366µs Time to read-read 256x256: 77.087µs 42.608µs Time to read-read 512x512: 281.999µs 181.155µs Time to read-read 1024x1024: 1196.141µs 1118.223µs Time to read-read 2048x2048: 5639.072µs 5225.837µs Time to read-read 4096x4096: 22401.662µs 21137.067µs Time to read-read 8192x8192: 89617.735µs 85637.681µs Testcase: igt/gem_concurrent_blit (read-read and friends) Cc: Lionel Landwerlin Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin Reviewed-by: Tvrtko Ursulin [v8] [danvet: s/\/req/g] Signed-off-by: Daniel Vetter --- drivers/gpu/drm/i915/i915_debugfs.c | 16 +- drivers/gpu/drm/i915/i915_drv.h | 19 +- drivers/gpu/drm/i915/i915_gem.c | 540 ++++++++++++++++++++------------ drivers/gpu/drm/i915/i915_gem_context.c | 2 - drivers/gpu/drm/i915/i915_gem_debug.c | 92 ++---- drivers/gpu/drm/i915/i915_gpu_error.c | 19 +- drivers/gpu/drm/i915/intel_display.c | 6 +- drivers/gpu/drm/i915/intel_lrc.c | 19 +- drivers/gpu/drm/i915/intel_overlay.c | 2 - drivers/gpu/drm/i915/intel_ringbuffer.c | 26 +- 10 files changed, 416 insertions(+), 325 deletions(-) ... -- - Jeremiah Mahler -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/