From: Russell King <rmk+kernel@xxxxxxxxxxxxxxxx> Move the prime import code out into etnaviv_gem_prime.c, which keeps all this functionality together. Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxxx> --- drivers/staging/etnaviv/etnaviv_gem.c | 55 ----------------------------- drivers/staging/etnaviv/etnaviv_gem_prime.c | 55 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/drivers/staging/etnaviv/etnaviv_gem.c b/drivers/staging/etnaviv/etnaviv_gem.c index 185cd1702b2e..1cd5c6bc2532 100644 --- a/drivers/staging/etnaviv/etnaviv_gem.c +++ b/drivers/staging/etnaviv/etnaviv_gem.c @@ -17,7 +17,6 @@ #include <linux/spinlock.h> #include <linux/shmem_fs.h> -#include <linux/dma-buf.h> #include "etnaviv_drv.h" #include "etnaviv_gem.h" @@ -702,57 +701,3 @@ int etnaviv_gem_new_private(struct drm_device *dev, size_t size, uint32_t flags, return 0; } - -static void etnaviv_gem_prime_release(struct etnaviv_gem_object *etnaviv_obj) -{ - if (etnaviv_obj->vaddr) - dma_buf_vunmap(etnaviv_obj->base.import_attach->dmabuf, - etnaviv_obj->vaddr); - - /* Don't drop the pages for imported dmabuf, as they are not - * ours, just free the array we allocated: - */ - if (etnaviv_obj->pages) - drm_free_large(etnaviv_obj->pages); - - drm_prime_gem_destroy(&etnaviv_obj->base, etnaviv_obj->sgt); -} - -static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = { - .release = etnaviv_gem_prime_release, -}; - -struct drm_gem_object *msm_gem_import(struct drm_device *dev, - uint32_t size, struct sg_table *sgt) -{ - struct etnaviv_gem_object *etnaviv_obj; - int ret, npages; - - size = PAGE_ALIGN(size); - - ret = etnaviv_gem_new_private(dev, size, ETNA_BO_WC, &etnaviv_obj); - if (ret < 0) - return ERR_PTR(ret); - - npages = size / PAGE_SIZE; - - etnaviv_obj->ops = &etnaviv_gem_prime_ops; - etnaviv_obj->sgt = sgt; - etnaviv_obj->pages = drm_malloc_ab(npages, sizeof(struct page *)); - if (!etnaviv_obj->pages) { - ret = -ENOMEM; - goto fail; - } - - ret = drm_prime_sg_to_page_addr_arrays(sgt, etnaviv_obj->pages, - NULL, npages); - if (ret) - goto fail; - - return &etnaviv_obj->base; - -fail: - drm_gem_object_unreference_unlocked(&etnaviv_obj->base); - - return ERR_PTR(ret); -} diff --git a/drivers/staging/etnaviv/etnaviv_gem_prime.c b/drivers/staging/etnaviv/etnaviv_gem_prime.c index 9c152b5640bc..4cf9e043c604 100644 --- a/drivers/staging/etnaviv/etnaviv_gem_prime.c +++ b/drivers/staging/etnaviv/etnaviv_gem_prime.c @@ -15,6 +15,7 @@ * this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <linux/dma-buf.h> #include "etnaviv_drv.h" #include "etnaviv_gem.h" @@ -56,3 +57,57 @@ void msm_gem_prime_unpin(struct drm_gem_object *obj) if (!obj->import_attach) msm_gem_put_pages(obj); } + +static void etnaviv_gem_prime_release(struct etnaviv_gem_object *etnaviv_obj) +{ + if (etnaviv_obj->vaddr) + dma_buf_vunmap(etnaviv_obj->base.import_attach->dmabuf, + etnaviv_obj->vaddr); + + /* Don't drop the pages for imported dmabuf, as they are not + * ours, just free the array we allocated: + */ + if (etnaviv_obj->pages) + drm_free_large(etnaviv_obj->pages); + + drm_prime_gem_destroy(&etnaviv_obj->base, etnaviv_obj->sgt); +} + +static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = { + .release = etnaviv_gem_prime_release, +}; + +struct drm_gem_object *msm_gem_import(struct drm_device *dev, + uint32_t size, struct sg_table *sgt) +{ + struct etnaviv_gem_object *etnaviv_obj; + int ret, npages; + + size = PAGE_ALIGN(size); + + ret = etnaviv_gem_new_private(dev, size, ETNA_BO_WC, &etnaviv_obj); + if (ret < 0) + return ERR_PTR(ret); + + npages = size / PAGE_SIZE; + + etnaviv_obj->ops = &etnaviv_gem_prime_ops; + etnaviv_obj->sgt = sgt; + etnaviv_obj->pages = drm_malloc_ab(npages, sizeof(struct page *)); + if (!etnaviv_obj->pages) { + ret = -ENOMEM; + goto fail; + } + + ret = drm_prime_sg_to_page_addr_arrays(sgt, etnaviv_obj->pages, + NULL, npages); + if (ret) + goto fail; + + return &etnaviv_obj->base; + +fail: + drm_gem_object_unreference_unlocked(&etnaviv_obj->base); + + return ERR_PTR(ret); +} -- 2.1.4 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel