1. 15 Sep, 2020 4 commits
    • Chris Wilson's avatar
      drm/i915/gt: Check for a registered driver with IPS · 6cb304b3
      Chris Wilson authored
      If the ips module calls into the driver during an unbind/bind cycle, we
      may see the driver while it has unregistered itself from ips and try and
      dereference a NULL ips_mchdev pointer.
      
      <1> [211.928844] BUG: kernel NULL pointer dereference, address: 0000000000000014
      <1> [211.928861] #PF: supervisor read access in kernel mode
      <1> [211.928871] #PF: error_code(0x0000) - not-present page
      <6> [211.928881] PGD 0 P4D 0
      <4> [211.928890] Oops: 0000 [#1] PREEMPT SMP PTI
      <4> [211.928900] CPU: 3 PID: 327 Comm: ips-monitor Not tainted 5.9.0-rc5-CI-CI_DRM_9008+ #1
      <4> [211.928914] Hardware name: Hewlett-Packard HP EliteBook 8440p/172A, BIOS 68CCU Ver. F.24 09/13/2013
      <4> [211.929056] RIP: 0010:mchdev_get+0x5a/0x180 [i915]
      <4> [211.929067] Code: c0 5a 74 0d 80 3d f1 53 29 00 00 0f 84 ab 00 00 00 48 8b 1d c8 a8 29 00 e8 d3 18 89 e1 85 c0 74 09 80 3d d1 53 29 00 00 74 65 <8b> 4b 14 48 8d 7b 14 85 c9 0f 84 09 01 00 00 8d 51 01 89 c8 f0 0f
      <4> [211.929095] RSP: 0018:ffffc900002efe60 EFLAGS: 00010202
      <4> [211.929105] RAX: 0000000000000001 RBX: 0000000000000000 RCX: ffff8881297acf40
      <4> [211.929118] RDX: 0000000000000000 RSI: ffffffff8264e2c0 RDI: ffff8881297ad820
      <4> [211.929130] RBP: ffffc900002efe68 R08: ffff8881297ad820 R09: 00000000fffffffe
      <4> [211.929143] R10: ffff8881297acf40 R11: 00000000fff74c96 R12: ffff8881294dfa18
      <4> [211.929155] R13: 0000000000000067 R14: ffff888126eff640 R15: ffff888126efe840
      <4> [211.929168] FS:  0000000000000000(0000) GS:ffff888133d80000(0000) knlGS:0000000000000000
      <4> [211.929182] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4> [211.929194] CR2: 0000000000000014 CR3: 0000000002610000 CR4: 00000000000006e0
      <4> [211.929206] Call Trace:
      <4> [211.929294]  i915_read_mch_val+0x15/0x380 [i915]
      <4> [211.929309]  ? ips_monitor+0x3fb/0x630 [intel_ips]
      <4> [211.929321]  ips_monitor+0x53c/0x630 [intel_ips]
      <4> [211.929334]  ? ips_gpu_lower+0x30/0x30 [intel_ips]
      <4> [211.929348]  kthread+0x14d/0x170
      <4> [211.929358]  ? kthread_park+0x80/0x80
      <4> [211.929369]  ret_from_fork+0x22/0x30
      <4> [211.929382] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_generic ledtrig_audio i915 coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep snd_hda_core e1000e snd_pcm mei_me mei intel_ips lpc_ich ptp prime_numbers pps_core
      <4> [211.929437] CR2: 0000000000000014
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200915105113.26564-1-chris@chris-wilson.co.uk
      6cb304b3
    • Chris Wilson's avatar
      drm/i915/gt: Clear the buffer pool age before use · 9bb34ff2
      Chris Wilson authored
      If we create a new node, it is possible for the slab allocator to return
      us a recently freed node. If that node was just retired, it will retain
      the current jiffy as its node->age. There is then a miniscule window,
      where as that node is retired, it will appear on the free list with an
      incorrect age and be eligible for reuse by one thread, and then by a
      second thread as the correct node->age is written.
      
      Fixes: 06b73c2d ("drm/i915/gt: Delay taking the spinlock for grabbing from the buffer pool")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200915091417.4086-3-chris@chris-wilson.co.uk
      9bb34ff2
    • Chris Wilson's avatar
      drm/i915/gem: Prevent using pgprot_writecombine() if PAT is not supported · 121ba69f
      Chris Wilson authored
      Let's not try and use PAT attributes for I915_MAP_WC if the CPU doesn't
      support PAT.
      
      Fixes: 6056e500 ("drm/i915/gem: Support discontiguous lmem object maps")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Cc: <stable@vger.kernel.org> # v5.6+
      Link: https://patchwork.freedesktop.org/patch/msgid/20200915091417.4086-2-chris@chris-wilson.co.uk
      121ba69f
    • Chris Wilson's avatar
      drm/i915/gem: Avoid implicit vmap for highmem on x86-32 · 060bb115
      Chris Wilson authored
      On 32b, highmem using a finite set of indirect PTE (i.e. vmap) to provide
      virtual mappings of the high pages.  As these are finite, map_new_virtual()
      must wait for some other kmap() to finish when it runs out. If we map a
      large number of objects, there is no method for it to tell us to release
      the mappings, and we deadlock.
      
      However, if we make an explicit vmap of the page, that uses a larger
      vmalloc arena, and also has the ability to tell us to release unwanted
      mappings. Most importantly, it will fail and propagate an error instead
      of waiting forever.
      
      Fixes: fb8621d3 ("drm/i915: Avoid allocating a vmap arena for a single page") #x86-32
      References: e87666b5 ("drm/i915/shrinker: Hook up vmap allocation failure notifier")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Cc: <stable@vger.kernel.org> # v4.7+
      Link: https://patchwork.freedesktop.org/patch/msgid/20200915091417.4086-1-chris@chris-wilson.co.uk
      060bb115
  2. 07 Sep, 2020 36 commits