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

Alex Deucher alexdeucher at gmail.com
Wed Jul 8 12:03:26 PDT 2015


On Wed, Jul 8, 2015 at 2:28 PM, Christian König <deathsimple at 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 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.

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
>>>>>>>
>


More information about the dri-devel mailing list