[PATCH 3/3] drm/amd/amdgpu: Add bank selection for MMIO debugfs (v3)

Nicolai Hähnle nhaehnle at gmail.com
Wed Jun 29 15:30:32 UTC 2016


On 29.06.2016 16:22, StDenis, Tom wrote:
> Thanks.  I use vmalloc first to avoid putting the array on the stack (as
> good practice) then I chose vmalloc because there really isn't a need
> for contiguous memory and in theory it should be just as fast to
> allocate.  Wouldn't you typically use kmalloc when you need contiguous
> memory?  Though this all boils down to a single page since it's so small
> anyways.

If it's potentially non-contiguous memory, isn't there the overhead of 
page table manipulation?

Maybe somebody who's more familiar with the kernel has an opinion...

Cheers,
Nicolai

>
>
> Tom
>
>
>
>
>
> ------------------------------------------------------------------------
> *From:* Nicolai Hähnle <nhaehnle at gmail.com>
> *Sent:* Wednesday, June 29, 2016 10:20
> *To:* Tom St Denis; amd-gfx at lists.freedesktop.org
> *Cc:* StDenis, Tom
> *Subject:* Re: [PATCH 3/3] drm/amd/amdgpu: Add bank selection for MMIO
> debugfs (v3)
> Patch 1 & 3 are
>
> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Patch 2 looks mostly fine to me, too, but I'm not sure about the
> vmalloc/vfree vs. kmalloc/kfree.
>
> Cheers,
> Nicolai
>
> On 29.06.2016 15:56, Tom St Denis wrote:
>> (v2) Added INSTANCE selector
>> (v3) Changed order of bank selectors
>>
>> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 35 +++++++++++++++++++++++++++---
>>   1 file changed, 32 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 7f08ac02f9de..4a8f66c5ff43 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -2244,20 +2244,43 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
>>        struct amdgpu_device *adev = f->f_inode->i_private;
>>        ssize_t result = 0;
>>        int r;
>> +     bool use_bank;
>> +     unsigned instance_bank, sh_bank, se_bank;
>>
>>        if (size & 0x3 || *pos & 0x3)
>>                return -EINVAL;
>>
>> +     if (*pos & (1ULL << 62)) {
>> +             se_bank = (*pos >> 24) & 0x3FF;
>> +             sh_bank = (*pos >> 34) & 0x3FF;
>> +             instance_bank = (*pos >> 44) & 0x3FF;
>> +             use_bank = 1;
>> +             *pos &= 0xFFFFFF;
>> +     } else {
>> +             use_bank = 0;
>> +     }
>> +
>> +     if (use_bank) {
>> +             if (sh_bank >= adev->gfx.config.max_sh_per_se ||
>> +                 se_bank >= adev->gfx.config.max_shader_engines)
>> +                     return -EINVAL;
>> +             mutex_lock(&adev->grbm_idx_mutex);
>> +             amdgpu_gfx_select_se_sh(adev, se_bank,
>> +                                     sh_bank, instance_bank);
>> +     }
>> +
>>        while (size) {
>>                uint32_t value;
>>
>>                if (*pos > adev->rmmio_size)
>> -                     return result;
>> +                     goto end;
>>
>>                value = RREG32(*pos >> 2);
>>                r = put_user(value, (uint32_t *)buf);
>> -             if (r)
>> -                     return r;
>> +             if (r) {
>> +                     result = r;
>> +                     goto end;
>> +             }
>>
>>                result += 4;
>>                buf += 4;
>> @@ -2265,6 +2288,12 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
>>                size -= 4;
>>        }
>>
>> +end:
>> +     if (use_bank) {
>> +             amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
>> +             mutex_unlock(&adev->grbm_idx_mutex);
>> +     }
>> +
>>        return result;
>>   }
>>
>>


More information about the amd-gfx mailing list