[PATCH 1/2] drm/radeon: allways add the VM clear duplicate

Christian König deathsimple at vodafone.de
Wed Jul 8 11:28:34 PDT 2015


On 08.07.2015 18:33, Alex Deucher wrote:
> On Wed, Jul 8, 2015 at 12:31 PM, Christian König
> <deathsimple at 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 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.
> 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
>>>>>>



More information about the dri-devel mailing list