diff options
author | Angela Stegmaier | 2016-12-09 16:14:09 -0600 |
---|---|---|
committer | Angela Stegmaier | 2017-01-17 14:46:27 -0600 |
commit | 5fd7da53b505e1bc80a0c9d116fe31e5cd177d74 (patch) | |
tree | 53fc0f5585beb0ad879797e59889ba3f31a8bbab | |
parent | c51f144b079836afb868bff44afe7308248a0217 (diff) | |
download | hardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.tar.gz hardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.tar.xz hardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.zip |
libdce[Android]: Add dce_ipc_recover API
In case of remote core recovery due to remote core crash, the rpmsg-dce
handle needs to be closed and re-opened since any handles that were
open when the crash happened are marked as stale in the driver.
This patch adds a new API that the user can call to close the rpmsg-dce
handle so that recovery can happen.
In case the user receives notification of a remote core crash, it can
call the dce_ipc_recover() API to make sure that the rpmsg-dce handle
that is opened during dce_buf_lock is closed so that a new one can
be opened the next time.
Change-Id: I8ebc19e308ffe7431b57c31cfecd469e171777f6
Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
-rw-r--r-- | libdce.h | 6 | ||||
-rw-r--r-- | libdce_android.c | 9 | ||||
-rw-r--r-- | memplugin_android.c | 6 |
3 files changed, 18 insertions, 3 deletions
@@ -132,6 +132,12 @@ int dce_ipc_init(int core); | |||
132 | */ | 132 | */ |
133 | void dce_ipc_deinit(int core, int tableIdx); | 133 | void dce_ipc_deinit(int core, int tableIdx); |
134 | 134 | ||
135 | /*===============================================================*/ | ||
136 | /** dce_ipc_recover : Recover the DCE IPC in case of | ||
137 | * remote core crash. | ||
138 | */ | ||
139 | void dce_ipc_recover(void); | ||
140 | |||
135 | /************************ Input/Output Buffer Lock/Unlock APIs ************************/ | 141 | /************************ Input/Output Buffer Lock/Unlock APIs ************************/ |
136 | /*=====================================================================================*/ | 142 | /*=====================================================================================*/ |
137 | /** dce_buf_lock : Pin or lock Tiler Buffers which would be used by the IVAHD codec | 143 | /** dce_buf_lock : Pin or lock Tiler Buffers which would be used by the IVAHD codec |
diff --git a/libdce_android.c b/libdce_android.c index de6a5c8..0c6065a 100644 --- a/libdce_android.c +++ b/libdce_android.c | |||
@@ -45,6 +45,7 @@ | |||
45 | extern MmRpc_Handle MmRpcHandle[]; | 45 | extern MmRpc_Handle MmRpcHandle[]; |
46 | extern pthread_mutex_t ipc_mutex; | 46 | extern pthread_mutex_t ipc_mutex; |
47 | int is_ipc_ready = 0; | 47 | int is_ipc_ready = 0; |
48 | static int dce_buf_count = 0; | ||
48 | 49 | ||
49 | int dce_buf_lock(int num, size_t *handle) | 50 | int dce_buf_lock(int num, size_t *handle) |
50 | { | 51 | { |
@@ -113,4 +114,10 @@ EXIT: | |||
113 | return (eError); | 114 | return (eError); |
114 | } | 115 | } |
115 | 116 | ||
116 | 117 | void dce_ipc_recover(void) | |
118 | { | ||
119 | if (is_ipc_ready) { | ||
120 | dce_ipc_deinit(IPU, -1); | ||
121 | is_ipc_ready = 0; | ||
122 | } | ||
123 | } | ||
diff --git a/memplugin_android.c b/memplugin_android.c index 22a5564..b140aa5 100644 --- a/memplugin_android.c +++ b/memplugin_android.c | |||
@@ -99,8 +99,10 @@ int memplugin_close() | |||
99 | /*Acquire permission to use IPC*/ | 99 | /*Acquire permission to use IPC*/ |
100 | pthread_mutex_lock(&ipc_mutex); | 100 | pthread_mutex_lock(&ipc_mutex); |
101 | 101 | ||
102 | dce_ipc_deinit(IPU, -1); | 102 | if (is_ipc_ready) { |
103 | is_ipc_ready = 0; | 103 | dce_ipc_deinit(IPU, -1); |
104 | is_ipc_ready = 0; | ||
105 | } | ||
104 | 106 | ||
105 | /*Relinquish IPC*/ | 107 | /*Relinquish IPC*/ |
106 | pthread_mutex_unlock(&ipc_mutex); | 108 | pthread_mutex_unlock(&ipc_mutex); |