[Intel-gfx] Kernel Oops on 3.14.66
Andreas Lampersperger
andreas.l.jhoss at gmail.com
Thu Apr 28 08:58:49 UTC 2016
Hi Dave,
thank you again.
I searched, where the memory for the request came from, it is set in line
2158 of i915_gem.c
<https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/gpu/drm/i915/i915_gem.c?id=refs/tags/v3.14.67#n2158>
and the kmalloc is in intel_ring_alloc_seqno() in intel_ringbuffer.c
<https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/gpu/drm/i915/intel_ringbuffer.c?id=refs/tags/v3.14.67#n1600>,
right?
So I will test the following patch for intel_ringbuffer.c:
intel_ring_alloc_seqno(struct intel_ring_buffer *ring)
{
if (ring->outstanding_lazy_seqno)
return 0;
if (ring->preallocated_lazy_request == NULL) {
struct drm_i915_gem_request *request;
request = kmalloc(sizeof(*request), GFP_KERNEL);
if (request == NULL)
return -ENOMEM;
+
+ INIT_LIST_HEAD(&request->list);
ring->preallocated_lazy_request = request;
}
return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_seqno);
}
:
2016-04-27 20:28 GMT+02:00 Dave Gordon <david.s.gordon at intel.com>:
> 2016-04-27 12:03 GMT+02:00 Dave Gordon <david.s.gordon at intel.com>:
>>
>> On 27/04/16 10:19, Andreas Lampersperger wrote:
>>>
>>> Hello,
>>>>
>>>> has anyone here a hint for me, what can cause this error.
>>>> The error occures highly sporadic on different machines with intel hd
>>>> graphics (ivb_gt1).
>>>> I did also some kernel coredumps and found out, that the failed
>>>> paging request came from drm_i915_gem_request->list.prev or ->list.next.
>>>>
>>>> Thank you
>>>> Andreas
>>>>
>>>
>>> Try this patch.
>>>
>>> .Dave.
>>>
>>
>> On 27/04/16 13:20, Andreas Lampersperger wrote:
>
>> Hi Dave,
>>
>> thank you for the patch, but I'm using longtime kernel 3.14.66 and so the
>> patch does not fit.
>> Do you have any suggestions for that kernel?
>>
>> Andreas
>>
>
> I have no idea what the code would look like in that version; do you have
> any way to get the git commit hash or tag of the i915 driver?
>
> But essentially, if you have the kernel sources for that version, you
> could look for a line that allocates a "struct drm_i915_gem_request". It
> might be
>
> req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL);
>
> or in older versions it might be
>
> request = kzalloc(sizeof(*request), GFP_KERNEL);
>
> or some other variation. It should of course be followed by a test for
> successful allocation, e.g.
>
> if (request == NULL)
> return -ENOMEM;
>
> If you can find that line (or lines, at one time there were TWO such
> places), then you just have to add
>
> INIT_LIST_HEAD(&request->list);
>
> after the test-for-NULL, or anywhere inline thereafter. For example:
>
> request = kzalloc(sizeof(*request), GFP_KERNEL);
> if (request == NULL)
> return -ENOMEM;
>
> ret = i915_gem_get_seqno(ring->dev, &request->seqno);
> if (ret) {
> kfree(request);
> return ret;
> }
>
> + INIT_LIST_HEAD(&request->list);
> kref_init(&request->ref);
> request->ring = ring;
> request->uniq = dev_private->request_uniq++;
>
> HTH,
> .Dave.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20160428/c86b2555/attachment-0001.html>
More information about the Intel-gfx
mailing list