On 08.07.2015 18:14, Alex Deucher wrote: > On Wed, Jul 8, 2015 at 12:08 PM, Christian König > <deathsimple at 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 at >>> vodafone.de> >>> wrote: >>>> From: Christian König <christian.koenig at 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 at amd.com> >>>> Test-by: hadack at 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 >>>>