drm/amdgpu: fix gtt_mgr bo's offset

Submitted by Cui, Flora on Sept. 20, 2016, 9:09 a.m.

Details

Message ID 1474362552-9062-1-git-send-email-Flora.Cui@amd.com
State New
Headers show
Series "drm/amdgpu: fix gtt_mgr bo's offset" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Cui, Flora Sept. 20, 2016, 9:09 a.m.
Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index 262e872..b266cf7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -128,8 +128,8 @@  int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
 
 	if (!r) {
 		mem->start = node->start;
-		tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
-		    tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
+		tbo->offset = (mem->start << PAGE_SHIFT) +
+		    tbo->bdev->man[mem->mem_type].gpu_offset;
 	}
 
 	return r;

Comments

On 2016年09月20日 17:09, Flora Cui wrote:
> Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> index 262e872..b266cf7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> @@ -128,8 +128,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
>   
>   	if (!r) {
>   		mem->start = node->start;
> -		tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
> -		    tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
> +		tbo->offset = (mem->start << PAGE_SHIFT) +
> +		    tbo->bdev->man[mem->mem_type].gpu_offset;
mem->mem_type seems not set yet as well if I am correct.
IIRC, I feel it's better that tbo->offset is set out of this function 
after get_node successfully.

Regards,
David Zhou

>   	}
>   
>   	return r;
On Tue, Sep 20, 2016 at 06:19:33PM +0800, zhoucm1 wrote:
> 
> 
> On 2016年09月20日 17:09, Flora Cui wrote:
> >Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
> >Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> >---
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >index 262e872..b266cf7 100644
> >--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >@@ -128,8 +128,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
> >  	if (!r) {
> >  		mem->start = node->start;
> >-		tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
> >-		    tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
> >+		tbo->offset = (mem->start << PAGE_SHIFT) +
> >+		    tbo->bdev->man[mem->mem_type].gpu_offset;
> mem->mem_type seems not set yet as well if I am correct.
> IIRC, I feel it's better that tbo->offset is set out of this function after
> get_node successfully.
> 
how about change to tbo->bdev->man[TTM_PL_TT].gpu_offset? since
gtt_mgr is for GTT only.

> Regards,
> David Zhou
> 
> >  	}
> >  	return r;
>
Am 20.09.2016 um 12:19 schrieb zhoucm1:
>
>
> On 2016年09月20日 17:09, Flora Cui wrote:
>> Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
>> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> index 262e872..b266cf7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> @@ -128,8 +128,8 @@ int amdgpu_gtt_mgr_alloc(struct 
>> ttm_mem_type_manager *man,
>>         if (!r) {
>>           mem->start = node->start;
>> -        tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
>> - tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
>> +        tbo->offset = (mem->start << PAGE_SHIFT) +
>> +            tbo->bdev->man[mem->mem_type].gpu_offset;
> mem->mem_type seems not set yet as well if I am correct.
> IIRC, I feel it's better that tbo->offset is set out of this function 
> after get_node successfully.

The patch itself is indeed not correct, but it points me to the bug I've 
been searching for weeks now.

So thanks a lot for this.

Regards,
Christian.

>
> Regards,
> David Zhou
>
>>       }
>>         return r;
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Am 20.09.2016 um 12:41 schrieb Flora Cui:
> On Tue, Sep 20, 2016 at 06:19:33PM +0800, zhoucm1 wrote:
>>
>> On 2016年09月20日 17:09, Flora Cui wrote:
>>> Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
>>> Signed-off-by: Flora Cui <Flora.Cui@amd.com>
>>> ---
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> index 262e872..b266cf7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> @@ -128,8 +128,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
>>>   	if (!r) {
>>>   		mem->start = node->start;
>>> -		tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
>>> -		    tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
>>> +		tbo->offset = (mem->start << PAGE_SHIFT) +
>>> +		    tbo->bdev->man[mem->mem_type].gpu_offset;
>> mem->mem_type seems not set yet as well if I am correct.
>> IIRC, I feel it's better that tbo->offset is set out of this function after
>> get_node successfully.
>>
> how about change to tbo->bdev->man[TTM_PL_TT].gpu_offset? since
> gtt_mgr is for GTT only.

Not 100% correct either.

The problem is that sometimes a GTT MM node will be bound for a BO which 
is still in VRAM (e.g. on eviction for example).

So you need to check if (&tbo->mem == mem) and only then update the 
tbo's offset.

Regards,
Christian.

>
>> Regards,
>> David Zhou
>>
>>>   	}
>>>   	return r;
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
we need this fix for urgent promotion. so please please reply me asap.

On Tue, Sep 20, 2016 at 01:02:20PM +0200, Christian König wrote:
> Am 20.09.2016 um 12:41 schrieb Flora Cui:
> >On Tue, Sep 20, 2016 at 06:19:33PM +0800, zhoucm1 wrote:
> >>
> >>On 2016年09月20日 17:09, Flora Cui wrote:
> >>>Change-Id: I89e9be3d5c96d46655f3a977fb557b20b4d87609
> >>>Signed-off-by: Flora Cui <Flora.Cui@amd.com>
> >>>---
> >>>  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 4 ++--
> >>>  1 file changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >>>index 262e872..b266cf7 100644
> >>>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >>>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> >>>@@ -128,8 +128,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
> >>>  	if (!r) {
> >>>  		mem->start = node->start;
> >>>-		tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
> >>>-		    tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
> >>>+		tbo->offset = (mem->start << PAGE_SHIFT) +
> >>>+		    tbo->bdev->man[mem->mem_type].gpu_offset;
> >>mem->mem_type seems not set yet as well if I am correct.
> >>IIRC, I feel it's better that tbo->offset is set out of this function after
> >>get_node successfully.
> >>
> >how about change to tbo->bdev->man[TTM_PL_TT].gpu_offset? since
> >gtt_mgr is for GTT only.
> 
> Not 100% correct either.
> 
> The problem is that sometimes a GTT MM node will be bound for a BO which is
> still in VRAM (e.g. on eviction for example).
> 
> So you need to check if (&tbo->mem == mem) and only then update the tbo's
> offset.
> 
> Regards,
> Christian.
> 
> >
> >>Regards,
> >>David Zhou
> >>
> >>>  	}
> >>>  	return r;
> >_______________________________________________
> >amd-gfx mailing list
> >amd-gfx@lists.freedesktop.org
> >https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> 
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx