From df7223424a969931cbf0f94c37032c3e40b5da71 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 15 Jul 2011 17:33:08 +0100 Subject: [PATCH] --- yaml --- r: 260057 b: refs/heads/master c: 7d7b7adf6bf934064c8fdc4031e75f1a20aaac92 h: refs/heads/master i: 260055: 80b867cb15106f37a6024c79c4bf01982a2f0931 v: v3 --- [refs] | 2 +- trunk/drivers/staging/gma500/gem.c | 24 ++++++++++++++++++++++++ trunk/drivers/staging/gma500/psb_drm.h | 3 ++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index f327de712d71..0f9e1d5b29ca 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7dfe43c52d2cd595964c38281499c5361a0a8e85 +refs/heads/master: 7d7b7adf6bf934064c8fdc4031e75f1a20aaac92 diff --git a/trunk/drivers/staging/gma500/gem.c b/trunk/drivers/staging/gma500/gem.c index d7b74b64844f..65fdd6b8ab16 100644 --- a/trunk/drivers/staging/gma500/gem.c +++ b/trunk/drivers/staging/gma500/gem.c @@ -251,6 +251,21 @@ int psb_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf) } } +static int psb_gem_create_stolen(struct drm_file *file, struct drm_device *dev, + int size, u32 *handle) +{ + struct gtt_range *gtt = psb_gtt_alloc_range(dev, size, "gem", 1); + if (gtt == NULL) + return -ENOMEM; + if (drm_gem_private_object_init(dev, >t->gem, size) != 0) + goto free_gtt; + if (drm_gem_handle_create(file, >t->gem, handle) == 0) + return 0; +free_gtt: + psb_gtt_free_range(dev, gtt); + return -ENOMEM; +} + /* * GEM interfaces for our specific client */ @@ -258,6 +273,15 @@ int psb_gem_create_ioctl(struct drm_device *dev, void *data, struct drm_file *file) { struct drm_psb_gem_create *args = data; + int ret; + if (args->flags & PSB_GEM_CREATE_STOLEN) { + ret = psb_gem_create_stolen(file, dev, args->size, + &args->handle); + if (ret == 0) + return 0; + /* Fall throguh */ + args->flags &= ~PSB_GEM_CREATE_STOLEN; + } return psb_gem_create(file, dev, args->size, &args->handle); } diff --git a/trunk/drivers/staging/gma500/psb_drm.h b/trunk/drivers/staging/gma500/psb_drm.h index 70115a9f6e68..0da846835688 100644 --- a/trunk/drivers/staging/gma500/psb_drm.h +++ b/trunk/drivers/staging/gma500/psb_drm.h @@ -189,7 +189,8 @@ struct psb_drm_dpu_rect { struct drm_psb_gem_create { __u64 size; __u32 handle; - __u32 pad; + __u32 flags; +#define PSB_GEM_CREATE_STOLEN 1 /* Stolen memory can be used */ }; #define PSB_2D_OP_BUFLEN 16