From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de --- drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) { - spin_lock(&vm->status_lock); - if (list_empty(&bo_va->vm_status)) { - /* add a clone of the bo_va to clear the old address */ - struct radeon_bo_va *tmp; - spin_unlock(&vm->status_lock); - tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL); - if (!tmp) { - mutex_unlock(&vm->mutex); - r = -ENOMEM; - goto error_unreserve; - } - tmp->it.start = bo_va->it.start; - tmp->it.last = bo_va->it.last; - tmp->vm = vm; - tmp->bo = radeon_bo_ref(bo_va->bo); - spin_lock(&vm->status_lock); - list_add(&tmp->vm_status, &vm->freed); + /* add a clone of the bo_va to clear the old address */ + struct radeon_bo_va *tmp; + tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL); + if (!tmp) { + mutex_unlock(&vm->mutex); + r = -ENOMEM; + goto error_unreserve; } - spin_unlock(&vm->status_lock); + tmp->it.start = bo_va->it.start; + tmp->it.last = bo_va->it.last; + tmp->vm = vm; + tmp->bo = radeon_bo_ref(bo_va->bo);
interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0; + + spin_lock(&vm->status_lock); + list_del_init(&bo_va->vm_status); + list_add(&tmp->vm_status, &vm->freed); + spin_unlock(&vm->status_lock); }
if (soffset || eoffset) {
From: Christian König christian.koenig@amd.com
Otherwise we try to clear BO_VAs without an address.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=91141
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de --- drivers/gpu/drm/radeon/radeon_vm.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index 0310965..48d97c0 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -507,22 +507,21 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, tmp->bo = radeon_bo_ref(bo_va->bo);
interval_tree_remove(&bo_va->it, &vm->va); + spin_lock(&vm->status_lock); bo_va->it.start = 0; bo_va->it.last = 0; - - spin_lock(&vm->status_lock); list_del_init(&bo_va->vm_status); list_add(&tmp->vm_status, &vm->freed); spin_unlock(&vm->status_lock); }
if (soffset || eoffset) { + spin_lock(&vm->status_lock); bo_va->it.start = soffset; bo_va->it.last = eoffset - 1; - interval_tree_insert(&bo_va->it, &vm->va); - spin_lock(&vm->status_lock); list_add(&bo_va->vm_status, &vm->cleared); spin_unlock(&vm->status_lock); + interval_tree_insert(&bo_va->it, &vm->va); }
bo_va->flags = flags; @@ -1156,7 +1155,8 @@ void radeon_vm_bo_invalidate(struct radeon_device *rdev,
list_for_each_entry(bo_va, &bo->va, bo_list) { spin_lock(&bo_va->vm->status_lock); - if (list_empty(&bo_va->vm_status)) + if (list_empty(&bo_va->vm_status) && + (bo_va->it.start || bo_va->it.last)) list_add(&bo_va->vm_status, &bo_va->vm->invalidated); spin_unlock(&bo_va->vm->status_lock); }
On 08.07.2015 16:56, Christian König wrote:
From: Christian König christian.koenig@amd.com
Otherwise we try to clear BO_VAs without an address.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=91141
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This series is
Tested-by: Michel Dänzer michel.daenzer@amd.com
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
Thanks, Christian.
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On Wed, Jul 8, 2015 at 12:08 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-4.2-wip
Thanks,
Alex
Thanks, Christian.
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old
address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va),
GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On 08.07.2015 18:14, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:08 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-4.2-wip
Ah, here is the problem. This branch don't yet contains the fixes which went upstream with 4.1.
What should we do? I don't want to change those patches and create a merge conflict when you merge in 4.1.
Christian.
Thanks,
Alex
Thanks, Christian.
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old
address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va),
GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On Wed, Jul 8, 2015 at 12:31 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 18:14, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:08 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-4.2-wip
Ah, here is the problem. This branch don't yet contains the fixes which went upstream with 4.1.
What should we do? I don't want to change those patches and create a merge conflict when you merge in 4.1.
I'll rebase by tree on Linus' tree. Dave is on vacation so his tree is lagging.
Alex
Christian.
Thanks,
Alex
Thanks, Christian.
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old
address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va),
GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On 08.07.2015 18:33, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:31 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 18:14, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:08 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote:
From: Christian König christian.koenig@amd.com
We need to allways add the VM clear duplicate of the BO_VA, no matter what the old status was.
Signed-off-by: Christian König christian.koenig@amd.com Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-4.2-wip
Ah, here is the problem. This branch don't yet contains the fixes which went upstream with 4.1.
What should we do? I don't want to change those patches and create a merge conflict when you merge in 4.1.
I'll rebase by tree on Linus' tree. Dave is on vacation so his tree is lagging.
Sounds good, let me know when you have updated the branch and there are still conflicts.
Regards, Christian.
Alex
Christian.
Thanks,
Alex
Thanks, Christian.
Alex
drivers/gpu/drm/radeon/radeon_vm.c | 34
++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c index ec10533..0310965 100644 --- a/drivers/gpu/drm/radeon/radeon_vm.c +++ b/drivers/gpu/drm/radeon/radeon_vm.c @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, }
if (bo_va->it.start || bo_va->it.last) {
spin_lock(&vm->status_lock);
if (list_empty(&bo_va->vm_status)) {
/* add a clone of the bo_va to clear the old
address */
struct radeon_bo_va *tmp;
spin_unlock(&vm->status_lock);
tmp = kzalloc(sizeof(struct radeon_bo_va),
GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve;
}
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo);
spin_lock(&vm->status_lock);
list_add(&tmp->vm_status, &vm->freed);
/* add a clone of the bo_va to clear the old address */
struct radeon_bo_va *tmp;
tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
if (!tmp) {
mutex_unlock(&vm->mutex);
r = -ENOMEM;
goto error_unreserve; }
spin_unlock(&vm->status_lock);
tmp->it.start = bo_va->it.start;
tmp->it.last = bo_va->it.last;
tmp->vm = vm;
tmp->bo = radeon_bo_ref(bo_va->bo); interval_tree_remove(&bo_va->it, &vm->va); bo_va->it.start = 0; bo_va->it.last = 0;
spin_lock(&vm->status_lock);
list_del_init(&bo_va->vm_status);
list_add(&tmp->vm_status, &vm->freed);
spin_unlock(&vm->status_lock); } if (soffset || eoffset) {
-- 1.9.1
On Wed, Jul 8, 2015 at 2:28 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 18:33, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:31 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 18:14, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 12:08 PM, Christian König deathsimple@vodafone.de wrote:
On 08.07.2015 17:57, Alex Deucher wrote:
On Wed, Jul 8, 2015 at 3:56 AM, Christian König deathsimple@vodafone.de wrote: > > From: Christian König christian.koenig@amd.com > > We need to allways add the VM clear duplicate of the BO_VA, > no matter what the old status was. > > Signed-off-by: Christian König christian.koenig@amd.com > Test-by: hadack@gmx.de
This patch does not apply cleanly. It also adds an undefined label error_unreserve. Is there an additional patch required?
That's possible, but I thought the depending patch would have already been upstream.
Can you create a drm-fixes-4.2 branch I can rebase on?
http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-4.2-wip
Ah, here is the problem. This branch don't yet contains the fixes which went upstream with 4.1.
What should we do? I don't want to change those patches and create a merge conflict when you merge in 4.1.
I'll rebase by tree on Linus' tree. Dave is on vacation so his tree is lagging.
Sounds good, let me know when you have updated the branch and there are still conflicts.
All set.
Thanks,
Alex
Regards, Christian.
Alex
Christian.
Thanks,
Alex
Thanks, Christian.
Alex
> --- > drivers/gpu/drm/radeon/radeon_vm.c | 34 > ++++++++++++++++------------------ > 1 file changed, 16 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_vm.c > b/drivers/gpu/drm/radeon/radeon_vm.c > index ec10533..0310965 100644 > --- a/drivers/gpu/drm/radeon/radeon_vm.c > +++ b/drivers/gpu/drm/radeon/radeon_vm.c > @@ -493,29 +493,27 @@ int radeon_vm_bo_set_addr(struct radeon_device > *rdev, > } > > if (bo_va->it.start || bo_va->it.last) { > - spin_lock(&vm->status_lock); > - if (list_empty(&bo_va->vm_status)) { > - /* add a clone of the bo_va to clear the old > address */ > - struct radeon_bo_va *tmp; > - spin_unlock(&vm->status_lock); > - tmp = kzalloc(sizeof(struct radeon_bo_va), > GFP_KERNEL); > - if (!tmp) { > - mutex_unlock(&vm->mutex); > - r = -ENOMEM; > - goto error_unreserve; > - } > - tmp->it.start = bo_va->it.start; > - tmp->it.last = bo_va->it.last; > - tmp->vm = vm; > - tmp->bo = radeon_bo_ref(bo_va->bo); > - spin_lock(&vm->status_lock); > - list_add(&tmp->vm_status, &vm->freed); > + /* add a clone of the bo_va to clear the old address > */ > + struct radeon_bo_va *tmp; > + tmp = kzalloc(sizeof(struct radeon_bo_va), > GFP_KERNEL); > + if (!tmp) { > + mutex_unlock(&vm->mutex); > + r = -ENOMEM; > + goto error_unreserve; > } > - spin_unlock(&vm->status_lock); > + tmp->it.start = bo_va->it.start; > + tmp->it.last = bo_va->it.last; > + tmp->vm = vm; > + tmp->bo = radeon_bo_ref(bo_va->bo); > > interval_tree_remove(&bo_va->it, &vm->va); > bo_va->it.start = 0; > bo_va->it.last = 0; > + > + spin_lock(&vm->status_lock); > + list_del_init(&bo_va->vm_status); > + list_add(&tmp->vm_status, &vm->freed); > + spin_unlock(&vm->status_lock); > } > > if (soffset || eoffset) { > -- > 1.9.1 >
dri-devel@lists.freedesktop.org