[Intel-gfx] [RFC PATCH 1/2] drm/i915: Add a function to mmap framebuffer obj
Das, Nirmoy
nirmoy.das at linux.intel.com
Tue Mar 14 09:18:15 UTC 2023
Hi Andi,
On 3/13/2023 7:37 PM, Andi Shyti wrote:
> Hi Nirmoy,
>
> [...]
>
>> +int i915_gem_fb_mmap(struct drm_i915_gem_object *obj, struct vm_area_struct *vma)
>> +{
>> + struct drm_i915_private *i915 = to_i915(obj->base.dev);
>> + struct drm_device *dev = &i915->drm;
>> + struct i915_mmap_offset *mmo = NULL;
>> + enum i915_mmap_type mmap_type;
>> + struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
>> +
>> + if (drm_dev_is_unplugged(dev))
>> + return -ENODEV;
>> +
>> + mmap_type = i915_ggtt_has_aperture(ggtt) ? I915_MMAP_TYPE_GTT : I915_MMAP_TYPE_WC;
>> + mmo = mmap_offset_attach(obj, mmap_type, NULL);
>> + if (!mmo)
>> + return -ENODEV;
>> +
>> + obj = i915_gem_object_get(mmo->obj);
> Where do we decrease the refcount?
This actually needs some comment even for the existing code.
We install vm_ops for the mmap which comes with vm_ops_cpu.open() and
vm_ops_cpu.close()
where we do i915_gem_object_get() on open and i915_gem_object_put() on
close.
static const struct vm_operations_struct vm_ops_cpu = {
.fault = vm_fault_cpu,
.access = vm_access,
.open = vm_open,
.close = vm_close,
};
But when we install the vm_ops we are too late for vm_ops_cpu.open() so
to account for the missing we are doing a i915_gem_object_get() in mmap
call.
Regards,
Nirmoy
>
> Andi
>
>> + return i915_gem_object_mmap(obj, mmo, vma);
>> +}
>> +
More information about the Intel-gfx
mailing list