Quoting Matthew Auld (2019-06-27 21:56:24) > +int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma) > +{ > + struct drm_vma_offset_node *node; > + struct drm_file *priv = filp->private_data; > + struct drm_device *dev = priv->minor->dev; > + struct i915_mmap_offset *mmo; > + struct drm_gem_object *obj = NULL; > + > + if (drm_dev_is_unplugged(dev)) > + return -ENODEV; > + > + drm_vma_offset_lock_lookup(dev->vma_offset_manager); > + node = drm_vma_offset_exact_lookup_locked(dev->vma_offset_manager, > + vma->vm_pgoff, > + vma_pages(vma)); > + if (likely(node)) { > + mmo = container_of(node, struct i915_mmap_offset, > + vma_node); > + > + /* Take a ref for our mmap_offset and gem objects. The reference is cleaned /* * Take > + * up when the vma is closed. > + * > + * Skip 0-refcnted objects as it is in the process of being destroyed > + * and will be invalid when the vma manager lock is released. > + */ > + if (kref_get_unless_zero(&mmo->ref)) { > + obj = &mmo->obj->base; > + if (!kref_get_unless_zero(&obj->refcount)) > + obj = NULL; > + } > + } > + drm_vma_offset_unlock_lookup(dev->vma_offset_manager); > + > + if (!obj) > + return -EINVAL; Please check the error paths for reference leaks. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx