[Intel-gfx] [PATCH] drm/i915: Wake up the device for the fbdev setup
Chris Wilson
chris at chris-wilson.co.uk
Sun Sep 3 12:18:40 UTC 2017
Quoting ville.syrjala at linux.intel.com (2017-09-01 20:54:56)
> From: Ville Syrjälä <ville.syrjala at 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.syrjala at 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 <chris at chris-wilson.co.uk>
-Chris
More information about the Intel-gfx
mailing list