mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-05 06:38:03 +02:00
intel-gem: Fix pread math and logic errors.
Fixes an oops in fbotexture from walking off the end of the page list.
This commit is contained in:
parent
439d710683
commit
6d258ddf77
1 changed files with 5 additions and 9 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue