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
and the kmalloc is in intel_ring_alloc_seqno() in intel_ringbuffer.c, 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);
}
:
thank you again.
I searched, where the memory for the request came from, it is set in line 2158 of i915_gem.c
and the kmalloc is in intel_ring_alloc_seqno() in intel_ringbuffer.c, 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@xxxxxxxxx>:
2016-04-27 12:03 GMT+02:00 Dave Gordon <david.s.gordon@xxxxxxxxx>:On 27/04/16 13:20, Andreas Lampersperger wrote:
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.
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.
_______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx