* [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.