[PATCH] drm/amd/amdgpu: Add write() method to VRAM debugfs entry
Tom St Denis
tom.stdenis at amd.com
Tue Aug 29 12:48:37 UTC 2017
On 29/08/17 08:46 AM, Christian König wrote:
> Am 29.08.2017 um 14:43 schrieb Tom St Denis:
>> Allows writing data to vram via debugfs.
>>
>> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 41
>> ++++++++++++++++++++++++++++++++-
>> 1 file changed, 40 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index c97a99427eea..cdc96d027707 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -1671,10 +1671,49 @@ static ssize_t amdgpu_ttm_vram_read(struct
>> file *f, char __user *buf,
>> return result;
>> }
>> +static ssize_t amdgpu_ttm_vram_write(struct file *f, const char
>> __user *buf,
>> + size_t size, loff_t *pos)
>> +{
>> + struct amdgpu_device *adev = file_inode(f)->i_private;
>> + ssize_t result = 0;
>> + int r;
>> +
>> + if (size & 0x3 || *pos & 0x3)
>> + return -EINVAL;
>> +
>> + if (*pos >= adev->mc.mc_vram_size)
>> + return -ENXIO;
>> +
>> + while (size) {
>> + unsigned long flags;
>> + uint32_t value;
>> +
>> + if (*pos >= adev->mc.mc_vram_size)
>> + return result;
>> +
>> + spin_lock_irqsave(&adev->mmio_idx_lock, flags);
>> + WREG32(mmMM_INDEX, ((uint32_t)*pos) | 0x80000000);
>> + WREG32(mmMM_INDEX_HI, *pos >> 31);
>> + r = get_user(value, (uint32_t *)buf);
>
> Don't call get_user() while holding a spin.
>
>> + if (r)
>> + return r;
>
> You forget to unlock the spin.
Yup, my bad. I'll fix that up.
Tom
More information about the amd-gfx
mailing list