Skip to content

Instantly share code, notes, and snippets.

@tiagovignatti
Created May 20, 2015 20:57
Show Gist options
  • Save tiagovignatti/044eb18fa22e88917262 to your computer and use it in GitHub Desktop.
Save tiagovignatti/044eb18fa22e88917262 to your computer and use it in GitHub Desktop.
32a33
> #include "drmP.h"
47c48,57
< drm_gem_put_pages(&obj->base, obj->pages, false, false);
---
> int num_pages = obj->base.size / PAGE_SIZE;
> int i;
>
> for (i = 0; i < num_pages; i++) {
> if (obj->pages[i] == NULL)
> break;
> page_cache_release(obj->pages[i]);
> }
>
> drm_free_large(obj->pages);
74c84,86
< struct page **pages;
---
> struct address_space *mapping;
> gfp_t gfpmask = GFP_KERNEL;
> int num_pages, i, ret = 0;
79,81c91,107
< pages = drm_gem_get_pages(&obj->base);
< if (IS_ERR(pages)) {
< return PTR_ERR(pages);
---
> num_pages = obj->base.size / PAGE_SIZE;
> obj->pages = drm_malloc_ab(num_pages, sizeof(struct page *));
> if (obj->pages == NULL)
> return -ENOMEM;
>
> mapping = obj->base.filp->f_path.dentry->d_inode->i_mapping;
> gfpmask |= mapping_gfp_mask(mapping);
>
> for (i = 0; i < num_pages; i++) {
> struct page *page;
> obj->pages[i] = NULL;
> page = shmem_read_mapping_page_gfp(mapping, i, gfpmask);
> if (IS_ERR(page)) {
> ret = PTR_ERR(page);
> goto err_out;
> }
> obj->pages[i] = page;
84c110
< obj->pages = pages;
---
> return ret;
86c112,114
< return 0;
---
> err_out:
> vgem_gem_put_pages(obj);
> return ret;
177d204
< uint64_t pitch = args->width * DIV_ROUND_UP(args->bpp, 8);
179c206
< size = args->height * pitch;
---
> size = args->height * args->width * DIV_ROUND_UP(args->bpp, 8);
191c218
< args->pitch = pitch;
---
> args->pitch = args->width;
291a319,320
> DRM_IOCTL_DEF_DRV(VGEM_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl,
> DRM_CONTROL_ALLOW|DRM_UNLOCKED|DRM_RENDER_ALLOW),
305c334,335
< .driver_features = DRIVER_GEM | DRIVER_PRIME,
---
> .driver_features =
> DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
328c358,380
< struct drm_device *vgem_device;
---
> static int vgem_platform_probe(struct platform_device *pdev)
> {
> vgem_driver.num_ioctls = ARRAY_SIZE(vgem_ioctls);
>
> return drm_platform_init(&vgem_driver, pdev);
> }
>
> static int vgem_platform_remove(struct platform_device *pdev)
> {
> drm_put_dev(platform_get_drvdata(pdev));
> return 0;
> }
>
> static struct platform_driver vgem_platform_driver = {
> .probe = vgem_platform_probe,
> .remove = vgem_platform_remove,
> .driver = {
> .owner = THIS_MODULE,
> .name = DRIVER_NAME,
> },
> };
>
> static struct platform_device *vgem_device;
334c386,390
< vgem_device = drm_dev_alloc(&vgem_driver, NULL);
---
> ret = platform_driver_register(&vgem_platform_driver);
> if (ret)
> goto out;
>
> vgem_device = platform_device_alloc("vgem", -1);
337c393
< goto out;
---
> goto unregister_out;
340c396,397
< ret = drm_dev_register(vgem_device, 0);
---
> vgem_device->dev.coherent_dma_mask = ~0ULL;
> vgem_device->dev.dma_mask = &vgem_device->dev.coherent_dma_mask;
341a399
> ret = platform_device_add(vgem_device);
343c401
< goto out_unref;
---
> goto put_out;
347,348c405,408
< out_unref:
< drm_dev_unref(vgem_device);
---
> put_out:
> platform_device_put(vgem_device);
> unregister_out:
> platform_driver_unregister(&vgem_platform_driver);
355,356c415,416
< drm_dev_unregister(vgem_device);
< drm_dev_unref(vgem_device);
---
> platform_device_unregister(vgem_device);
> platform_driver_unregister(&vgem_platform_driver);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment