mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-12 00:00:00 +00:00
drm/i915: kerneldoc for i915_gem_shrinker.c
And remove one bogus * from i915_gem_gtt.c since that's not a kerneldoc there. v2: Review from Chris: - Clarify memory space to better distinguish from address space. - Add note that shrink doesn't guarantee the freed memory and that users must fall back to shrink_all. - Explain how pinning ties in with eviction/shrinker. Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
be6a037695
commit
eb0b44adc0
@ -4184,7 +4184,7 @@ int num_ioctls;</synopsis>
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Buffer Object Eviction</title>
|
<title>Buffer Object Eviction</title>
|
||||||
<para>
|
<para>
|
||||||
This section documents the interface function for evicting buffer
|
This section documents the interface functions for evicting buffer
|
||||||
objects to make space available in the virtual gpu address spaces.
|
objects to make space available in the virtual gpu address spaces.
|
||||||
Note that this is mostly orthogonal to shrinking buffer objects
|
Note that this is mostly orthogonal to shrinking buffer objects
|
||||||
caches, which has the goal to make main memory (shared with the gpu
|
caches, which has the goal to make main memory (shared with the gpu
|
||||||
@ -4192,6 +4192,17 @@ int num_ioctls;</synopsis>
|
|||||||
</para>
|
</para>
|
||||||
!Idrivers/gpu/drm/i915/i915_gem_evict.c
|
!Idrivers/gpu/drm/i915/i915_gem_evict.c
|
||||||
</sect2>
|
</sect2>
|
||||||
|
<sect2>
|
||||||
|
<title>Buffer Object Memory Shrinking</title>
|
||||||
|
<para>
|
||||||
|
This section documents the interface function for shrinking memory
|
||||||
|
usage of buffer object caches. Shrinking is used to make main memory
|
||||||
|
available. Note that this is mostly orthogonal to evicting buffer
|
||||||
|
objects, which has the goal to make space in gpu virtual address
|
||||||
|
spaces.
|
||||||
|
</para>
|
||||||
|
!Idrivers/gpu/drm/i915/i915_gem_shrinker.c
|
||||||
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
|
@ -63,6 +63,10 @@ mark_free(struct i915_vma *vma, struct list_head *unwind)
|
|||||||
*
|
*
|
||||||
* This function is used by the object/vma binding code.
|
* This function is used by the object/vma binding code.
|
||||||
*
|
*
|
||||||
|
* Since this function is only used to free up virtual address space it only
|
||||||
|
* ignores pinned vmas, and not object where the backing storage itself is
|
||||||
|
* pinned. Hence obj->pages_pin_count does not protect against eviction.
|
||||||
|
*
|
||||||
* To clarify: This is for freeing up virtual address space, not for freeing
|
* To clarify: This is for freeing up virtual address space, not for freeing
|
||||||
* memory in e.g. the shrinker.
|
* memory in e.g. the shrinker.
|
||||||
*/
|
*/
|
||||||
|
@ -698,7 +698,7 @@ static int gen8_ppgtt_setup_page_tables(struct i915_hw_ppgtt *ppgtt,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* GEN8 legacy ppgtt programming is accomplished through a max 4 PDP registers
|
* GEN8 legacy ppgtt programming is accomplished through a max 4 PDP registers
|
||||||
* with a net effect resembling a 2-level page table in normal x86 terms. Each
|
* with a net effect resembling a 2-level page table in normal x86 terms. Each
|
||||||
* PDP represents 1GB of memory 4 * 512 * 512 * 4096 = 4GB legacy 32b address
|
* PDP represents 1GB of memory 4 * 512 * 512 * 4096 = 4GB legacy 32b address
|
||||||
|
@ -47,6 +47,30 @@ static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i915_gem_shrink - Shrink buffer object caches
|
||||||
|
* @dev_priv: i915 device
|
||||||
|
* @target: amount of memory to make available, in pages
|
||||||
|
* @flags: control flags for selecting cache types
|
||||||
|
*
|
||||||
|
* This function is the main interface to the shrinker. It will try to release
|
||||||
|
* up to @target pages of main memory backing storage from buffer objects.
|
||||||
|
* Selection of the specific caches can be done with @flags. This is e.g. useful
|
||||||
|
* when purgeable objects should be removed from caches preferentially.
|
||||||
|
*
|
||||||
|
* Note that it's not guaranteed that released amount is actually available as
|
||||||
|
* free system memory - the pages might still be in-used to due to other reasons
|
||||||
|
* (like cpu mmaps) or the mm core has reused them before we could grab them.
|
||||||
|
* Therefore code that needs to explicitly shrink buffer objects caches (e.g. to
|
||||||
|
* avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all().
|
||||||
|
*
|
||||||
|
* Also note that any kind of pinning (both per-vma address space pins and
|
||||||
|
* backing storage pins at the buffer object level) result in the shrinker code
|
||||||
|
* having to skip the object.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* The number of pages of backing storage actually released.
|
||||||
|
*/
|
||||||
unsigned long
|
unsigned long
|
||||||
i915_gem_shrink(struct drm_i915_private *dev_priv,
|
i915_gem_shrink(struct drm_i915_private *dev_priv,
|
||||||
long target, unsigned flags)
|
long target, unsigned flags)
|
||||||
@ -118,6 +142,20 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i915_gem_shrink - Shrink buffer object caches completely
|
||||||
|
* @dev_priv: i915 device
|
||||||
|
*
|
||||||
|
* This is a simple wraper around i915_gem_shrink() to aggressively shrink all
|
||||||
|
* caches completely. It also first waits for and retires all outstanding
|
||||||
|
* requests to also be able to release backing storage for active objects.
|
||||||
|
*
|
||||||
|
* This should only be used in code to intentionally quiescent the gpu or as a
|
||||||
|
* last-ditch effort when memory seems to have run out.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* The number of pages of backing storage actually released.
|
||||||
|
*/
|
||||||
unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
|
unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
i915_gem_evict_everything(dev_priv->dev);
|
i915_gem_evict_everything(dev_priv->dev);
|
||||||
@ -279,6 +317,12 @@ i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr)
|
|||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i915_gem_shrinker_init - Initialize i915 shrinker
|
||||||
|
* @dev_priv: i915 device
|
||||||
|
*
|
||||||
|
* This function registers and sets up the i915 shrinker and OOM handler.
|
||||||
|
*/
|
||||||
void i915_gem_shrinker_init(struct drm_i915_private *dev_priv)
|
void i915_gem_shrinker_init(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan;
|
dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user