mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-20 19:57:23 +07:00
drm/i915: Truncate the shmem backing pages on purge
shmfs doesn't actually implement i_ops->truncate() so we were not immedatiately releasing the backing pages when shrinking the gfx cache under OOM. Instead use a combination of truncate_inode_pages() and i_ops->truncate_range() as is used by shmem_delete_inode(). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
20a0945951
commit
ae9fed6b60
@ -1505,9 +1505,16 @@ i915_gem_object_truncate(struct drm_gem_object *obj)
|
||||
struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
|
||||
struct inode *inode;
|
||||
|
||||
/* Our goal here is to return as much of the memory as
|
||||
* is possible back to the system as we are called from OOM.
|
||||
* To do this we must instruct the shmfs to drop all of its
|
||||
* backing pages, *now*. Here we mirror the actions taken
|
||||
* when by shmem_delete_inode() to release the backing store.
|
||||
*/
|
||||
inode = obj->filp->f_path.dentry->d_inode;
|
||||
if (inode->i_op->truncate)
|
||||
inode->i_op->truncate (inode);
|
||||
truncate_inode_pages(inode->i_mapping, 0);
|
||||
if (inode->i_op->truncate_range)
|
||||
inode->i_op->truncate_range(inode, 0, (loff_t)-1);
|
||||
|
||||
obj_priv->madv = __I915_MADV_PURGED;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user