* [PATCH 1/4] drm/radeon: track pinned memory (v2)
@ 2014-07-18 15:09 Alex Deucher
2014-07-18 15:09 ` [PATCH 2/4] drm/radeon: use vram/gart pinned size in radeon_gem_info_ioctl Alex Deucher
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Alex Deucher @ 2014-07-18 15:09 UTC (permalink / raw)
To: dri-devel; +Cc: Alex Deucher
So we know how large an allocation we can allow.
v2: incorporate Michel's comments
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/radeon/radeon.h | 4 ++++
drivers/gpu/drm/radeon/radeon_object.c | 16 +++++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index a863472..d26c61c 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2348,6 +2348,10 @@ struct radeon_device {
struct dev_pm_domain vga_pm_domain;
bool have_disp_power_ref;
+
+ /* tracking pinned memory */
+ u64 vram_pin_size;
+ u64 gart_pin_size;
};
bool radeon_is_px(struct drm_device *dev);
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 1b05a4d..a00cf17 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -306,9 +306,13 @@ int radeon_bo_pin_restricted(struct radeon_bo *bo, u32 domain, u64 max_offset,
bo->pin_count = 1;
if (gpu_addr != NULL)
*gpu_addr = radeon_bo_gpu_offset(bo);
- }
- if (unlikely(r != 0))
+ if (domain == RADEON_GEM_DOMAIN_VRAM)
+ bo->rdev->vram_pin_size += radeon_bo_size(bo);
+ else
+ bo->rdev->gart_pin_size += radeon_bo_size(bo);
+ } else {
dev_err(bo->rdev->dev, "%p pin failed\n", bo);
+ }
return r;
}
@@ -331,8 +335,14 @@ int radeon_bo_unpin(struct radeon_bo *bo)
for (i = 0; i < bo->placement.num_placement; i++)
bo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
- if (unlikely(r != 0))
+ if (likely(r == 0)) {
+ if (bo->tbo.mem.mem_type == TTM_PL_VRAM)
+ bo->rdev->vram_pin_size -= radeon_bo_size(bo);
+ else
+ bo->rdev->gart_pin_size -= radeon_bo_size(bo);
+ } else {
dev_err(bo->rdev->dev, "%p validate failed for unpin\n", bo);
+ }
return r;
}
--
1.8.3.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/4] drm/radeon: use vram/gart pinned size in radeon_gem_info_ioctl 2014-07-18 15:09 [PATCH 1/4] drm/radeon: track pinned memory (v2) Alex Deucher @ 2014-07-18 15:09 ` Alex Deucher 2014-07-18 15:09 ` [PATCH 3/4] drm/radeon: use vram/gart pinned size in radeon_do_test_moves Alex Deucher 2014-07-18 15:09 ` [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) Alex Deucher 2 siblings, 0 replies; 6+ messages in thread From: Alex Deucher @ 2014-07-18 15:09 UTC (permalink / raw) To: dri-devel; +Cc: Alex Deucher Gives a more accurate limit than the previous code. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/radeon/radeon_gem.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index ce1d61e..1ec6244 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -209,18 +209,15 @@ int radeon_gem_info_ioctl(struct drm_device *dev, void *data, struct radeon_device *rdev = dev->dev_private; struct drm_radeon_gem_info *args = data; struct ttm_mem_type_manager *man; - unsigned i; man = &rdev->mman.bdev.man[TTM_PL_VRAM]; args->vram_size = rdev->mc.real_vram_size; args->vram_visible = (u64)man->size << PAGE_SHIFT; - if (rdev->stollen_vga_memory) - args->vram_visible -= radeon_bo_size(rdev->stollen_vga_memory); - args->vram_visible -= radeon_fbdev_total_size(rdev); - args->gart_size = rdev->mc.gtt_size - 4096 - RADEON_IB_POOL_SIZE*64*1024; - for(i = 0; i < RADEON_NUM_RINGS; ++i) - args->gart_size -= rdev->ring[i].ring_size; + args->vram_visible -= rdev->vram_pin_size; + args->gart_size = rdev->mc.gtt_size; + args->gart_size -= rdev->gart_pin_size; + return 0; } -- 1.8.3.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] drm/radeon: use vram/gart pinned size in radeon_do_test_moves 2014-07-18 15:09 [PATCH 1/4] drm/radeon: track pinned memory (v2) Alex Deucher 2014-07-18 15:09 ` [PATCH 2/4] drm/radeon: use vram/gart pinned size in radeon_gem_info_ioctl Alex Deucher @ 2014-07-18 15:09 ` Alex Deucher 2014-07-18 15:09 ` [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) Alex Deucher 2 siblings, 0 replies; 6+ messages in thread From: Alex Deucher @ 2014-07-18 15:09 UTC (permalink / raw) To: dri-devel; +Cc: Alex Deucher Gives more accurate count and prevents failures when we can't allocate memory for the tests. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/radeon/radeon_test.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c index 9c5b66c..5adf420 100644 --- a/drivers/gpu/drm/radeon/radeon_test.c +++ b/drivers/gpu/drm/radeon/radeon_test.c @@ -56,13 +56,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag) /* Number of tests = * (Total GTT - IB pool - writeback page - ring buffers) / test size */ - n = rdev->mc.gtt_size - RADEON_IB_POOL_SIZE*64*1024; - for (i = 0; i < RADEON_NUM_RINGS; ++i) - n -= rdev->ring[i].ring_size; - if (rdev->wb.wb_obj) - n -= RADEON_GPU_PAGE_SIZE; - if (rdev->ih.ring_obj) - n -= rdev->ih.ring_size; + n = rdev->mc.gtt_size - rdev->gart_pin_size; n /= size; gtt_obj = kzalloc(n * sizeof(*gtt_obj), GFP_KERNEL); -- 1.8.3.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) 2014-07-18 15:09 [PATCH 1/4] drm/radeon: track pinned memory (v2) Alex Deucher 2014-07-18 15:09 ` [PATCH 2/4] drm/radeon: use vram/gart pinned size in radeon_gem_info_ioctl Alex Deucher 2014-07-18 15:09 ` [PATCH 3/4] drm/radeon: use vram/gart pinned size in radeon_do_test_moves Alex Deucher @ 2014-07-18 15:09 ` Alex Deucher 2014-07-22 9:14 ` Michel Dänzer 2 siblings, 1 reply; 6+ messages in thread From: Alex Deucher @ 2014-07-18 15:09 UTC (permalink / raw) To: dri-devel; +Cc: Alex Deucher Now that fallback to gtt is fixed for cpu access, we can remove this limit. bug: https://bugs.freedesktop.org/show_bug.cgi?id=78717 v2: use new gart_pin_size to accurately track available gtt. v3: fix comment Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/radeon/radeon.h | 2 +- drivers/gpu/drm/radeon/radeon_gem.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d26c61c..e66f831 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -546,7 +546,7 @@ struct radeon_gem { int radeon_gem_init(struct radeon_device *rdev); void radeon_gem_fini(struct radeon_device *rdev); -int radeon_gem_object_create(struct radeon_device *rdev, int size, +int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size, int alignment, int initial_domain, u32 flags, bool discardable, bool kernel, struct drm_gem_object **obj); diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index 1ec6244..eafe316 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -40,7 +40,7 @@ void radeon_gem_object_free(struct drm_gem_object *gobj) } } -int radeon_gem_object_create(struct radeon_device *rdev, int size, +int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size, int alignment, int initial_domain, u32 flags, bool discardable, bool kernel, struct drm_gem_object **obj) @@ -55,10 +55,14 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, alignment = PAGE_SIZE; } - /* maximun bo size is the minimun btw visible vram and gtt size */ - max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size); + /* Maximum bo size is the unpinned gtt size since we use the gtt to + * handle vram to system pool migrations. We could probably remove + * this check altogether with a little additional work to support + * splitting vram <-> system transfers into multiple steps. + */ + max_size = rdev->mc.gtt_size - rdev->gart_pin_size; if (size > max_size) { - DRM_DEBUG("Allocation size %dMb bigger than %ldMb limit\n", + DRM_DEBUG("Allocation size %ldMb bigger than %ldMb limit\n", size >> 20, max_size >> 20); return -ENOMEM; } @@ -72,7 +76,7 @@ retry: initial_domain |= RADEON_GEM_DOMAIN_GTT; goto retry; } - DRM_ERROR("Failed to allocate GEM object (%d, %d, %u, %d)\n", + DRM_ERROR("Failed to allocate GEM object (%ld, %d, %u, %d)\n", size, initial_domain, alignment, r); } return r; -- 1.8.3.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) 2014-07-18 15:09 ` [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) Alex Deucher @ 2014-07-22 9:14 ` Michel Dänzer 2014-07-22 16:34 ` Alex Deucher 0 siblings, 1 reply; 6+ messages in thread From: Michel Dänzer @ 2014-07-22 9:14 UTC (permalink / raw) To: Alex Deucher, dri-devel; +Cc: Alex Deucher On 19.07.2014 00:09, Alex Deucher wrote: > Now that fallback to gtt is fixed for cpu access, we can > remove this limit. > > bug: > https://bugs.freedesktop.org/show_bug.cgi?id=78717 > > v2: use new gart_pin_size to accurately track available gtt. > v3: fix comment [...] > @@ -55,10 +55,14 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, > alignment = PAGE_SIZE; > } > > - /* maximun bo size is the minimun btw visible vram and gtt size */ > - max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size); > + /* Maximum bo size is the unpinned gtt size since we use the gtt to > + * handle vram to system pool migrations. We could probably remove > + * this check altogether with a little additional work to support > + * splitting vram <-> system transfers into multiple steps. > + */ > + max_size = rdev->mc.gtt_size - rdev->gart_pin_size; Actually, the the check couldn't be removed even then, but would need to be replaced by a check against the VRAM size or something like that. Maybe just drop the second sentence of the comment? Either way though, the series is Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) 2014-07-22 9:14 ` Michel Dänzer @ 2014-07-22 16:34 ` Alex Deucher 0 siblings, 0 replies; 6+ messages in thread From: Alex Deucher @ 2014-07-22 16:34 UTC (permalink / raw) To: Michel Dänzer; +Cc: Alex Deucher, Maling list - DRI developers On Tue, Jul 22, 2014 at 5:14 AM, Michel Dänzer <michel@daenzer.net> wrote: > On 19.07.2014 00:09, Alex Deucher wrote: >> Now that fallback to gtt is fixed for cpu access, we can >> remove this limit. >> >> bug: >> https://bugs.freedesktop.org/show_bug.cgi?id=78717 >> >> v2: use new gart_pin_size to accurately track available gtt. >> v3: fix comment > > [...] > >> @@ -55,10 +55,14 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, >> alignment = PAGE_SIZE; >> } >> >> - /* maximun bo size is the minimun btw visible vram and gtt size */ >> - max_size = min(rdev->mc.visible_vram_size, rdev->mc.gtt_size); >> + /* Maximum bo size is the unpinned gtt size since we use the gtt to >> + * handle vram to system pool migrations. We could probably remove >> + * this check altogether with a little additional work to support >> + * splitting vram <-> system transfers into multiple steps. >> + */ >> + max_size = rdev->mc.gtt_size - rdev->gart_pin_size; > > Actually, the the check couldn't be removed even then, but would need to > be replaced by a check against the VRAM size or something like that. > Maybe just drop the second sentence of the comment? Done. Thanks! > > Either way though, the series is > > Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> > > > -- > Earthling Michel Dänzer | http://www.amd.com > Libre software enthusiast | Mesa and X developer _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-07-22 16:34 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-18 15:09 [PATCH 1/4] drm/radeon: track pinned memory (v2) Alex Deucher 2014-07-18 15:09 ` [PATCH 2/4] drm/radeon: use vram/gart pinned size in radeon_gem_info_ioctl Alex Deucher 2014-07-18 15:09 ` [PATCH 3/4] drm/radeon: use vram/gart pinned size in radeon_do_test_moves Alex Deucher 2014-07-18 15:09 ` [PATCH 4/4] drm/radeon: remove visible vram size limit on bo allocation (v3) Alex Deucher 2014-07-22 9:14 ` Michel Dänzer 2014-07-22 16:34 ` Alex Deucher
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.