Quoting ville.syrj...@linux.intel.com (2017-09-01 20:54:56)
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Our fbdev setup requires the device to be awake for access
> through the GTT. If one boots without connected displays and
> later plugs one in, we won't have any runtime PM references when
> the fbdev setup runs. Explicitly grab a runtime PM reference during
> the fbdev setup to avoid the following spew:
> 
> [   62.518435] RPM wakelock ref not held during HW access
> [   62.518459] ------------[ cut here ]------------
> [   62.518546] WARNING: CPU: 3 PID: 37 at 
> ../drivers/gpu/drm/i915/intel_drv.h:1800 i915_vma_pin_iomap+0x144/0x150 [i915]
> [   62.518585] Modules linked in: i915 i2c_algo_bit drm_kms_helper 
> syscopyarea sysfillrect sysimgblt fb_sys_fops drm intel_gtt agpgart 
> netconsole nls_iso8859_1 nls_cp437 vfat fat efi_pstore coretemp hwmon 
> intel_rapl x86_pkg_temp_thermal e1000e efivars ptp pps_core video evdev 
> ip_tables x_tables ipv6 autofs4
> [   62.518741] CPU: 3 PID: 37 Comm: kworker/3:1 Not tainted 4.13.0-rc7-skl+ 
> #1077
> [   62.518770] Hardware name:                  /NUC7i5BNB, BIOS 
> BNKBL357.86A.0048.2017.0704.1415 07/04/2017
> [   62.518827] Workqueue: events i915_hotplug_work_func [i915]
> [   62.518853] task: ffff88046c00dc00 task.stack: ffffc90000184000
> [   62.518896] RIP: 0010:i915_vma_pin_iomap+0x144/0x150 [i915]
> [   62.518919] RSP: 0018:ffffc90000187cc8 EFLAGS: 00010292
> [   62.518942] RAX: 000000000000002a RBX: ffff880460044000 RCX: 
> 0000000000000006
> [   62.518969] RDX: 0000000000000006 RSI: ffffffff819c3e6f RDI: 
> ffffffff819f1c0e
> [   62.518996] RBP: ffffc90000187cd8 R08: ffff88046c00e4f0 R09: 
> 0000000000000000
> [   62.519022] R10: ffff8804669ca800 R11: 0000000000000000 R12: 
> ffff880461d20000
> [   62.519049] R13: ffffc90000187d48 R14: ffff880461d20000 R15: 
> ffff880460044000
> [   62.519076] FS:  0000000000000000(0000) GS:ffff88047ed80000(0000) 
> knlGS:0000000000000000
> [   62.519107] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   62.519130] CR2: 000056478ae213f0 CR3: 0000000002c0f000 CR4: 
> 00000000003406e0
> [   62.519156] Call Trace:
> [   62.519190]  intelfb_create+0x176/0x360 [i915]
> [   62.519216]  __drm_fb_helper_initial_config_and_unlock+0x1c7/0x3c0 
> [drm_kms_helper]
> [   62.519251]  drm_fb_helper_hotplug_event.part.18+0xac/0xc0 [drm_kms_helper]
> [   62.519282]  drm_fb_helper_hotplug_event+0x1a/0x20 [drm_kms_helper]
> [   62.519324]  intel_fbdev_output_poll_changed+0x1a/0x20 [i915]
> [   62.519352]  drm_kms_helper_hotplug_event+0x27/0x30 [drm_kms_helper]
> [   62.519395]  i915_hotplug_work_func+0x24e/0x2b0 [i915]
> [   62.519420]  process_one_work+0x1d3/0x6d0
> [   62.519440]  worker_thread+0x4b/0x400
> [   62.519458]  ? schedule+0x4a/0x90
> [   62.519475]  ? preempt_count_sub+0x97/0xf0
> [   62.519495]  kthread+0x114/0x150
> [   62.519511]  ? process_one_work+0x6d0/0x6d0
> [   62.519530]  ? kthread_create_on_node+0x40/0x40
> [   62.519551]  ret_from_fork+0x27/0x40
> [   62.519569] Code: c4 78 e6 e0 0f ff e9 08 ff ff ff 80 3d d5 bc 0c 00 00 0f 
> 85 0b ff ff ff 48 c7 c7 d8 50 32 a0 c6 05 c1 bc 0c 00 01 e8 9d 78 e6 e0 <0f> 
> ff e9 f1 fe ff ff 0f 1f 44 00 00 0f 1f 44 00 00 0f b6 87 98
> [   62.519771] ---[ end trace 5fbe271f991a58ae ]---
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

Ah right, the current code only works because it assumes the fbcon is
active on the display (thus holding a wakeref) anytime it writes through
the fbdev's GGTT iomapping. This is one instance where we need GGTT access
before the fbcon controls the display, hence needs an explicit wakeref.

intel_fbdev_set_suspend() is also outside of the fbcon control, I
presume that (memset_io) works because we hold a wakeref whilst doing
suspend/resume.

Reviewed-by: Chris Wilson <ch...@chris-wilson.co.uk>
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to