[Intel-gfx] Kernel Oops on 3.14.66

Dave Gordon david.s.gordon at intel.com
Thu Apr 28 11:50:42 UTC 2016


On 28/04/16 09:58, Andreas Lampersperger wrote:
> 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);
> }
> :

Yes, that looks sensible. Interestingly, that version uses kmalloc() 
rather than k*z*alloc, so the uninitialised list head will be random 
rather than zeroed. Anything could happen!

.Dave.


More information about the Intel-gfx mailing list