Re: [Intel-gfx] [PATCH] drm/i915: Wake up the device for the fbdev setup
On Sun, Sep 03, 2017 at 01:18:40PM +0100, Chris Wilson wrote: > Quoting ville.syrj...@linux.intel.com (2017-09-01 20:54:56) > > From: Ville Syrjälä> > > > 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: 88046c00dc00 task.stack: c9184000 > > [ 62.518896] RIP: 0010:i915_vma_pin_iomap+0x144/0x150 [i915] > > [ 62.518919] RSP: 0018:c9187cc8 EFLAGS: 00010292 > > [ 62.518942] RAX: 002a RBX: 880460044000 RCX: > > 0006 > > [ 62.518969] RDX: 0006 RSI: 819c3e6f RDI: > > 819f1c0e > > [ 62.518996] RBP: c9187cd8 R08: 88046c00e4f0 R09: > > > > [ 62.519022] R10: 8804669ca800 R11: R12: > > 880461d2 > > [ 62.519049] R13: c9187d48 R14: 880461d2 R15: > > 880460044000 > > [ 62.519076] FS: () GS:88047ed8() > > knlGS: > > [ 62.519107] CS: 0010 DS: ES: CR0: 80050033 > > [ 62.519130] CR2: 56478ae213f0 CR3: 02c0f000 CR4: > > 003406e0 > > [ 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ä > > 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 Thanks. Pushed to dinq. -- Ville Syrjälä Intel OTC ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] drm/i915: Wake up the device for the fbdev setup
Quoting ville.syrj...@linux.intel.com (2017-09-01 20:54:56) > From: Ville Syrjälä> > 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: 88046c00dc00 task.stack: c9184000 > [ 62.518896] RIP: 0010:i915_vma_pin_iomap+0x144/0x150 [i915] > [ 62.518919] RSP: 0018:c9187cc8 EFLAGS: 00010292 > [ 62.518942] RAX: 002a RBX: 880460044000 RCX: > 0006 > [ 62.518969] RDX: 0006 RSI: 819c3e6f RDI: > 819f1c0e > [ 62.518996] RBP: c9187cd8 R08: 88046c00e4f0 R09: > > [ 62.519022] R10: 8804669ca800 R11: R12: > 880461d2 > [ 62.519049] R13: c9187d48 R14: 880461d2 R15: > 880460044000 > [ 62.519076] FS: () GS:88047ed8() > knlGS: > [ 62.519107] CS: 0010 DS: ES: CR0: 80050033 > [ 62.519130] CR2: 56478ae213f0 CR3: 02c0f000 CR4: > 003406e0 > [ 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ä 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 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH] drm/i915: Wake up the device for the fbdev setup
From: Ville Syrjälä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: 88046c00dc00 task.stack: c9184000 [ 62.518896] RIP: 0010:i915_vma_pin_iomap+0x144/0x150 [i915] [ 62.518919] RSP: 0018:c9187cc8 EFLAGS: 00010292 [ 62.518942] RAX: 002a RBX: 880460044000 RCX: 0006 [ 62.518969] RDX: 0006 RSI: 819c3e6f RDI: 819f1c0e [ 62.518996] RBP: c9187cd8 R08: 88046c00e4f0 R09: [ 62.519022] R10: 8804669ca800 R11: R12: 880461d2 [ 62.519049] R13: c9187d48 R14: 880461d2 R15: 880460044000 [ 62.519076] FS: () GS:88047ed8() knlGS: [ 62.519107] CS: 0010 DS: ES: CR0: 80050033 [ 62.519130] CR2: 56478ae213f0 CR3: 02c0f000 CR4: 003406e0 [ 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ä --- drivers/gpu/drm/i915/intel_fbdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c index 262e75c00dd2..f2bb8116227c 100644 --- a/drivers/gpu/drm/i915/intel_fbdev.c +++ b/drivers/gpu/drm/i915/intel_fbdev.c @@ -206,6 +206,7 @@ static int intelfb_create(struct drm_fb_helper *helper, } mutex_lock(>struct_mutex); + intel_runtime_pm_get(dev_priv); /* Pin the GGTT vma for our access via info->screen_base. * This also validates that any existing fb inherited from the @@ -269,6 +270,7 @@ static int intelfb_create(struct drm_fb_helper *helper, fb->width, fb->height, i915_ggtt_offset(vma)); ifbdev->vma = vma; + intel_runtime_pm_put(dev_priv); mutex_unlock(>struct_mutex); vga_switcheroo_client_fb_set(pdev, info); return 0; @@ -276,6 +278,7 @@ static int intelfb_create(struct drm_fb_helper *helper, out_unpin: intel_unpin_fb_vma(vma); out_unlock: + intel_runtime_pm_put(dev_priv); mutex_unlock(>struct_mutex); return ret; } -- 2.13.5 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx