diff mbox series

[01/11] drm/radeon: switch over to ttm_bo_init_reserved

Message ID 20220519095508.115203-2-christian.koenig@amd.com (mailing list archive)
State New, archived
Headers show
Series [01/11] drm/radeon: switch over to ttm_bo_init_reserved | expand

Commit Message

Christian König May 19, 2022, 9:54 a.m. UTC
Use the new interface instead.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/radeon/radeon_object.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

Comments

Ruhl, Michael J May 19, 2022, 12:54 p.m. UTC | #1
>-----Original Message-----
>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of
>Christian König
>Sent: Thursday, May 19, 2022 5:55 AM
>To: intel-gfx@lists.freedesktop.org
>Cc: matthew.william.auld@gmail.com; Christian König
><christian.koenig@amd.com>; dri-devel@lists.freedesktop.org
>Subject: [PATCH 01/11] drm/radeon: switch over to ttm_bo_init_reserved
>
>Use the new interface instead.
>
>Signed-off-by: Christian König <christian.koenig@amd.com>
>---
> drivers/gpu/drm/radeon/radeon_object.c | 17 +++++++++++------
> 1 file changed, 11 insertions(+), 6 deletions(-)
>
>diff --git a/drivers/gpu/drm/radeon/radeon_object.c
>b/drivers/gpu/drm/radeon/radeon_object.c
>index 6c4a6802ca96..1d414ff4ab0c 100644
>--- a/drivers/gpu/drm/radeon/radeon_object.c
>+++ b/drivers/gpu/drm/radeon/radeon_object.c
>@@ -133,9 +133,12 @@ int radeon_bo_create(struct radeon_device *rdev,
> 		     struct dma_resv *resv,
> 		     struct radeon_bo **bo_ptr)
> {
>-	struct radeon_bo *bo;
>-	enum ttm_bo_type type;
> 	unsigned long page_align = roundup(byte_align, PAGE_SIZE) >>
>PAGE_SHIFT;
>+
>+	/* Kernel allocation are uninterruptible */
>+	struct ttm_operation_ctx ctx = { !kernel, false };
>+	enum ttm_bo_type type;
>+	struct radeon_bo *bo;
> 	int r;
>
> 	size = ALIGN(size, PAGE_SIZE);
>@@ -200,11 +203,13 @@ int radeon_bo_create(struct radeon_device *rdev,
> #endif
>
> 	radeon_ttm_placement_from_domain(bo, domain);
>-	/* Kernel allocation are uninterruptible */
> 	down_read(&rdev->pm.mclk_lock);
>-	r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type,
>-			&bo->placement, page_align, !kernel, sg, resv,
>-			&radeon_ttm_bo_destroy);
>+	r = ttm_bo_init_reserved(&rdev->mman.bdev, &bo->tbo, size, type,
>+				 &bo->placement, page_align, &ctx, sg, resv,
>+				 &radeon_ttm_bo_destroy);
>+        if (!r)
>+		ttm_bo_unreserve(&bo->tbo);
>+

Hi Christian,

I am not understanding this unreserve.

The original code path does not have it.  It looks like tt_bo_init will do this, but only if !resv.

Should this be:
    if (!resv)
          ttm_bo_unreserve(&bo->tbo);

?

M


> 	up_read(&rdev->pm.mclk_lock);
> 	if (unlikely(r != 0)) {
> 		return r;
>--
>2.25.1
Christian König May 19, 2022, 1:09 p.m. UTC | #2
Am 19.05.22 um 14:54 schrieb Ruhl, Michael J:
>> -----Original Message-----
>> From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of
>> Christian König
>> Sent: Thursday, May 19, 2022 5:55 AM
>> To: intel-gfx@lists.freedesktop.org
>> Cc: matthew.william.auld@gmail.com; Christian König
>> <christian.koenig@amd.com>; dri-devel@lists.freedesktop.org
>> Subject: [PATCH 01/11] drm/radeon: switch over to ttm_bo_init_reserved
>>
>> Use the new interface instead.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>> drivers/gpu/drm/radeon/radeon_object.c | 17 +++++++++++------
>> 1 file changed, 11 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon_object.c
>> b/drivers/gpu/drm/radeon/radeon_object.c
>> index 6c4a6802ca96..1d414ff4ab0c 100644
>> --- a/drivers/gpu/drm/radeon/radeon_object.c
>> +++ b/drivers/gpu/drm/radeon/radeon_object.c
>> @@ -133,9 +133,12 @@ int radeon_bo_create(struct radeon_device *rdev,
>> 		     struct dma_resv *resv,
>> 		     struct radeon_bo **bo_ptr)
>> {
>> -	struct radeon_bo *bo;
>> -	enum ttm_bo_type type;
>> 	unsigned long page_align = roundup(byte_align, PAGE_SIZE) >>
>> PAGE_SHIFT;
>> +
>> +	/* Kernel allocation are uninterruptible */
>> +	struct ttm_operation_ctx ctx = { !kernel, false };
>> +	enum ttm_bo_type type;
>> +	struct radeon_bo *bo;
>> 	int r;
>>
>> 	size = ALIGN(size, PAGE_SIZE);
>> @@ -200,11 +203,13 @@ int radeon_bo_create(struct radeon_device *rdev,
>> #endif
>>
>> 	radeon_ttm_placement_from_domain(bo, domain);
>> -	/* Kernel allocation are uninterruptible */
>> 	down_read(&rdev->pm.mclk_lock);
>> -	r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type,
>> -			&bo->placement, page_align, !kernel, sg, resv,
>> -			&radeon_ttm_bo_destroy);
>> +	r = ttm_bo_init_reserved(&rdev->mman.bdev, &bo->tbo, size, type,
>> +				 &bo->placement, page_align, &ctx, sg, resv,
>> +				 &radeon_ttm_bo_destroy);
>> +        if (!r)
>> +		ttm_bo_unreserve(&bo->tbo);
>> +
> Hi Christian,
>
> I am not understanding this unreserve.
>
> The original code path does not have it.  It looks like tt_bo_init will do this, but only if !resv.
>
> Should this be:
>      if (!resv)
>            ttm_bo_unreserve(&bo->tbo);

Ah, yes good point. That's a bug.

Thanks,
Christian.

>
> ?
>
> M
>
>
>> 	up_read(&rdev->pm.mclk_lock);
>> 	if (unlikely(r != 0)) {
>> 		return r;
>> --
>> 2.25.1
diff mbox series

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index 6c4a6802ca96..1d414ff4ab0c 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -133,9 +133,12 @@  int radeon_bo_create(struct radeon_device *rdev,
 		     struct dma_resv *resv,
 		     struct radeon_bo **bo_ptr)
 {
-	struct radeon_bo *bo;
-	enum ttm_bo_type type;
 	unsigned long page_align = roundup(byte_align, PAGE_SIZE) >> PAGE_SHIFT;
+
+	/* Kernel allocation are uninterruptible */
+	struct ttm_operation_ctx ctx = { !kernel, false };
+	enum ttm_bo_type type;
+	struct radeon_bo *bo;
 	int r;
 
 	size = ALIGN(size, PAGE_SIZE);
@@ -200,11 +203,13 @@  int radeon_bo_create(struct radeon_device *rdev,
 #endif
 
 	radeon_ttm_placement_from_domain(bo, domain);
-	/* Kernel allocation are uninterruptible */
 	down_read(&rdev->pm.mclk_lock);
-	r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type,
-			&bo->placement, page_align, !kernel, sg, resv,
-			&radeon_ttm_bo_destroy);
+	r = ttm_bo_init_reserved(&rdev->mman.bdev, &bo->tbo, size, type,
+				 &bo->placement, page_align, &ctx, sg, resv,
+				 &radeon_ttm_bo_destroy);
+        if (!r)
+		ttm_bo_unreserve(&bo->tbo);
+
 	up_read(&rdev->pm.mclk_lock);
 	if (unlikely(r != 0)) {
 		return r;