[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