intel-gem: Fix pread math and logic errors.

Fixes an oops in fbotexture from walking off the end of the page list.
main
Eric Anholt 2008-07-23 11:49:25 -07:00
parent 439d710683
commit 6d258ddf77
1 changed files with 5 additions and 9 deletions

View File

@ -169,20 +169,16 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
}
}
if ((obj->read_domains & I915_GEM_DOMAIN_CPU) == 0) {
int got_page_list = 0;
int first_page = args->offset / PAGE_SIZE;
int last_page = (args->offset + args->size) / PAGE_SIZE;
int last_page = (args->offset + args->size - 1) / PAGE_SIZE;
if (obj_priv->page_list == NULL) {
i915_gem_object_get_page_list(obj);
got_page_list = 1;
}
/* If we don't have the page list, the pages are unpinned
* and swappable, and thus should already be in the CPU domain.
*/
BUG_ON(obj_priv->page_list == NULL);
drm_ttm_cache_flush(&obj_priv->page_list[first_page],
last_page - first_page + 1);
if (got_page_list)
i915_gem_object_free_page_list(obj);
}
offset = args->offset;