Loading drivers/gpu/drm/radeon/radeon.h +1 −0 Original line number Diff line number Diff line Loading @@ -242,6 +242,7 @@ int radeon_object_pin(struct radeon_object *robj, uint32_t domain, uint64_t *gpu_addr); void radeon_object_unpin(struct radeon_object *robj); int radeon_object_wait(struct radeon_object *robj); int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement); int radeon_object_evict_vram(struct radeon_device *rdev); int radeon_object_mmap(struct radeon_object *robj, uint64_t *offset); void radeon_object_force_delete(struct radeon_device *rdev); Loading drivers/gpu/drm/radeon/radeon_gem.c +21 −1 Original line number Diff line number Diff line Loading @@ -262,7 +262,27 @@ int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data, int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) { /* FIXME: implement */ struct drm_radeon_gem_busy *args = data; struct drm_gem_object *gobj; struct radeon_object *robj; int r; uint32_t cur_placement; gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { return -EINVAL; } robj = gobj->driver_private; r = radeon_object_busy_domain(robj, &cur_placement); if (cur_placement == TTM_PL_VRAM) args->domain = RADEON_GEM_DOMAIN_VRAM; if (cur_placement == TTM_PL_FLAG_TT) args->domain = RADEON_GEM_DOMAIN_GTT; if (cur_placement == TTM_PL_FLAG_SYSTEM) args->domain = RADEON_GEM_DOMAIN_CPU; mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); return 0; } Loading drivers/gpu/drm/radeon/radeon_object.c +19 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,25 @@ int radeon_object_wait(struct radeon_object *robj) return r; } int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement) { int r = 0; r = radeon_object_reserve(robj, true); if (unlikely(r != 0)) { DRM_ERROR("radeon: failed to reserve object for waiting.\n"); return r; } spin_lock(&robj->tobj.lock); *cur_placement = robj->tobj.mem.mem_type; if (robj->tobj.sync_obj) { r = ttm_bo_wait(&robj->tobj, true, true, true); } spin_unlock(&robj->tobj.lock); radeon_object_unreserve(robj); return r; } int radeon_object_evict_vram(struct radeon_device *rdev) { if (rdev->flags & RADEON_IS_IGP) { Loading include/drm/radeon_drm.h +1 −1 Original line number Diff line number Diff line Loading @@ -838,7 +838,7 @@ struct drm_radeon_gem_wait_idle { struct drm_radeon_gem_busy { uint32_t handle; uint32_t busy; uint32_t domain; }; struct drm_radeon_gem_pread { Loading Loading
drivers/gpu/drm/radeon/radeon.h +1 −0 Original line number Diff line number Diff line Loading @@ -242,6 +242,7 @@ int radeon_object_pin(struct radeon_object *robj, uint32_t domain, uint64_t *gpu_addr); void radeon_object_unpin(struct radeon_object *robj); int radeon_object_wait(struct radeon_object *robj); int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement); int radeon_object_evict_vram(struct radeon_device *rdev); int radeon_object_mmap(struct radeon_object *robj, uint64_t *offset); void radeon_object_force_delete(struct radeon_device *rdev); Loading
drivers/gpu/drm/radeon/radeon_gem.c +21 −1 Original line number Diff line number Diff line Loading @@ -262,7 +262,27 @@ int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data, int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) { /* FIXME: implement */ struct drm_radeon_gem_busy *args = data; struct drm_gem_object *gobj; struct radeon_object *robj; int r; uint32_t cur_placement; gobj = drm_gem_object_lookup(dev, filp, args->handle); if (gobj == NULL) { return -EINVAL; } robj = gobj->driver_private; r = radeon_object_busy_domain(robj, &cur_placement); if (cur_placement == TTM_PL_VRAM) args->domain = RADEON_GEM_DOMAIN_VRAM; if (cur_placement == TTM_PL_FLAG_TT) args->domain = RADEON_GEM_DOMAIN_GTT; if (cur_placement == TTM_PL_FLAG_SYSTEM) args->domain = RADEON_GEM_DOMAIN_CPU; mutex_lock(&dev->struct_mutex); drm_gem_object_unreference(gobj); mutex_unlock(&dev->struct_mutex); return 0; } Loading
drivers/gpu/drm/radeon/radeon_object.c +19 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,25 @@ int radeon_object_wait(struct radeon_object *robj) return r; } int radeon_object_busy_domain(struct radeon_object *robj, uint32_t *cur_placement) { int r = 0; r = radeon_object_reserve(robj, true); if (unlikely(r != 0)) { DRM_ERROR("radeon: failed to reserve object for waiting.\n"); return r; } spin_lock(&robj->tobj.lock); *cur_placement = robj->tobj.mem.mem_type; if (robj->tobj.sync_obj) { r = ttm_bo_wait(&robj->tobj, true, true, true); } spin_unlock(&robj->tobj.lock); radeon_object_unreserve(robj); return r; } int radeon_object_evict_vram(struct radeon_device *rdev) { if (rdev->flags & RADEON_IS_IGP) { Loading
include/drm/radeon_drm.h +1 −1 Original line number Diff line number Diff line Loading @@ -838,7 +838,7 @@ struct drm_radeon_gem_wait_idle { struct drm_radeon_gem_busy { uint32_t handle; uint32_t busy; uint32_t domain; }; struct drm_radeon_gem_pread { Loading