summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2018-02-14 17:03:56 -0600
committerRob Herring <robh@kernel.org>2018-02-20 14:16:16 -0600
commit009634e493097afae95d190fc26cb04a1664648a (patch)
tree8e5468b77042927212373bcd45abcb458fc5e90a
parent86c62e49c81eb56200ec72936462a9a8629d7d1d (diff)
android: fix gralloc_handle_create() problems
There's a number of problems with gralloc_handle_create starting with it doesn't even compile. More importantly, it doesn't really create (i.e. allocate) a handle. It allocates a native_handle_t, copies it to a struct gralloc_handle_t on the stack and returns the struct (not a ptr). So the caller still has to allocate a struct gralloc_handle_t to hold the returned struct. Rework gralloc_handle_create() to allocate a new handle and return the pointer to the allocated handle. Callers should free the handle with native_handle_close() and native_handle_delete(). In the interest of making gralloc_handle_t opaque, return a native_handle_t ptr instead. Reviewed-by: Robert Foss <robert.foss@collabora.com> Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r--android/gralloc_handle.h34
1 files changed, 16 insertions, 18 deletions
diff --git a/android/gralloc_handle.h b/android/gralloc_handle.h
index 43255ba5..9cb5a5d7 100644
--- a/android/gralloc_handle.h
+++ b/android/gralloc_handle.h
@@ -84,28 +84,26 @@ static inline struct gralloc_handle_t *gralloc_handle(buffer_handle_t handle)
/**
* Create a buffer handle.
*/
-static struct gralloc_handle_t gralloc_handle_create(int32_t width,
+static inline native_handle_t *gralloc_handle_create(int32_t width,
int32_t height,
- int32_t format,
+ int32_t hal_format,
int32_t usage)
{
- struct alloc_handle_t handle = {
- .magic = GRALLOC_HANDLE_MAGIC,
- .version = GRALLOC_HANDLE_VERSION };
-
+ struct gralloc_handle_t *handle;
native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS,
- GRALLOC_HANDLE_NUM_INTS);
- handle.base = *nhandle;
- native_handle_delete(nhandle);
-
- handle.width = width;
- handle.height = height;
- handle.format = format;
- handle.usage = usage;
- handle.prime_fd = -1;
-
- handle->data_owner = getpid();
- handle->data = bo;
+ GRALLOC_HANDLE_NUM_INTS);
+
+ if (!nhandle)
+ return NULL;
+
+ handle = gralloc_handle(nhandle);
+ handle->magic = GRALLOC_HANDLE_MAGIC;
+ handle->version = GRALLOC_HANDLE_VERSION;
+ handle->width = width;
+ handle->height = height;
+ handle->format = hal_format;
+ handle->usage = usage;
+ handle->prime_fd = -1;
return handle;
}