PD#116501: fix dma share fd will be destroyed when android crashed
authorStark Li <stark.li@amlogic.com>
Tue, 22 Dec 2015 06:16:02 +0000 (14:16 +0800)
committerStark Li <stark.li@amlogic.com>
Tue, 22 Dec 2015 06:16:02 +0000 (14:16 +0800)
Change-Id: I58b7c4e7e09e06821ff8e2cfb7a4b558455bb65a

t83x/android/gralloc/src/alloc_device.cpp
t83x/android/gralloc/src/alloc_device_allocator_specific.h
t83x/android/gralloc/src/alloc_ion.cpp
t83x/android/gralloc/src/alloc_ump.cpp
t83x/android/gralloc/src/gralloc_priv.h

index 4543069da9debe97f73322c230394ce445e73ecf..1706cdf1e56bff82575a9c9cfc5a79069b90f6d8 100644 (file)
@@ -126,7 +126,8 @@ static int gralloc_alloc_framebuffer_locked(alloc_device_t* dev, size_t size, in
         * Perform allocator specific actions. If these fail we fall back to a regular buffer
         * which will be memcpy'ed to the main screen when fb_post is called.
         */
-       if (alloc_backend_alloc_framebuffer(private_t, hnd) == -1)
+       uint32_t index = (framebufferVaddr - (uintptr_t)m->framebuffer->base) / framebufferSize;
+       if (alloc_backend_alloc_framebuffer(private_t, hnd, index) == -1)
        {
                delete hnd;
                int newUsage = (usage & ~GRALLOC_USAGE_HW_FB) | GRALLOC_USAGE_HW_2D;
index d6bb850ec30516138dd4c32e9485a2ddabbddc81..ac6a43dff9aeb802b7b0c9eae214abc57ba93073 100755 (executable)
@@ -16,7 +16,7 @@
 
 int alloc_backend_alloc(alloc_device_t* dev, size_t size, int usage, buffer_handle_t* pHandle);
 
-int alloc_backend_alloc_framebuffer(struct private_module_t* m, struct private_handle_t* hnd);
+int alloc_backend_alloc_framebuffer(struct private_module_t* m, struct private_handle_t* hnd, uint32_t idx);
 
 void alloc_backend_alloc_free(struct private_handle_t const* hnd, struct private_module_t* m);
 
index 619584b7ff7b50a35bdccbe402e284ebb6870d6b..e1969ec9452b8b132e711744f207670e52cdcc19 100644 (file)
@@ -133,7 +133,7 @@ int alloc_backend_alloc(alloc_device_t* dev, size_t size, int usage, buffer_hand
        return -1;
 }
 
-int alloc_backend_alloc_framebuffer(private_module_t* m, private_handle_t* hnd)
+int alloc_backend_alloc_framebuffer(private_module_t* m, private_handle_t* hnd, uint32_t idx)
 {
        framebuffer_mapper_t* m_fb = NULL;
 
@@ -153,6 +153,8 @@ int alloc_backend_alloc_framebuffer(private_module_t* m, private_handle_t* hnd)
 
        struct fb_dmabuf_export fb_dma_buf;
        int res;
+
+       fb_dma_buf.buffer_idx = idx;
        res = ioctl( m_fb->framebuffer->fd, FBIOGET_DMABUF, &fb_dma_buf );
        if (res == 0)
        {
index eb014df5ab9afe898838c41447d1f23996c97d9d..8edf0f549d99096c293f3f6d8c3b1bd8f3f7cf16 100755 (executable)
@@ -171,7 +171,7 @@ int alloc_backend_alloc(alloc_device_t* dev, size_t size, int usage, buffer_hand
        }
 }
 
-int alloc_backend_alloc_framebuffer(private_module_t* m, private_handle_t* hnd)
+int alloc_backend_alloc_framebuffer(private_module_t* m, private_handle_t* hnd, uint32_t idx)
 {
        hnd->ump_id = m->framebuffer->ump_id;
        /* create a backing ump memory handle if the framebuffer is exposed as a secure ID */
index bb3382371199f722db00bac6495488a9f72d1590..874164b4fb0759546929debf1b657c20ae79f0c1 100644 (file)
@@ -71,6 +71,7 @@ typedef struct ion_handle *ion_user_handle_t;
 #if GRALLOC_ARM_DMA_BUF_MODULE
 struct fb_dmabuf_export 
 {
+       __u32 buffer_idx;
        __u32 fd;
        __u32 flags;
 };