Re: [Intel-gfx] [PATCH] drm/i915: Wake up the device for the fbdev setup

2017-09-04 Thread Ville Syrjälä
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

2017-09-03 Thread Chris Wilson
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

2017-09-01 Thread ville . syrjala
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