1. 17 Nov, 2017 5 commits
    • Maarten Lankhorst's avatar
      drm/i915: Pass idle crtc_state to intel_dp_sink_crc · 93313538
      Maarten Lankhorst authored
      IPS can only be enabled if the primary plane is visible, so
      first make sure sw state matches hw state by waiting for hw_done.
      
      After this pass crtc_state to intel_dp_sink_crc() so that can be used,
      instead of using legacy pointers.
      Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171110113503.16253-7-maarten.lankhorst@linux.intel.comReviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      93313538
    • Maarten Lankhorst's avatar
      drm/i915: Enable FIFO underrun reporting after initial fastset, v4. · 33a49868
      Maarten Lankhorst authored
      The firmware may have set up the pipe correctly, but the FIFO
      underrun and CRC interrupts are likely not enabled.
      
      This resulted in debugfs_test.read_all_entries failing on haswell,
      because of a timeout when reading the crc debugfs entry.
      
      Solve this by enabling FIFO underrun reporting after the initial
      fastset, which lets interrupts be generated as expected.
      
      Changes since v1:
      - Always enable CPU FIFO underrun reporting for >GEN2,
        and handle GEN2 correctly.
      Changes since v2:
      - Remove unneeded HAS_DDI, simplify GEN2 case.
      Changes since v3:
      - Use intel_crtc_pch_transcoder to determine pch transcoder for underruns. (Ville)
      - Remove crtc->config dereference in intel_crtc_pch_transcoder. (Ville)
      
      Testcase: debugfs_test.read_all_entries
      Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171113144043.58658-1-maarten.lankhorst@linux.intel.comReviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      33a49868
    • Chris Wilson's avatar
      drm/i915: Mark the userptr invalidate workqueue as WQ_MEM_RECLAIM · 41729bf2
      Chris Wilson authored
      Commit  21cc6431 ("drm/i915: Mark the userptr invalidate workqueue
      as WQ_MEM_RECLAIM") tried to fixup the check_flush_dependency warning
      for hitting i915_gem_userptr_mn_invalidate_range_start from within the
      shrinker, but I failed to notice userptr has 2 similarly named
      workqueues. I marked up i915-userptr-acquire as WQ_MEM_RECLAIM whereas
      we only wait upon i915-userptr-release from inside the reclaim paths.
      
      [62530.869510] workqueue: PF_MEMALLOC task 7983(gem_shrink) is flushing !WQ_MEM_RECLAIM i915-userptr-release:          (null)
      [62530.869515] ------------[ cut here ]------------
      [62530.869519] WARNING: CPU: 1 PID: 7983 at kernel/workqueue.c:2434 check_flush_dependency+0x7f/0x110
      [62530.869519] Modules linked in: pegasus mii ip6table_filter ip6_tables bnep iptable_filter snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic binfmt_misc nls_iso8859_1 intel_rapl x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_intel snd_hda_codec kvm_intel snd_hda_core snd_hwdep kvm snd_pcm irqbypass snd_seq_midi snd_seq_midi_event snd_rawmidi crct10dif_pclmul crc32_pclmul 8250_dw ghash_clmulni_intel snd_seq pcbc snd_seq_device snd_timer btusb aesni_intel btrtl btbcm aes_x86_64 iwlwifi btintel crypto_simd glue_helper cryptd bluetooth snd intel_cstate input_leds idma64 intel_rapl_perf ecdh_generic serio_raw soundcore cfg80211 wmi_bmof virt_dma intel_lpss_pci intel_lpss acpi_als kfifo_buf industrialio winbond_cir soc_button_array rc_core spidev tpm_crb intel_hid acpi_pad mac_hid sparse_keymap
      [62530.869546]  parport_pc ppdev lp parport ip_tables x_tables autofs4 hid_generic usbhid i915 i2c_algo_bit prime_numbers drm_kms_helper syscopyarea e1000e sysfillrect sysimgblt fb_sys_fops ahci ptp pps_core libahci drm wmi video i2c_hid hid
      [62530.869557] CPU: 1 PID: 7983 Comm: gem_shrink Tainted: G     U  W    L  4.14.0-rc8-drm-tip-ww45-commit-1342299+ #1
      [62530.869558] Hardware name: Intel Corporation CoffeeLake Client Platform/CoffeeLake H DDR4 RVP, BIOS CNLSFWR1.R00.X098.A00.1707301945 07/30/2017
      [62530.869559] task: ffffa1049dbeec80 task.stack: ffffae7d05c44000
      [62530.869560] RIP: 0010:check_flush_dependency+0x7f/0x110
      [62530.869561] RSP: 0018:ffffae7d05c473a0 EFLAGS: 00010286
      [62530.869562] RAX: 000000000000006e RBX: ffffa1049540f400 RCX: ffffffffa3e55788
      [62530.869562] RDX: 0000000000000000 RSI: 0000000000000092 RDI: 0000000000000202
      [62530.869563] RBP: ffffae7d05c473c0 R08: 000000000000006e R09: 000000000038bb0e
      [62530.869563] R10: 0000000000000000 R11: 000000000000006e R12: ffffa1049dbeec80
      [62530.869564] R13: 0000000000000000 R14: 0000000000000000 R15: ffffae7d05c473e0
      [62530.869565] FS:  00007f621b129880(0000) GS:ffffa1050b240000(0000) knlGS:0000000000000000
      [62530.869566] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [62530.869566] CR2: 00007f6214400000 CR3: 0000000353a17003 CR4: 00000000003606e0
      [62530.869567] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [62530.869567] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [62530.869568] Call Trace:
      [62530.869570]  flush_workqueue+0x115/0x3d0
      [62530.869573]  ? wake_up_process+0x15/0x20
      [62530.869596]  i915_gem_userptr_mn_invalidate_range_start+0x12f/0x160 [i915]
      [62530.869614]  ? i915_gem_userptr_mn_invalidate_range_start+0x12f/0x160 [i915]
      [62530.869616]  __mmu_notifier_invalidate_range_start+0x55/0x80
      [62530.869618]  try_to_unmap_one+0x791/0x8b0
      [62530.869620]  ? call_rwsem_down_read_failed+0x18/0x30
      [62530.869622]  rmap_walk_anon+0x10b/0x260
      [62530.869624]  rmap_walk+0x48/0x60
      [62530.869625]  try_to_unmap+0x93/0xf0
      [62530.869626]  ? page_remove_rmap+0x2a0/0x2a0
      [62530.869627]  ? page_not_mapped+0x20/0x20
      [62530.869629]  ? page_get_anon_vma+0x90/0x90
      [62530.869630]  ? invalid_mkclean_vma+0x20/0x20
      [62530.869631]  migrate_pages+0x946/0xaa0
      [62530.869633]  ? __ClearPageMovable+0x10/0x10
      [62530.869635]  ? isolate_freepages_block+0x3c0/0x3c0
      [62530.869636]  compact_zone+0x22f/0x970
      [62530.869638]  compact_zone_order+0xa3/0xd0
      [62530.869640]  try_to_compact_pages+0x1a5/0x2a0
      [62530.869641]  ? try_to_compact_pages+0x1a5/0x2a0
      [62530.869643]  __alloc_pages_direct_compact+0x50/0x110
      [62530.869644]  __alloc_pages_slowpath+0x4da/0xf30
      [62530.869646]  __alloc_pages_nodemask+0x262/0x280
      [62530.869648]  alloc_pages_vma+0x165/0x1e0
      [62530.869649]  shmem_alloc_hugepage+0xd0/0x130
      [62530.869651]  ? __radix_tree_insert+0x45/0x230
      [62530.869652]  ? __vm_enough_memory+0x29/0x130
      [62530.869654]  shmem_alloc_and_acct_page+0x10d/0x1e0
      [62530.869655]  shmem_getpage_gfp+0x426/0xc00
      [62530.869657]  shmem_fault+0xa0/0x1e0
      [62530.869659]  ? file_update_time+0x60/0x110
      [62530.869660]  __do_fault+0x1e/0xc0
      [62530.869661]  __handle_mm_fault+0xa35/0x1170
      [62530.869662]  handle_mm_fault+0xcc/0x1c0
      [62530.869664]  __do_page_fault+0x262/0x4f0
      [62530.869666]  do_page_fault+0x2e/0xe0
      [62530.869667]  page_fault+0x22/0x30
      [62530.869668] RIP: 0033:0x404335
      [62530.869669] RSP: 002b:00007fff7829e420 EFLAGS: 00010216
      [62530.869670] RAX: 00007f6210400000 RBX: 0000000000000004 RCX: 0000000000b80000
      [62530.869670] RDX: 0000000000002e01 RSI: 0000000000008000 RDI: 0000000000000004
      [62530.869671] RBP: 0000000000000019 R08: 0000000000000002 R09: 0000000000000000
      [62530.869671] R10: 0000000000000559 R11: 0000000000000246 R12: 0000000008000000
      [62530.869672] R13: 00000000004042f0 R14: 0000000000000004 R15: 000000000000007e
      [62530.869673] Code: 00 8b b0 18 05 00 00 48 8d 8b b0 00 00 00 48 8d 90 c0 06 00 00 4d 89 f0 48 c7 c7 40 c0 c8 a3 c6 05 68 c5 e8 00 01 e8 c2 68 04 00 <0f> ff 4d 85 ed 74 18 49 8b 45 20 48 8b 70 08 8b 86 00 01 00 00
      [62530.869691] ---[ end trace 01e01ad0ff5781f8 ]---
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103739
      Fixes: 21cc6431 ("drm/i915: Mark the userptr invalidate workqueue as WQ_MEM_RECLAIM")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michał Winiarski <michal.winiarski@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171114173520.8829-1-chris@chris-wilson.co.ukReviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      41729bf2
    • Chris Wilson's avatar
      drm/i915: Add might_sleep() check to wait_for() · 290b20a6
      Chris Wilson authored
      We should long past the time of trying to use wait_for() from inside
      atomic contexts, so add a might_sleep() check to prevent misuse.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171114215655.4849-1-chris@chris-wilson.co.ukReviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      290b20a6
    • Michel Thierry's avatar
      drm/i915/selftests: Add a GuC doorbells selftest · 55bd6bd7
      Michel Thierry authored
      The first test aims to check guc_init_doorbell_hw, changing the existing
      guc clients and doorbells state before calling it.
      
      The second test tries to create as many clients as it is currently possible
      (currently limited to max number of doorbells) and exercise the doorbell
      alloc/dealloc code.
      
      Since our usage mode require very few clients/doorbells, this code has
      been exercised very lightly and it's good to have a simple test for it.
      
      As reference, this test already helped identify the bug fixed by
      commit 7f1ea2ac ("drm/i915/guc: Fix doorbell id selection").
      
      v2: Extend number of clients; check for client allocation failure when
      number of doorbells is exceeded; validate client properties; reuse
      guc_init_doorbell_hw (Chris).
      
      v3: guc_init_doorbell_hw test added per Chris suggestion.
      
      v4: Try to explain why guc_init_doorbell_hw exist and comment some
      details in the subtest.
      
      v5: Remove redundant pr_info at the beginning of each subtest (Chris);
      rebase (s/i915_guc_client/intel_guc_client/).
      Signed-off-by: default avatarMichel Thierry <michel.thierry@intel.com>
      Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171116220632.1909-1-michel.thierry@intel.comSigned-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      55bd6bd7
  2. 16 Nov, 2017 35 commits