Re: [Nouveau] [PATCH v3 4/4] drm/nouveau: Move PBN and VCPI allocation into nv50_head_atom

2019-02-04 Thread Ben Skeggs
On Sat, 2 Feb 2019 at 10:20, Lyude Paul  wrote:
>
> Atomic checks should never modify anything outside of the state that
> they're passed in. Unfortunately this appears to be exactly what we're
> doing in nv50_msto_atomic_check() where we update mstc->pbn every time
> the function is called. This hasn't caused any bugs yet, but it needs to
> be fixed in order to ensure that when committing an artificially
> duplicated state (like during system resume), that we reuse the PBN of
> that state to perform VCPI allocations and don't recalculate a different
> value from the drm connector's reported bpc.
>
> Also, move the VCPI slot allocations while we're at it as well. With
> this, removing a topology in suspend while using nouveau no longer
> causes the new atomic VCPI helpers to complain.
>
> Signed-off-by: Lyude Paul 
> Fixes: eceae1472467 ("drm/dp_mst: Start tracking per-port VCPI allocations")
> Cc: Daniel Vetter 
Reviewed-by: Ben Skeggs 

> ---
>  drivers/gpu/drm/nouveau/dispnv50/atom.h |  6 ++
>  drivers/gpu/drm/nouveau/dispnv50/disp.c | 28 +++--
>  drivers/gpu/drm/nouveau/dispnv50/head.c |  1 +
>  3 files changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/atom.h 
> b/drivers/gpu/drm/nouveau/dispnv50/atom.h
> index a194990d2b0d..b5fae5ab3fa8 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/atom.h
> +++ b/drivers/gpu/drm/nouveau/dispnv50/atom.h
> @@ -116,6 +116,12 @@ struct nv50_head_atom {
> u8 depth:4;
> } or;
>
> +   /* Currently only used for MST */
> +   struct {
> +   int pbn;
> +   u8 tu:6;
> +   } dp;
> +
> union nv50_head_atom_mask {
> struct {
> bool olut:1;
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c 
> b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> index 60d858c2f2ce..e8bb35f6d015 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> @@ -659,8 +659,6 @@ struct nv50_mstc {
>
> struct drm_display_mode *native;
> struct edid *edid;
> -
> -   int pbn;
>  };
>
>  struct nv50_msto {
> @@ -765,17 +763,26 @@ nv50_msto_atomic_check(struct drm_encoder *encoder,
> struct drm_connector *connector = conn_state->connector;
> struct nv50_mstc *mstc = nv50_mstc(connector);
> struct nv50_mstm *mstm = mstc->mstm;
> -   int bpp = connector->display_info.bpc * 3;
> +   struct nv50_head_atom *asyh = nv50_head_atom(crtc_state);
> int slots;
>
> -   mstc->pbn = drm_dp_calc_pbn_mode(crtc_state->adjusted_mode.clock,
> -bpp);
> +   /* When restoring duplicated states, we need to make sure that the
> +* bw remains the same and avoid recalculating it, as the connector's
> +* bpc may have changed after the state was duplicated
> +*/
> +   if (!state->duplicated)
> +   asyh->dp.pbn =
> +   drm_dp_calc_pbn_mode(crtc_state->adjusted_mode.clock,
> +connector->display_info.bpc * 3);
>
> if (drm_atomic_crtc_needs_modeset(crtc_state)) {
> slots = drm_dp_atomic_find_vcpi_slots(state, >mgr,
> - mstc->port, mstc->pbn);
> + mstc->port,
> + asyh->dp.pbn);
> if (slots < 0)
> return slots;
> +
> +   asyh->dp.tu = slots;
> }
>
> return nv50_outp_atomic_check_view(encoder, crtc_state, conn_state,
> @@ -786,13 +793,13 @@ static void
>  nv50_msto_enable(struct drm_encoder *encoder)
>  {
> struct nv50_head *head = nv50_head(encoder->crtc);
> +   struct nv50_head_atom *armh = nv50_head_atom(head->base.base.state);
> struct nv50_msto *msto = nv50_msto(encoder);
> struct nv50_mstc *mstc = NULL;
> struct nv50_mstm *mstm = NULL;
> struct drm_connector *connector;
> struct drm_connector_list_iter conn_iter;
> u8 proto, depth;
> -   int slots;
> bool r;
>
> drm_connector_list_iter_begin(encoder->dev, _iter);
> @@ -808,8 +815,8 @@ nv50_msto_enable(struct drm_encoder *encoder)
> if (WARN_ON(!mstc))
> return;
>
> -   slots = drm_dp_find_vcpi_slots(>mgr, mstc->pbn);
> -   r = drm_dp_mst_allocate_vcpi(>mgr, mstc->port, mstc->pbn, 
> slots);
> +   r = drm_dp_mst_allocate_vcpi(>mgr, mstc->port, armh->dp.pbn,
> +armh->dp.tu);
> WARN_ON(!r);
>
> if (!mstm->links++)
> @@ -827,8 +834,7 @@ nv50_msto_enable(struct drm_encoder *encoder)
> default: depth = 0x6; break;
> }
>
> -   mstm->outp->update(mstm->outp, head->base.index,
> -  nv50_head_atom(head->base.base.state), 

[Nouveau] [Bug 100567] Nouveau system freeze fifo: SCHED_ERROR 0a [CTXSW_TIMEOUT]

2019-02-04 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=100567

--- Comment #24 from ken...@gmail.com ---
Happened another 3 times.

Logs and stack traces:
- https://gist.github.com/kenorb/9e6537747630f72bf7cc4a5afcc288a7
- https://gist.github.com/kenorb/0e85a737488ad8c294d70dd83d2bcd13
- https://gist.github.com/kenorb/abb9db39b04b9fd551429c79c6750883

Call Trace:
 __schedule+0x29e/0x840
 schedule+0x2c/0x80
 schedule_timeout+0x258/0x360
 ? nv50_wndw_atomic_destroy_state+0x1d/0x20 [nouveau]
 dma_fence_default_wait+0x1fc/0x260
 ? dma_fence_release+0xa0/0xa0
 dma_fence_wait_timeout+0x3e/0xf0
 drm_atomic_helper_wait_for_fences+0x3f/0xc0 [drm_kms_helper]
 nv50_disp_atomic_commit_tail+0x78/0x860 [nouveau]
 ? __switch_to_asm+0x40/0x70
 ? __switch_to_asm+0x34/0x70
 nv50_disp_atomic_commit_work+0x12/0x20 [nouveau]
 process_one_work+0x20f/0x3c0
 worker_thread+0x34/0x400
 kthread+0x120/0x140
 ? pwq_unbound_release_workfn+0xd0/0xd0
 ? kthread_bind+0x40/0x40
 ret_from_fork+0x35/0x40

Workqueue: events_unbound nv50_disp_atomic_commit_work [nouveau]
Call Trace:
 __schedule+0x29e/0x840
 ? nvkm_ioctl_ntfy_get+0x5c/0x80 [nouveau]
 schedule+0x2c/0x80
 schedule_timeout+0x258/0x360
 ? nvif_object_ioctl+0x47/0x50 [nouveau]
 ? nouveau_bo_rd32+0x2a/0x30 [nouveau]
 ? nv84_fence_read+0x2c/0x30 [nouveau]
 ? nouveau_fence_no_signaling+0x2a/0x90 [nouveau]
 dma_fence_default_wait+0x1fc/0x260
 ? dma_fence_release+0xa0/0xa0
 dma_fence_wait_timeout+0x3e/0xf0
 drm_atomic_helper_wait_for_fences+0x3f/0xc0 [drm_kms_helper]
 nv50_disp_atomic_commit_tail+0x78/0x860 [nouveau]
 ? __switch_to_asm+0x40/0x70
 ? __switch_to_asm+0x34/0x70
 nv50_disp_atomic_commit_work+0x12/0x20 [nouveau]
 process_one_work+0x20f/0x3c0
 worker_thread+0x34/0x400
 kthread+0x120/0x140
 ? pwq_unbound_release_workfn+0xd0/0xd0
 ? kthread_bind+0x40/0x40
 ret_from_fork+0x35/0x40
INFO: task kworker/u72:1:35901 blocked for more than 120 seconds.
  Tainted: GW  O  4.18.0-13-generic #14-Ubuntu

INFO: task Xorg:5761 blocked for more than 120 seconds.
  Tainted: G   O  4.18.0-13-generic #14-Ubuntu
XorgD0  5761   5759 0x0004
Call Trace:
 __schedule+0x29e/0x840
 ? kfree+0x15b/0x180
 schedule+0x2c/0x80
 schedule_preempt_disabled+0xe/0x10
 __ww_mutex_lock.isra.6+0x3c1/0x660
 __ww_mutex_lock_slowpath+0x16/0x20
 ww_mutex_lock+0x34/0x50
 drm_modeset_lock+0x6e/0xb0 [drm]
 drm_crtc_get_sequence_ioctl+0xbc/0x190 [drm]
 ? drm_wait_vblank_ioctl+0x610/0x610 [drm]
 drm_ioctl_kernel+0xa4/0xf0 [drm]
 drm_ioctl+0x227/0x400 [drm]
 ? drm_wait_vblank_ioctl+0x610/0x610 [drm]
 ? ep_modify+0x160/0x160
 nouveau_drm_ioctl+0x73/0xc0 [nouveau]
 do_vfs_ioctl+0xa8/0x620
 ? __sys_recvmsg+0x88/0xa0
 ksys_ioctl+0x67/0x90
 __x64_sys_ioctl+0x1a/0x20
 do_syscall_64+0x5a/0x110
 entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x7f8bb9f703c7
Code: Bad RIP value.
RSP: 002b:7ffd077cc868 EFLAGS: 0246 ORIG_RAX: 0010
RAX: ffda RBX: 7ffd077cc900 RCX: 7f8bb9f703c7
RDX: 7ffd077cc8a0 RSI: c018643b RDI: 000e
RBP: 7ffd077cc8a0 R08:  R09: 55aba56d3850
R10:  R11: 0246 R12: c018643b
R13: 000e R14: 55aba5402c30 R15: 55aba531dcb0
INFO: task kworker/u72:1:8681 blocked for more than 120 seconds.
  Tainted: G   O  4.18.0-13-generic #14-Ubuntu

INFO: task kworker/u72:3:14273 blocked for more than 120 seconds.
  Tainted: G   O  4.18.0-13-generic #14-Ubuntu
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kworker/u72:3   D0 14273  2 0x8000
Workqueue: events_unbound nv50_disp_atomic_commit_work [nouveau]
Call Trace:
 __schedule+0x29e/0x840
 schedule+0x2c/0x80
 schedule_timeout+0x258/0x360
 ? nv50_wndw_atomic_destroy_state+0x1d/0x20 [nouveau]
 dma_fence_default_wait+0x1fc/0x260
 ? dma_fence_release+0xa0/0xa0
 dma_fence_wait_timeout+0x3e/0xf0
 drm_atomic_helper_wait_for_fences+0x3f/0xc0 [drm_kms_helper]
 nv50_disp_atomic_commit_tail+0x78/0x860 [nouveau]
 ? __switch_to_asm+0x40/0x70
 ? __switch_to_asm+0x34/0x70
 nv50_disp_atomic_commit_work+0x12/0x20 [nouveau]
 process_one_work+0x20f/0x3c0
 worker_thread+0x34/0x400
 kthread+0x120/0x140
 ? pwq_unbound_release_workfn+0xd0/0xd0
 ? kthread_bind+0x40/0x40
 ret_from_fork+0x35/0x40

-- 
You are receiving this mail because:
You are the assignee for the bug.___
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 100446] Backlight control not working on Pascal / GP106 using nouveau drivers

2019-02-04 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=100446

Ilia Mirkin  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|NEW |RESOLVED

-- 
You are receiving this mail because:
You are the assignee for the bug.___
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau


Re: [Nouveau] [PATCH v3 3/4] drm/atomic: Add drm_atomic_state->duplicated

2019-02-04 Thread Daniel Vetter
On Fri, Feb 01, 2019 at 07:20:03PM -0500, Lyude Paul wrote:
> Since
> 
> commit 39b50c603878 ("drm/atomic_helper: Stop modesets on unregistered
> connectors harder")
> 
> We've been failing atomic checks if they try to enable new displays on
> unregistered connectors. This is fine except for the one situation that
> breaks atomic assumptions: suspend/resume. If a connector is
> unregistered before we attempt to restore the atomic state, something we
> end up failing the atomic check that happens when trying to restore the
> state during resume.
> 
> Normally this would be OK: we try our best to make sure that the atomic
> state pre-suspend can be restored post-suspend, but failures at that
> point usually don't cause problems. That is of course, until we
> introduced the new atomic MST VCPI helpers:
> 
> [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:65:pipe B] 
> active changed
> [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] Updating routing for 
> [CONNECTOR:123:DP-5]
> [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] Disabling 
> [CONNECTOR:123:DP-5]
> [drm:drm_atomic_get_private_obj_state [drm]] Added new private object 
> 25844636 state 9fd2899a to 3a13d7b8
> WARNING: CPU: 6 PID: 1070 at drivers/gpu/drm/drm_dp_mst_topology.c:3153 
> drm_dp_atomic_release_vcpi_slots+0xb9/0x200 [drm_kms_helper]
> Modules linked in: fuse vfat fat snd_hda_codec_hdmi snd_hda_codec_realtek 
> snd_hda_codec_generic joydev iTCO_wdt i915(O) wmi_bmof intel_rapl btusb btrtl 
> x86_pkg_temp_thermal btbcm btintel coretemp i2c_algo_bit drm_kms_helper(O) 
> crc32_pclmul snd_hda_intel syscopyarea sysfillrect snd_hda_codec sysimgblt 
> snd_hda_core bluetooth fb_sys_fops snd_pcm pcspkr drm(O) psmouse snd_timer 
> mei_me ecdh_generic i2c_i801 mei i2c_core ucsi_acpi typec_ucsi typec wmi 
> thinkpad_acpi ledtrig_audio snd soundcore tpm_tis rfkill tpm_tis_core video 
> tpm acpi_pad pcc_cpufreq uas usb_storage crc32c_intel nvme serio_raw xhci_pci 
> nvme_core xhci_hcd
> CPU: 6 PID: 1070 Comm: gnome-shell Tainted: GW  O  
> 5.0.0-rc2Lyude-Test+ #1
> Hardware name: LENOVO 20L8S2N800/20L8S2N800, BIOS N22ET35W (1.12 ) 04/09/2018
> RIP: 0010:drm_dp_atomic_release_vcpi_slots+0xb9/0x200 [drm_kms_helper]
> Code: 00 4c 39 6d f0 74 49 48 8d 7b 10 48 89 f9 48 c1 e9 03 42 80 3c 21 00 0f 
> 85 d2 00 00 00 48 8b 6b 10 48 8d 5d f0 49 39 ee 75 c5 <0f> 0b 48 c7 c7 c0 78 
> b3 a0 48 89 c2 4c 89 ee e8 03 6c aa ff b8 ea
> RSP: 0018:88841235f268 EFLAGS: 00010246
> RAX: 88841bf12ab0 RBX: 88841bf12aa8 RCX: 1110837e2557
> RDX: dc00 RSI:  RDI: ed108246bde0
> RBP: 88841bf12ab8 R08: ed1083db3c93 R09: ed1083db3c92
> R10: ed1083db3c92 R11: 88841ed9e497 R12: 888419555d80
> R13: 8883bc499100 R14: 88841bf12ab8 R15: 
> FS:  7f16fbd4cd00() GS:88841ed8() knlGS:
> CS:  0010 DS:  ES:  CR0: 80050033
> CR2: 7f1687c9f000 CR3: 0003ba3cc003 CR4: 003606e0
> DR0:  DR1:  DR2: 
> DR3:  DR6: fffe0ff0 DR7: 0400
> Call Trace:
>  drm_atomic_helper_check_modeset+0xf21/0x2f50 [drm_kms_helper]
>  ? drm_atomic_helper_commit_modeset_enables+0xa90/0xa90 [drm_kms_helper]
>  ? __printk_safe_exit+0x10/0x10
>  ? save_stack+0x8c/0xb0
>  ? vprintk_func+0x96/0x1bf
>  ? __printk_safe_exit+0x10/0x10
>  intel_atomic_check+0x234/0x4750 [i915]
>  ? printk+0x9f/0xc5
>  ? kmsg_dump_rewind_nolock+0xd9/0xd9
>  ? _raw_spin_lock_irqsave+0xa4/0x140
>  ? drm_atomic_check_only+0xb1/0x28b0 [drm]
>  ? drm_dbg+0x186/0x1b0 [drm]
>  ? drm_dev_dbg+0x200/0x200 [drm]
>  ? intel_link_compute_m_n+0xb0/0xb0 [i915]
>  ? drm_mode_put_tile_group+0x20/0x20 [drm]
>  ? skl_plane_format_mod_supported+0x17f/0x1b0 [i915]
>  ? drm_plane_check_pixel_format+0x14a/0x310 [drm]
>  drm_atomic_check_only+0x13c4/0x28b0 [drm]
>  ? drm_state_info+0x220/0x220 [drm]
>  ? drm_atomic_helper_disable_plane+0x1d0/0x1d0 [drm_kms_helper]
>  ? pick_single_encoder_for_connector+0xe0/0xe0 [drm_kms_helper]
>  ? kasan_unpoison_shadow+0x35/0x40
>  drm_atomic_commit+0x3b/0x100 [drm]
>  drm_atomic_helper_set_config+0xd5/0x100 [drm_kms_helper]
>  drm_mode_setcrtc+0x636/0x1660 [drm]
>  ? vprintk_func+0x96/0x1bf
>  ? drm_dev_dbg+0x200/0x200 [drm]
>  ? drm_mode_getcrtc+0x790/0x790 [drm]
>  ? printk+0x9f/0xc5
>  ? mutex_unlock+0x1d/0x40
>  ? drm_mode_addfb2+0x2e9/0x3a0 [drm]
>  ? rcu_sync_dtor+0x2e0/0x2e0
>  ? drm_dbg+0x186/0x1b0 [drm]
>  ? set_page_dirty+0x271/0x4d0
>  drm_ioctl_kernel+0x203/0x290 [drm]
>  ? drm_mode_getcrtc+0x790/0x790 [drm]
>  ? drm_setversion+0x7f0/0x7f0 [drm]
>  ? __switch_to_asm+0x34/0x70
>  ? __switch_to_asm+0x34/0x70
>  drm_ioctl+0x445/0x950 [drm]
>  ? drm_mode_getcrtc+0x790/0x790 [drm]
>  ? drm_getunique+0x220/0x220 [drm]
>  ? expand_files.part.10+0x920/0x920
>  do_vfs_ioctl+0x1a1/0x13d0
>  ? ioctl_preallocate+0x2b0/0x2b0
>  ? 

Re: [Nouveau] [PATCH v2 3/4] drm/atomic: Add drm_atomic_state->duplicated

2019-02-04 Thread Daniel Vetter
On Fri, Feb 01, 2019 at 05:41:58PM -0500, Lyude Paul wrote:
> Important! below
> 
> On Fri, 2019-02-01 at 18:57 +0100, Daniel Vetter wrote:
> > On Thu, Jan 31, 2019 at 08:14:50PM -0500, Lyude Paul wrote:
> > > Since
> > > 
> > > commit 39b50c603878 ("drm/atomic_helper: Stop modesets on unregistered
> > > connectors harder")
> > > 
> > > We've been failing atomic checks if they try to enable new displays on
> > > unregistered connectors. This is fine except for the one situation that
> > > breaks atomic assumptions: suspend/resume. If a connector is
> > > unregistered before we attempt to restore the atomic state, something we
> > > end up failing the atomic check that happens when trying to restore the
> > > state during resume.
> > > 
> > > Normally this would be OK: we try our best to make sure that the atomic
> > > state pre-suspend can be restored post-suspend, but failures at that
> > > point usually don't cause problems. That is of course, until we
> > > introduced the new atomic MST VCPI helpers:
> > > 
> > > [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:65:pipe B]
> > > active changed
> > > [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] Updating routing
> > > for [CONNECTOR:123:DP-5]
> > > [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] Disabling
> > > [CONNECTOR:123:DP-5]
> > > [drm:drm_atomic_get_private_obj_state [drm]] Added new private object
> > > 25844636 state 9fd2899a to 3a13d7b8
> > > WARNING: CPU: 6 PID: 1070 at drivers/gpu/drm/drm_dp_mst_topology.c:3153
> > > drm_dp_atomic_release_vcpi_slots+0xb9/0x200 [drm_kms_helper]
> > > Modules linked in: fuse vfat fat snd_hda_codec_hdmi snd_hda_codec_realtek
> > > snd_hda_codec_generic joydev iTCO_wdt i915(O) wmi_bmof intel_rapl btusb
> > > btrtl x86_pkg_temp_thermal btbcm btintel coretemp i2c_algo_bit
> > > drm_kms_helper(O) crc32_pclmul snd_hda_intel syscopyarea sysfillrect
> > > snd_hda_codec sysimgblt snd_hda_core bluetooth fb_sys_fops snd_pcm pcspkr
> > > drm(O) psmouse snd_timer mei_me ecdh_generic i2c_i801 mei i2c_core
> > > ucsi_acpi typec_ucsi typec wmi thinkpad_acpi ledtrig_audio snd soundcore
> > > tpm_tis rfkill tpm_tis_core video tpm acpi_pad pcc_cpufreq uas usb_storage
> > > crc32c_intel nvme serio_raw xhci_pci nvme_core xhci_hcd
> > > CPU: 6 PID: 1070 Comm: gnome-shell Tainted: GW  O  5.0.0-
> > > rc2Lyude-Test+ #1
> > > Hardware name: LENOVO 20L8S2N800/20L8S2N800, BIOS N22ET35W (1.12 )
> > > 04/09/2018
> > > RIP: 0010:drm_dp_atomic_release_vcpi_slots+0xb9/0x200 [drm_kms_helper]
> > > Code: 00 4c 39 6d f0 74 49 48 8d 7b 10 48 89 f9 48 c1 e9 03 42 80 3c 21 00
> > > 0f 85 d2 00 00 00 48 8b 6b 10 48 8d 5d f0 49 39 ee 75 c5 <0f> 0b 48 c7 c7
> > > c0 78 b3 a0 48 89 c2 4c 89 ee e8 03 6c aa ff b8 ea
> > > RSP: 0018:88841235f268 EFLAGS: 00010246
> > > RAX: 88841bf12ab0 RBX: 88841bf12aa8 RCX: 1110837e2557
> > > RDX: dc00 RSI:  RDI: ed108246bde0
> > > RBP: 88841bf12ab8 R08: ed1083db3c93 R09: ed1083db3c92
> > > R10: ed1083db3c92 R11: 88841ed9e497 R12: 888419555d80
> > > R13: 8883bc499100 R14: 88841bf12ab8 R15: 
> > > FS:  7f16fbd4cd00() GS:88841ed8()
> > > knlGS:
> > > CS:  0010 DS:  ES:  CR0: 80050033
> > > CR2: 7f1687c9f000 CR3: 0003ba3cc003 CR4: 003606e0
> > > DR0:  DR1:  DR2: 
> > > DR3:  DR6: fffe0ff0 DR7: 0400
> > > Call Trace:
> > >  drm_atomic_helper_check_modeset+0xf21/0x2f50 [drm_kms_helper]
> > >  ? drm_atomic_helper_commit_modeset_enables+0xa90/0xa90 [drm_kms_helper]
> > >  ? __printk_safe_exit+0x10/0x10
> > >  ? save_stack+0x8c/0xb0
> > >  ? vprintk_func+0x96/0x1bf
> > >  ? __printk_safe_exit+0x10/0x10
> > >  intel_atomic_check+0x234/0x4750 [i915]
> > >  ? printk+0x9f/0xc5
> > >  ? kmsg_dump_rewind_nolock+0xd9/0xd9
> > >  ? _raw_spin_lock_irqsave+0xa4/0x140
> > >  ? drm_atomic_check_only+0xb1/0x28b0 [drm]
> > >  ? drm_dbg+0x186/0x1b0 [drm]
> > >  ? drm_dev_dbg+0x200/0x200 [drm]
> > >  ? intel_link_compute_m_n+0xb0/0xb0 [i915]
> > >  ? drm_mode_put_tile_group+0x20/0x20 [drm]
> > >  ? skl_plane_format_mod_supported+0x17f/0x1b0 [i915]
> > >  ? drm_plane_check_pixel_format+0x14a/0x310 [drm]
> > >  drm_atomic_check_only+0x13c4/0x28b0 [drm]
> > >  ? drm_state_info+0x220/0x220 [drm]
> > >  ? drm_atomic_helper_disable_plane+0x1d0/0x1d0 [drm_kms_helper]
> > >  ? pick_single_encoder_for_connector+0xe0/0xe0 [drm_kms_helper]
> > >  ? kasan_unpoison_shadow+0x35/0x40
> > >  drm_atomic_commit+0x3b/0x100 [drm]
> > >  drm_atomic_helper_set_config+0xd5/0x100 [drm_kms_helper]
> > >  drm_mode_setcrtc+0x636/0x1660 [drm]
> > >  ? vprintk_func+0x96/0x1bf
> > >  ? drm_dev_dbg+0x200/0x200 [drm]
> > >  ? drm_mode_getcrtc+0x790/0x790 [drm]
> > >  ? printk+0x9f/0xc5
> > >  ? mutex_unlock+0x1d/0x40
> > >  ? drm_mode_addfb2+0x2e9/0x3a0 [drm]
> > >  ?