[Bug 62191] Buffer Object corruption with multiple processes
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Tue May 14 06:12:44 PDT 2013
https://bugs.freedesktop.org/show_bug.cgi?id=62191
--- Comment #23 from jon.bloomfield at intel.com ---
We tried two stop_machine() experiments on VLV - The first just called wbinvd()
from stop machine, instead of on_each_cpu(). This made no difference.
However, reverting to the v2 patch, and calling i915_gem_write_fence(), from
stop_machine, appears to have resolved the problem. We ran 1000 iterations of
the selftest bug-demo with no failures. We also had to remove the HAS_LLC test,
since VLV has no LLC.
Note that we surrounded the call to i915_gem_write_fence() with wbinvd(). We
didn't have time to see if it was possible to remove these invalidate
operations.
The relevant code-portions are shown below...
static int i915_gem_write_fence__ipi(void *data)
{
struct write_fence *args = data;
wbinvd();
i915_gem_write_fence(args->dev, args->fence, args->obj);
wbinvd();
return 0;
}
static void i915_gem_object_update_fence(struct drm_i915_gem_object *obj,
struct drm_i915_fence_reg *fence,
bool enable)
{
struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
struct write_fence args = {
.dev = obj->base.dev,
.fence = fence_number(dev_priv, fence),
.obj = enable ? obj : NULL,
};
stop_machine(i915_gem_write_fence__ipi, &args, cpu_possible_mask);
if (enable) {
obj->fence_reg = args.fence;
fence->obj = obj;
list_move_tail(&fence->lru_list, &dev_priv->mm.fence_list);
} else {
obj->fence_reg = I915_FENCE_REG_NONE;
fence->obj = NULL;
list_del_init(&fence->lru_list);
}
}
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx-bugs/attachments/20130514/53964305/attachment.html>
More information about the intel-gfx-bugs
mailing list