Hi Daniel,

> +/*
> + * This just sets wc mode for shmem helpers. vgem doesn't have any begin/end 
> cpu
> + * access ioctls, there must use coherent memory or dma-buf sharing just wont
> + * work.
> + */
> +static struct drm_gem_object *vgem_gem_create_object(struct drm_device *dev, 
> size_t size)
>  {
> -     struct drm_vgem_gem_object *obj;
> -     int npages;
> +     struct drm_gem_shmem_object *obj;
>  
> -     obj = __vgem_gem_create(dev, attach->dmabuf->size);
> -     if (IS_ERR(obj))
> -             return ERR_CAST(obj);
> -
> -     npages = PAGE_ALIGN(attach->dmabuf->size) / PAGE_SIZE;
> +     obj = kzalloc(sizeof(*obj), GFP_KERNEL);
> +     if (!obj)
> +             return NULL;
>  
> -     obj->table = sg;
> -     obj->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
> -     if (!obj->pages) {
> -             __vgem_gem_destroy(obj);
> -             return ERR_PTR(-ENOMEM);
> -     }
> +     obj->base.funcs = &drm_gem_shmem_funcs;
> +     obj->map_wc = true;
>  
> -     obj->pages_pin_count++; /* perma-pinned */
> -     drm_prime_sg_to_page_array(obj->table, obj->pages, npages);
>       return &obj->base;

here you are allocating a bigger object than what you are
returning, in size. How does it get freed?

Andi
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to