intel: Export madvise
Wrap the madvise ioctl for use in APPLE_object_purgeable. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>main
parent
89cc98c0d5
commit
83a35b68f4
|
@ -224,6 +224,13 @@ int drm_intel_bo_busy(drm_intel_bo *bo)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int drm_intel_bo_madvise(drm_intel_bo *bo, int madv)
|
||||||
|
{
|
||||||
|
if (bo->bufmgr->bo_madvise)
|
||||||
|
return bo->bufmgr->bo_madvise(bo, madv);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo)
|
int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo)
|
||||||
{
|
{
|
||||||
return bo->bufmgr->bo_references(bo, target_bo);
|
return bo->bufmgr->bo_references(bo, target_bo);
|
||||||
|
|
|
@ -119,6 +119,7 @@ int drm_intel_bo_get_tiling(drm_intel_bo *bo, uint32_t * tiling_mode,
|
||||||
uint32_t * swizzle_mode);
|
uint32_t * swizzle_mode);
|
||||||
int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name);
|
int drm_intel_bo_flink(drm_intel_bo *bo, uint32_t * name);
|
||||||
int drm_intel_bo_busy(drm_intel_bo *bo);
|
int drm_intel_bo_busy(drm_intel_bo *bo);
|
||||||
|
int drm_intel_bo_madvise(drm_intel_bo *bo, int madv);
|
||||||
|
|
||||||
int drm_intel_bo_disable_reuse(drm_intel_bo *bo);
|
int drm_intel_bo_disable_reuse(drm_intel_bo *bo);
|
||||||
int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo);
|
int drm_intel_bo_references(drm_intel_bo *bo, drm_intel_bo *target_bo);
|
||||||
|
|
|
@ -398,8 +398,8 @@ drm_intel_gem_bo_busy(drm_intel_bo *bo)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
drm_intel_gem_bo_madvise(drm_intel_bufmgr_gem *bufmgr_gem,
|
drm_intel_gem_bo_madvise_internal(drm_intel_bufmgr_gem *bufmgr_gem,
|
||||||
drm_intel_bo_gem *bo_gem, int state)
|
drm_intel_bo_gem *bo_gem, int state)
|
||||||
{
|
{
|
||||||
struct drm_i915_gem_madvise madv;
|
struct drm_i915_gem_madvise madv;
|
||||||
|
|
||||||
|
@ -411,6 +411,15 @@ drm_intel_gem_bo_madvise(drm_intel_bufmgr_gem *bufmgr_gem,
|
||||||
return madv.retained;
|
return madv.retained;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
drm_intel_gem_bo_madvise(drm_intel_bo *bo, int madv)
|
||||||
|
{
|
||||||
|
return drm_intel_gem_bo_madvise_internal
|
||||||
|
((drm_intel_bufmgr_gem *) bo->bufmgr,
|
||||||
|
(drm_intel_bo_gem *) bo,
|
||||||
|
madv);
|
||||||
|
}
|
||||||
|
|
||||||
/* drop the oldest entries that have been purged by the kernel */
|
/* drop the oldest entries that have been purged by the kernel */
|
||||||
static void
|
static void
|
||||||
drm_intel_gem_bo_cache_purge_bucket(drm_intel_bufmgr_gem *bufmgr_gem,
|
drm_intel_gem_bo_cache_purge_bucket(drm_intel_bufmgr_gem *bufmgr_gem,
|
||||||
|
@ -421,7 +430,7 @@ drm_intel_gem_bo_cache_purge_bucket(drm_intel_bufmgr_gem *bufmgr_gem,
|
||||||
|
|
||||||
bo_gem = DRMLISTENTRY(drm_intel_bo_gem,
|
bo_gem = DRMLISTENTRY(drm_intel_bo_gem,
|
||||||
bucket->head.next, head);
|
bucket->head.next, head);
|
||||||
if (drm_intel_gem_bo_madvise
|
if (drm_intel_gem_bo_madvise_internal
|
||||||
(bufmgr_gem, bo_gem, I915_MADV_DONTNEED))
|
(bufmgr_gem, bo_gem, I915_MADV_DONTNEED))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -493,7 +502,7 @@ retry:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alloc_from_cache) {
|
if (alloc_from_cache) {
|
||||||
if (!drm_intel_gem_bo_madvise
|
if (!drm_intel_gem_bo_madvise_internal
|
||||||
(bufmgr_gem, bo_gem, I915_MADV_WILLNEED)) {
|
(bufmgr_gem, bo_gem, I915_MADV_WILLNEED)) {
|
||||||
drm_intel_gem_bo_free(&bo_gem->bo);
|
drm_intel_gem_bo_free(&bo_gem->bo);
|
||||||
drm_intel_gem_bo_cache_purge_bucket(bufmgr_gem,
|
drm_intel_gem_bo_cache_purge_bucket(bufmgr_gem,
|
||||||
|
@ -742,8 +751,8 @@ drm_intel_gem_bo_unreference_final(drm_intel_bo *bo, time_t time)
|
||||||
|
|
||||||
DRMLISTADDTAIL(&bo_gem->head, &bucket->head);
|
DRMLISTADDTAIL(&bo_gem->head, &bucket->head);
|
||||||
|
|
||||||
drm_intel_gem_bo_madvise(bufmgr_gem, bo_gem,
|
drm_intel_gem_bo_madvise_internal(bufmgr_gem, bo_gem,
|
||||||
I915_MADV_DONTNEED);
|
I915_MADV_DONTNEED);
|
||||||
drm_intel_gem_cleanup_bo_cache(bufmgr_gem, time);
|
drm_intel_gem_cleanup_bo_cache(bufmgr_gem, time);
|
||||||
} else {
|
} else {
|
||||||
drm_intel_gem_bo_free(bo);
|
drm_intel_gem_bo_free(bo);
|
||||||
|
@ -1703,6 +1712,7 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
|
||||||
bufmgr_gem->bufmgr.bo_flink = drm_intel_gem_bo_flink;
|
bufmgr_gem->bufmgr.bo_flink = drm_intel_gem_bo_flink;
|
||||||
bufmgr_gem->bufmgr.bo_exec = drm_intel_gem_bo_exec;
|
bufmgr_gem->bufmgr.bo_exec = drm_intel_gem_bo_exec;
|
||||||
bufmgr_gem->bufmgr.bo_busy = drm_intel_gem_bo_busy;
|
bufmgr_gem->bufmgr.bo_busy = drm_intel_gem_bo_busy;
|
||||||
|
bufmgr_gem->bufmgr.bo_madvise = drm_intel_gem_bo_madvise;
|
||||||
bufmgr_gem->bufmgr.destroy = drm_intel_bufmgr_gem_destroy;
|
bufmgr_gem->bufmgr.destroy = drm_intel_bufmgr_gem_destroy;
|
||||||
bufmgr_gem->bufmgr.debug = 0;
|
bufmgr_gem->bufmgr.debug = 0;
|
||||||
bufmgr_gem->bufmgr.check_aperture_space =
|
bufmgr_gem->bufmgr.check_aperture_space =
|
||||||
|
|
|
@ -216,6 +216,20 @@ struct _drm_intel_bufmgr {
|
||||||
*/
|
*/
|
||||||
int (*bo_busy) (drm_intel_bo *bo);
|
int (*bo_busy) (drm_intel_bo *bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the volatility of the buffer.
|
||||||
|
* \param bo Buffer to create a name for
|
||||||
|
* \param madv The purgeable status
|
||||||
|
*
|
||||||
|
* Use I915_MADV_DONTNEED to mark the buffer as purgeable, and it will be
|
||||||
|
* reclaimed under memory pressure. If you subsequently require the buffer,
|
||||||
|
* then you must pass I915_MADV_WILLNEED to mark the buffer as required.
|
||||||
|
*
|
||||||
|
* Returns 1 if the buffer was retained, or 0 if it was discarded whilst
|
||||||
|
* marked as I915_MADV_DONTNEED.
|
||||||
|
*/
|
||||||
|
int (*bo_madvise) (drm_intel_bo *bo, int madv);
|
||||||
|
|
||||||
int (*check_aperture_space) (drm_intel_bo ** bo_array, int count);
|
int (*check_aperture_space) (drm_intel_bo ** bo_array, int count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue