|
@@ -116,72 +116,3 @@ i915_verify_lists(struct drm_device *dev)
|
|
|
return warned = err;
|
|
|
}
|
|
|
#endif /* WATCH_INACTIVE */
|
|
|
-
|
|
|
-#if WATCH_COHERENCY
|
|
|
-void
|
|
|
-i915_gem_object_check_coherency(struct drm_i915_gem_object *obj, int handle)
|
|
|
-{
|
|
|
- struct drm_device *dev = obj->base.dev;
|
|
|
- int page;
|
|
|
- uint32_t *gtt_mapping;
|
|
|
- uint32_t *backing_map = NULL;
|
|
|
- int bad_count = 0;
|
|
|
-
|
|
|
- DRM_INFO("%s: checking coherency of object %p@0x%08x (%d, %zdkb):\n",
|
|
|
- __func__, obj, obj->gtt_offset, handle,
|
|
|
- obj->size / 1024);
|
|
|
-
|
|
|
- gtt_mapping = ioremap(dev_priv->mm.gtt_base_addr + obj->gtt_offset,
|
|
|
- obj->base.size);
|
|
|
- if (gtt_mapping == NULL) {
|
|
|
- DRM_ERROR("failed to map GTT space\n");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (page = 0; page < obj->size / PAGE_SIZE; page++) {
|
|
|
- int i;
|
|
|
-
|
|
|
- backing_map = kmap_atomic(obj->pages[page]);
|
|
|
-
|
|
|
- if (backing_map == NULL) {
|
|
|
- DRM_ERROR("failed to map backing page\n");
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < PAGE_SIZE / 4; i++) {
|
|
|
- uint32_t cpuval = backing_map[i];
|
|
|
- uint32_t gttval = readl(gtt_mapping +
|
|
|
- page * 1024 + i);
|
|
|
-
|
|
|
- if (cpuval != gttval) {
|
|
|
- DRM_INFO("incoherent CPU vs GPU at 0x%08x: "
|
|
|
- "0x%08x vs 0x%08x\n",
|
|
|
- (int)(obj->gtt_offset +
|
|
|
- page * PAGE_SIZE + i * 4),
|
|
|
- cpuval, gttval);
|
|
|
- if (bad_count++ >= 8) {
|
|
|
- DRM_INFO("...\n");
|
|
|
- goto out;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- kunmap_atomic(backing_map);
|
|
|
- backing_map = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- out:
|
|
|
- if (backing_map != NULL)
|
|
|
- kunmap_atomic(backing_map);
|
|
|
- iounmap(gtt_mapping);
|
|
|
-
|
|
|
- /* give syslog time to catch up */
|
|
|
- msleep(1);
|
|
|
-
|
|
|
- /* Directly flush the object, since we just loaded values with the CPU
|
|
|
- * from the backing pages and we don't want to disturb the cache
|
|
|
- * management that we're trying to observe.
|
|
|
- */
|
|
|
-
|
|
|
- i915_gem_clflush_object(obj);
|
|
|
-}
|
|
|
-#endif
|