* [PATCH] drm/ttm: callback move_notify any time bo placement change v3
@ 2011-11-18 23:32 j.glisse
2011-11-19 20:45 ` Thomas Hellstrom
0 siblings, 1 reply; 4+ messages in thread
From: j.glisse @ 2011-11-18 23:32 UTC (permalink / raw)
To: dri-devel; +Cc: thellstrom, Jerome Glisse
From: Jerome Glisse <jglisse@redhat.com>
Previously we were calling back move_notify in error path when the
bo is returned to it's original position or when destroy the bo.
When destroying the bo set the new mem placement as NULL when calling
back in the driver.
Updating nouveau to deal with NULL placement properly.
v2: reserve the object before calling move_notify in bo destroy path
at that point ttm should be the only piece of code interacting
with the object so atomic_set is safe here.
v3: callback move notify only once the bo is in its new position
call move notify want swaping out the buffer
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
---
drivers/gpu/drm/nouveau/nouveau_bo.c | 4 ++--
drivers/gpu/drm/ttm/ttm_bo.c | 17 +++++++++++++----
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 857bca4..f12dd0f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -815,10 +815,10 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem)
struct nouveau_vma *vma;
list_for_each_entry(vma, &nvbo->vma_list, head) {
- if (new_mem->mem_type == TTM_PL_VRAM) {
+ if (new_mem && new_mem->mem_type == TTM_PL_VRAM) {
nouveau_vm_map(vma, new_mem->mm_node);
} else
- if (new_mem->mem_type == TTM_PL_TT &&
+ if (new_mem && new_mem->mem_type == TTM_PL_TT &&
nvbo->page_shift == vma->vm->spg_shift) {
nouveau_vm_map_sg(vma, 0, new_mem->
num_pages << PAGE_SHIFT,
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index de7ad99..0c1d821 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -147,6 +147,12 @@ static void ttm_bo_release_list(struct kref *list_kref)
BUG_ON(!list_empty(&bo->lru));
BUG_ON(!list_empty(&bo->ddestroy));
+ /* force bo to reserved, at this point we should be the only owner */
+ atomic_set(&bo->reserved, 1);
+ if (bdev->driver->move_notify)
+ bdev->driver->move_notify(bo, NULL);
+ atomic_set(&bo->reserved, 0);
+
if (bo->ttm)
ttm_tt_destroy(bo->ttm);
atomic_dec(&bo->glob->bo_count);
@@ -404,9 +410,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
}
}
- if (bdev->driver->move_notify)
- bdev->driver->move_notify(bo, mem);
-
if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve, no_wait_gpu, mem);
@@ -419,6 +422,9 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
if (ret)
goto out_err;
+ if (bdev->driver->move_notify)
+ bdev->driver->move_notify(bo, mem);
+
moved:
if (bo->evicted) {
ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement);
@@ -1872,9 +1878,12 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
if (bo->bdev->driver->swap_notify)
bo->bdev->driver->swap_notify(bo);
+ if (bo->bdev->driver->move_notify)
+ bo->bdev->driver->move_notify(bo, NULL);
+
ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage);
-out:
+out:
/**
*
* Unreserve without putting on LRU to avoid swapping out an
--
1.7.7.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/ttm: callback move_notify any time bo placement change v3
2011-11-18 23:32 [PATCH] drm/ttm: callback move_notify any time bo placement change v3 j.glisse
@ 2011-11-19 20:45 ` Thomas Hellstrom
2011-11-20 21:02 ` Jerome Glisse
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Hellstrom @ 2011-11-19 20:45 UTC (permalink / raw)
To: j.glisse; +Cc: Jerome Glisse, dri-devel
On 11/19/2011 12:32 AM, j.glisse@gmail.com wrote:
> From: Jerome Glisse<jglisse@redhat.com>
>
> Previously we were calling back move_notify in error path when the
> bo is returned to it's original position or when destroy the bo.
> When destroying the bo set the new mem placement as NULL when calling
> back in the driver.
>
> Updating nouveau to deal with NULL placement properly.
>
> v2: reserve the object before calling move_notify in bo destroy path
> at that point ttm should be the only piece of code interacting
> with the object so atomic_set is safe here.
> v3: callback move notify only once the bo is in its new position
> call move notify want swaping out the buffer
>
> Reviewed-by: Jerome Glisse<jglisse@redhat.com>
> ---
> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 ++--
> drivers/gpu/drm/ttm/ttm_bo.c | 17 +++++++++++++----
> 2 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 857bca4..f12dd0f 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -815,10 +815,10 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem)
> struct nouveau_vma *vma;
>
> list_for_each_entry(vma,&nvbo->vma_list, head) {
> - if (new_mem->mem_type == TTM_PL_VRAM) {
> + if (new_mem&& new_mem->mem_type == TTM_PL_VRAM) {
> nouveau_vm_map(vma, new_mem->mm_node);
> } else
> - if (new_mem->mem_type == TTM_PL_TT&&
> + if (new_mem&& new_mem->mem_type == TTM_PL_TT&&
> nvbo->page_shift == vma->vm->spg_shift) {
> nouveau_vm_map_sg(vma, 0, new_mem->
> num_pages<< PAGE_SHIFT,
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index de7ad99..0c1d821 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -147,6 +147,12 @@ static void ttm_bo_release_list(struct kref *list_kref)
> BUG_ON(!list_empty(&bo->lru));
> BUG_ON(!list_empty(&bo->ddestroy));
>
> + /* force bo to reserved, at this point we should be the only owner */
> + atomic_set(&bo->reserved, 1);
> + if (bdev->driver->move_notify)
> + bdev->driver->move_notify(bo, NULL);
> + atomic_set(&bo->reserved, 0);
>
We can actually do this from the top of ttm_bo_cleanup_memtype_use().
Then we should catch all current and future use-cases and you wouldn't
need the fake reserving, because at that point, we're already reserved.
> +
> if (bo->ttm)
> ttm_tt_destroy(bo->ttm);
> atomic_dec(&bo->glob->bo_count);
> @@ -404,9 +410,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> }
> }
>
> - if (bdev->driver->move_notify)
> - bdev->driver->move_notify(bo, mem);
> -
> if (!(old_man->flags& TTM_MEMTYPE_FLAG_FIXED)&&
> !(new_man->flags& TTM_MEMTYPE_FLAG_FIXED))
> ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve, no_wait_gpu, mem);
> @@ -419,6 +422,9 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> if (ret)
> goto out_err;
>
> + if (bdev->driver->move_notify)
> + bdev->driver->move_notify(bo, mem);
> +
>
> moved:
> if (bo->evicted) {
> ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement);
> @@ -1872,9 +1878,12 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
> if (bo->bdev->driver->swap_notify)
> bo->bdev->driver->swap_notify(bo);
>
> + if (bo->bdev->driver->move_notify)
> + bo->bdev->driver->move_notify(bo, NULL);
> +
>
Hmm. On second thought, we could use swap_notify() for this, I missed we
already had that and that's what vmwgfx once used for exactly the same
purpose.
> ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage);
> -out:
>
> +out:
>
Whitespace.
/Thomas
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/ttm: callback move_notify any time bo placement change v3
2011-11-19 20:45 ` Thomas Hellstrom
@ 2011-11-20 21:02 ` Jerome Glisse
2011-12-01 7:10 ` Thomas Hellstrom
0 siblings, 1 reply; 4+ messages in thread
From: Jerome Glisse @ 2011-11-20 21:02 UTC (permalink / raw)
To: Thomas Hellstrom; +Cc: Jerome Glisse, dri-devel
[-- Attachment #1: Type: text/plain, Size: 4510 bytes --]
On Sat, Nov 19, 2011 at 3:45 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
> On 11/19/2011 12:32 AM, j.glisse@gmail.com wrote:
>>
>> From: Jerome Glisse<jglisse@redhat.com>
>>
>> Previously we were calling back move_notify in error path when the
>> bo is returned to it's original position or when destroy the bo.
>> When destroying the bo set the new mem placement as NULL when calling
>> back in the driver.
>>
>> Updating nouveau to deal with NULL placement properly.
>>
>> v2: reserve the object before calling move_notify in bo destroy path
>> at that point ttm should be the only piece of code interacting
>> with the object so atomic_set is safe here.
>> v3: callback move notify only once the bo is in its new position
>> call move notify want swaping out the buffer
>>
>> Reviewed-by: Jerome Glisse<jglisse@redhat.com>
>> ---
>> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 ++--
>> drivers/gpu/drm/ttm/ttm_bo.c | 17 +++++++++++++----
>> 2 files changed, 15 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c
>> b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> index 857bca4..f12dd0f 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> @@ -815,10 +815,10 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo,
>> struct ttm_mem_reg *new_mem)
>> struct nouveau_vma *vma;
>>
>> list_for_each_entry(vma,&nvbo->vma_list, head) {
>> - if (new_mem->mem_type == TTM_PL_VRAM) {
>> + if (new_mem&& new_mem->mem_type == TTM_PL_VRAM) {
>> nouveau_vm_map(vma, new_mem->mm_node);
>> } else
>> - if (new_mem->mem_type == TTM_PL_TT&&
>> + if (new_mem&& new_mem->mem_type == TTM_PL_TT&&
>> nvbo->page_shift == vma->vm->spg_shift) {
>> nouveau_vm_map_sg(vma, 0, new_mem->
>> num_pages<< PAGE_SHIFT,
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>> index de7ad99..0c1d821 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>> @@ -147,6 +147,12 @@ static void ttm_bo_release_list(struct kref
>> *list_kref)
>> BUG_ON(!list_empty(&bo->lru));
>> BUG_ON(!list_empty(&bo->ddestroy));
>>
>> + /* force bo to reserved, at this point we should be the only owner
>> */
>> + atomic_set(&bo->reserved, 1);
>> + if (bdev->driver->move_notify)
>> + bdev->driver->move_notify(bo, NULL);
>> + atomic_set(&bo->reserved, 0);
>>
>
> We can actually do this from the top of ttm_bo_cleanup_memtype_use(). Then
> we should catch all current and future use-cases and you wouldn't need the
> fake reserving, because at that point, we're already reserved.
>
>> +
>> if (bo->ttm)
>> ttm_tt_destroy(bo->ttm);
>> atomic_dec(&bo->glob->bo_count);
>> @@ -404,9 +410,6 @@ static int ttm_bo_handle_move_mem(struct
>> ttm_buffer_object *bo,
>> }
>> }
>>
>> - if (bdev->driver->move_notify)
>> - bdev->driver->move_notify(bo, mem);
>> -
>> if (!(old_man->flags& TTM_MEMTYPE_FLAG_FIXED)&&
>> !(new_man->flags& TTM_MEMTYPE_FLAG_FIXED))
>> ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve,
>> no_wait_gpu, mem);
>> @@ -419,6 +422,9 @@ static int ttm_bo_handle_move_mem(struct
>> ttm_buffer_object *bo,
>> if (ret)
>> goto out_err;
>>
>> + if (bdev->driver->move_notify)
>> + bdev->driver->move_notify(bo, mem);
>> +
>>
>
>> moved:
>> if (bo->evicted) {
>> ret = bdev->driver->invalidate_caches(bdev,
>> bo->mem.placement);
>> @@ -1872,9 +1878,12 @@ static int ttm_bo_swapout(struct ttm_mem_shrink
>> *shrink)
>> if (bo->bdev->driver->swap_notify)
>> bo->bdev->driver->swap_notify(bo);
>>
>> + if (bo->bdev->driver->move_notify)
>> + bo->bdev->driver->move_notify(bo, NULL);
>> +
>>
>
> Hmm. On second thought, we could use swap_notify() for this, I missed we
> already had that and that's what vmwgfx once used for exactly the same
> purpose.
>
>
>> ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage);
>> -out:
>>
>> +out:
>>
>
> Whitespace.
>
> /Thomas
>
>
Attached updated patch
Cheers,
Jerome
[-- Attachment #2: 0001-drm-ttm-callback-move_notify-any-time-bo-placement-c.patch --]
[-- Type: application/octet-stream, Size: 3038 bytes --]
From 2bd2641180ed79974e72974266140cf88d06b18a Mon Sep 17 00:00:00 2001
From: Jerome Glisse <jglisse@redhat.com>
Date: Fri, 18 Nov 2011 11:47:03 -0500
Subject: [PATCH] drm/ttm: callback move_notify any time bo placement change
v4
Previously we were calling back move_notify in error path when the
bo is returned to it's original position or when destroy the bo.
When destroying the bo set the new mem placement as NULL when calling
back in the driver.
Updating nouveau to deal with NULL placement properly.
v2: reserve the object before calling move_notify in bo destroy path
at that point ttm should be the only piece of code interacting
with the object so atomic_set is safe here.
v3: callback move notify only once the bo is in its new position
call move notify want swaping out the buffer
v4:- don't call move_notify when swapin out bo, assume driver should
do what is appropriate in swap notify
- move move_notify call back to ttm_bo_cleanup_memtype_use for
destroy path
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
---
drivers/gpu/drm/nouveau/nouveau_bo.c | 4 ++--
drivers/gpu/drm/ttm/ttm_bo.c | 9 ++++++---
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 857bca4..f12dd0f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -815,10 +815,10 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem)
struct nouveau_vma *vma;
list_for_each_entry(vma, &nvbo->vma_list, head) {
- if (new_mem->mem_type == TTM_PL_VRAM) {
+ if (new_mem && new_mem->mem_type == TTM_PL_VRAM) {
nouveau_vm_map(vma, new_mem->mm_node);
} else
- if (new_mem->mem_type == TTM_PL_TT &&
+ if (new_mem && new_mem->mem_type == TTM_PL_TT &&
nvbo->page_shift == vma->vm->spg_shift) {
nouveau_vm_map_sg(vma, 0, new_mem->
num_pages << PAGE_SHIFT,
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index de7ad99..119b6e3 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -404,9 +404,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
}
}
- if (bdev->driver->move_notify)
- bdev->driver->move_notify(bo, mem);
-
if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve, no_wait_gpu, mem);
@@ -419,6 +416,9 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
if (ret)
goto out_err;
+ if (bdev->driver->move_notify)
+ bdev->driver->move_notify(bo, mem);
+
moved:
if (bo->evicted) {
ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement);
@@ -457,6 +457,9 @@ out_err:
static void ttm_bo_cleanup_memtype_use(struct ttm_buffer_object *bo)
{
+ if (bo->bdev->driver->move_notify)
+ bo->bdev->driver->move_notify(bo, NULL);
+
if (bo->ttm) {
ttm_tt_unbind(bo->ttm);
ttm_tt_destroy(bo->ttm);
--
1.7.7.1
[-- Attachment #3: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/ttm: callback move_notify any time bo placement change v3
2011-11-20 21:02 ` Jerome Glisse
@ 2011-12-01 7:10 ` Thomas Hellstrom
0 siblings, 0 replies; 4+ messages in thread
From: Thomas Hellstrom @ 2011-12-01 7:10 UTC (permalink / raw)
To: Jerome Glisse; +Cc: Thomas Hellstrom, Jerome Glisse, dri-devel
Updated patch
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
On 11/20/2011 10:02 PM, Jerome Glisse wrote:
> On Sat, Nov 19, 2011 at 3:45 PM, Thomas Hellstrom<thellstrom@vmware.com> wrote:
>
>> On 11/19/2011 12:32 AM, j.glisse@gmail.com wrote:
>>
>>> From: Jerome Glisse<jglisse@redhat.com>
>>>
>>> Previously we were calling back move_notify in error path when the
>>> bo is returned to it's original position or when destroy the bo.
>>> When destroying the bo set the new mem placement as NULL when calling
>>> back in the driver.
>>>
>>> Updating nouveau to deal with NULL placement properly.
>>>
>>> v2: reserve the object before calling move_notify in bo destroy path
>>> at that point ttm should be the only piece of code interacting
>>> with the object so atomic_set is safe here.
>>> v3: callback move notify only once the bo is in its new position
>>> call move notify want swaping out the buffer
>>>
>>> Reviewed-by: Jerome Glisse<jglisse@redhat.com>
>>> ---
>>> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 ++--
>>> drivers/gpu/drm/ttm/ttm_bo.c | 17 +++++++++++++----
>>> 2 files changed, 15 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c
>>> b/drivers/gpu/drm/nouveau/nouveau_bo.c
>>> index 857bca4..f12dd0f 100644
>>> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
>>> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
>>> @@ -815,10 +815,10 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo,
>>> struct ttm_mem_reg *new_mem)
>>> struct nouveau_vma *vma;
>>>
>>> list_for_each_entry(vma,&nvbo->vma_list, head) {
>>> - if (new_mem->mem_type == TTM_PL_VRAM) {
>>> + if (new_mem&& new_mem->mem_type == TTM_PL_VRAM) {
>>> nouveau_vm_map(vma, new_mem->mm_node);
>>> } else
>>> - if (new_mem->mem_type == TTM_PL_TT&&
>>> + if (new_mem&& new_mem->mem_type == TTM_PL_TT&&
>>> nvbo->page_shift == vma->vm->spg_shift) {
>>> nouveau_vm_map_sg(vma, 0, new_mem->
>>> num_pages<< PAGE_SHIFT,
>>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>>> index de7ad99..0c1d821 100644
>>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>>> @@ -147,6 +147,12 @@ static void ttm_bo_release_list(struct kref
>>> *list_kref)
>>> BUG_ON(!list_empty(&bo->lru));
>>> BUG_ON(!list_empty(&bo->ddestroy));
>>>
>>> + /* force bo to reserved, at this point we should be the only owner
>>> */
>>> + atomic_set(&bo->reserved, 1);
>>> + if (bdev->driver->move_notify)
>>> + bdev->driver->move_notify(bo, NULL);
>>> + atomic_set(&bo->reserved, 0);
>>>
>>>
>> We can actually do this from the top of ttm_bo_cleanup_memtype_use(). Then
>> we should catch all current and future use-cases and you wouldn't need the
>> fake reserving, because at that point, we're already reserved.
>>
>>
>>> +
>>> if (bo->ttm)
>>> ttm_tt_destroy(bo->ttm);
>>> atomic_dec(&bo->glob->bo_count);
>>> @@ -404,9 +410,6 @@ static int ttm_bo_handle_move_mem(struct
>>> ttm_buffer_object *bo,
>>> }
>>> }
>>>
>>> - if (bdev->driver->move_notify)
>>> - bdev->driver->move_notify(bo, mem);
>>> -
>>> if (!(old_man->flags& TTM_MEMTYPE_FLAG_FIXED)&&
>>> !(new_man->flags& TTM_MEMTYPE_FLAG_FIXED))
>>> ret = ttm_bo_move_ttm(bo, evict, no_wait_reserve,
>>> no_wait_gpu, mem);
>>> @@ -419,6 +422,9 @@ static int ttm_bo_handle_move_mem(struct
>>> ttm_buffer_object *bo,
>>> if (ret)
>>> goto out_err;
>>>
>>> + if (bdev->driver->move_notify)
>>> + bdev->driver->move_notify(bo, mem);
>>> +
>>>
>>>
>>
>>> moved:
>>> if (bo->evicted) {
>>> ret = bdev->driver->invalidate_caches(bdev,
>>> bo->mem.placement);
>>> @@ -1872,9 +1878,12 @@ static int ttm_bo_swapout(struct ttm_mem_shrink
>>> *shrink)
>>> if (bo->bdev->driver->swap_notify)
>>> bo->bdev->driver->swap_notify(bo);
>>>
>>> + if (bo->bdev->driver->move_notify)
>>> + bo->bdev->driver->move_notify(bo, NULL);
>>> +
>>>
>>>
>> Hmm. On second thought, we could use swap_notify() for this, I missed we
>> already had that and that's what vmwgfx once used for exactly the same
>> purpose.
>>
>>
>>
>>> ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage);
>>> -out:
>>>
>>> +out:
>>>
>>>
>> Whitespace.
>>
>> /Thomas
>>
>>
>>
> Attached updated patch
>
> Cheers,
> Jerome
>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-12-01 7:13 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-18 23:32 [PATCH] drm/ttm: callback move_notify any time bo placement change v3 j.glisse
2011-11-19 20:45 ` Thomas Hellstrom
2011-11-20 21:02 ` Jerome Glisse
2011-12-01 7:10 ` Thomas Hellstrom
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.