diff options
author | Fernando Guzman Lugo <fernando.lugo@ti.com> | 2010-12-07 20:30:18 -0500 |
---|---|---|
committer | Paolo Pisati <paolo.pisati@canonical.com> | 2012-08-17 04:19:09 -0400 |
commit | 26a75334d98321f1ebfeeabe5298ff6d6ef4ff1a (patch) | |
tree | 8526d2a887e9333ed7244978d268984f679949fa | |
parent | 17328e2e9ae044a8701c858b794a25c6b11df480 (diff) |
SYSLINK: ipc - ipc recovery related patches
SYSLINK: ipc - move check for in recovery state per ipc submodule
With this approach, now each submodule can allow which ioctl
can go through when the IPC is in recovery state. It is done
by exporting a new function in ipc.
Change-Id: I3402f2f83cd3dddbdd6a0d8caf94bf061a5b981c
Signed-off-by: Fernando Guzman Lugo <fernando.lugo@ti.com>
SYSLINK: ipc - allow some ioctl go through in recovery state
This api can go through even in recovery state:
messageq_unblock
messageq_delete
messageq_close
messageq_destroy
Change-Id: If738b58c21f1d18c3ef1ba019bb598290096d32b
Signed-off-by: Fernando Guzman Lugo <fernando.lugo@ti.com>
SYSLINK: IPC- provide ipc start and stop notification
Enable the notification of IPC start and stop, which devh can
use to register/unregister for SYS-ERRORS.
This also includes the changes to export ipc_recovery_schedule
function. This function should be called by error handlers such
as sys error and watchdog error.
Change-Id: I436c37b9c4b74d00c771e88c480ea0e96a0268fd
Signed-off-by: Hari Kanigeri <h-kanigeri2@ti.com>
Signed-off-by: Wajahat Khan <w-khan@ti.com>
syslink: ipc: fix compilation warnings
Fixing the following compilation warning when
including ipc.h and notify_ducatidriver.h in another
module:
warning: function declaration isn't a prototype
Change-Id: Idbb0b5289a3e8406fbe0b86e70d63d55d7e3060f
Reported-by: Ricardo Neri <ricardo.neri@ti.com>
Signed-off-by: Miguel Vadillo <vadillo@ti.com>
-rw-r--r-- | arch/arm/plat-omap/include/syslink/ipc.h | 14 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/syslink/notify_ducatidriver.h | 2 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/ipc_drv.c | 16 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c | 10 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c | 8 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/platform.c | 4 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c | 7 | ||||
-rw-r--r-- | drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c | 6 | ||||
-rw-r--r-- | drivers/dsp/syslink/omap_notify/drv_notify.c | 7 |
14 files changed, 97 insertions, 12 deletions
diff --git a/arch/arm/plat-omap/include/syslink/ipc.h b/arch/arm/plat-omap/include/syslink/ipc.h index bead3bf54e7..ceb239219b7 100644 --- a/arch/arm/plat-omap/include/syslink/ipc.h +++ b/arch/arm/plat-omap/include/syslink/ipc.h | |||
@@ -120,7 +120,11 @@ struct ipc_params { | |||
120 | }; | 120 | }; |
121 | 121 | ||
122 | /* IPC events. */ | 122 | /* IPC events. */ |
123 | #define IPC_CLOSE 0 | 123 | enum { |
124 | IPC_CLOSE = 0, | ||
125 | IPC_START = 1, | ||
126 | IPC_STOP = 2, | ||
127 | }; | ||
124 | 128 | ||
125 | /* ============================================================================= | 129 | /* ============================================================================= |
126 | * APIs | 130 | * APIs |
@@ -174,4 +178,12 @@ int ipc_register_notifier(struct notifier_block *nb); | |||
174 | /* Un-register for IPC events. */ | 178 | /* Un-register for IPC events. */ |
175 | int ipc_unregister_notifier(struct notifier_block *nb); | 179 | int ipc_unregister_notifier(struct notifier_block *nb); |
176 | 180 | ||
181 | /* check if ipc is in recovery state */ | ||
182 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
183 | bool ipc_recovering(void); | ||
184 | #endif | ||
185 | |||
186 | /* Indicate to schedule the recovery mechanism */ | ||
187 | void ipc_recover_schedule(void); | ||
188 | |||
177 | #endif /* ifndef _IPC_H_ */ | 189 | #endif /* ifndef _IPC_H_ */ |
diff --git a/arch/arm/plat-omap/include/syslink/notify_ducatidriver.h b/arch/arm/plat-omap/include/syslink/notify_ducatidriver.h index aa805ffbb3c..81e59e6fd72 100644 --- a/arch/arm/plat-omap/include/syslink/notify_ducatidriver.h +++ b/arch/arm/plat-omap/include/syslink/notify_ducatidriver.h | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | #define VOLATILE volatile | 29 | #define VOLATILE volatile |
30 | 30 | ||
31 | extern u32 get_ducati_virt_mem(); | 31 | extern u32 get_ducati_virt_mem(void); |
32 | extern void unmap_ducati_virt_mem(u32 shm_virt_addr); | 32 | extern void unmap_ducati_virt_mem(u32 shm_virt_addr); |
33 | 33 | ||
34 | 34 | ||
diff --git a/drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c b/drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c index 6a56606079b..68071d92530 100644 --- a/drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | 25 | ||
26 | #include <ipc.h> | ||
26 | #include <gatemp.h> | 27 | #include <gatemp.h> |
27 | #include <gatemp_ioctl.h> | 28 | #include <gatemp_ioctl.h> |
28 | #include <sharedregion.h> | 29 | #include <sharedregion.h> |
@@ -315,6 +316,12 @@ int gatemp_ioctl(struct inode *inode, struct file *filp, | |||
315 | 316 | ||
316 | 317 | ||
317 | if (user == true) { | 318 | if (user == true) { |
319 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
320 | if (ipc_recovering()) { | ||
321 | status = -EIO; | ||
322 | goto exit; | ||
323 | } | ||
324 | #endif | ||
318 | if (_IOC_DIR(cmd) & _IOC_READ) | 325 | if (_IOC_DIR(cmd) & _IOC_READ) |
319 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 326 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
320 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 327 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c b/drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c index 1aed92d9be2..dcd8bc01cec 100644 --- a/drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | 25 | ||
26 | #include <ipc.h> | ||
26 | #include <sharedregion.h> | 27 | #include <sharedregion.h> |
27 | #include <heap.h> | 28 | #include <heap.h> |
28 | #include <heapbufmp.h> | 29 | #include <heapbufmp.h> |
@@ -416,6 +417,12 @@ int heapbufmp_ioctl(struct inode *pinode, struct file *filp, | |||
416 | (struct ipc_process_context *)filp->private_data; | 417 | (struct ipc_process_context *)filp->private_data; |
417 | 418 | ||
418 | if (user == true) { | 419 | if (user == true) { |
420 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
421 | if (ipc_recovering()) { | ||
422 | status = -EIO; | ||
423 | goto exit; | ||
424 | } | ||
425 | #endif | ||
419 | if (_IOC_DIR(cmd) & _IOC_READ) | 426 | if (_IOC_DIR(cmd) & _IOC_READ) |
420 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 427 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
421 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 428 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c b/drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c index a2235fa02cb..11d73696500 100644 --- a/drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | 25 | ||
26 | #include <ipc.h> | ||
26 | #include <heap.h> | 27 | #include <heap.h> |
27 | #include <heapmemmp_ioctl.h> | 28 | #include <heapmemmp_ioctl.h> |
28 | #include <sharedregion.h> | 29 | #include <sharedregion.h> |
@@ -428,6 +429,12 @@ int heapmemmp_ioctl(struct inode *pinode, struct file *filp, | |||
428 | (struct ipc_process_context *)filp->private_data; | 429 | (struct ipc_process_context *)filp->private_data; |
429 | 430 | ||
430 | if (user == true) { | 431 | if (user == true) { |
432 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
433 | if (ipc_recovering()) { | ||
434 | status = -EIO; | ||
435 | goto exit; | ||
436 | } | ||
437 | #endif | ||
431 | if (_IOC_DIR(cmd) & _IOC_READ) | 438 | if (_IOC_DIR(cmd) & _IOC_READ) |
432 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 439 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
433 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 440 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/ipc_drv.c b/drivers/dsp/syslink/multicore_ipc/ipc_drv.c index 8cf66d27661..f7b0e8c687c 100644 --- a/drivers/dsp/syslink/multicore_ipc/ipc_drv.c +++ b/drivers/dsp/syslink/multicore_ipc/ipc_drv.c | |||
@@ -106,12 +106,13 @@ static void ipc_recover(struct work_struct *work) | |||
106 | complete_all(&ipc_open_comp); | 106 | complete_all(&ipc_open_comp); |
107 | } | 107 | } |
108 | 108 | ||
109 | static void ipc_recover_schedule(void) | 109 | void ipc_recover_schedule(void) |
110 | { | 110 | { |
111 | INIT_COMPLETION(ipc_open_comp); | 111 | INIT_COMPLETION(ipc_open_comp); |
112 | recover = true; | 112 | recover = true; |
113 | queue_work(ipc_rec_queue, &ipc_recovery_work); | 113 | queue_work(ipc_rec_queue, &ipc_recovery_work); |
114 | } | 114 | } |
115 | EXPORT_SYMBOL_GPL(ipc_recover_schedule); | ||
115 | 116 | ||
116 | static int ipc_ducati_iommu_notifier_call(struct notifier_block *nb, | 117 | static int ipc_ducati_iommu_notifier_call(struct notifier_block *nb, |
117 | unsigned long val, void *v) | 118 | unsigned long val, void *v) |
@@ -150,6 +151,11 @@ static int ipc_sysm3_rproc_notifier_call(struct notifier_block *nb, | |||
150 | return 0; | 151 | return 0; |
151 | } | 152 | } |
152 | } | 153 | } |
154 | |||
155 | bool ipc_recovering() | ||
156 | { | ||
157 | return recover; | ||
158 | } | ||
153 | #endif | 159 | #endif |
154 | 160 | ||
155 | /* | 161 | /* |
@@ -238,14 +244,6 @@ static int ipc_ioctl(struct inode *ip, struct file *filp, u32 cmd, ulong arg) | |||
238 | s32 retval = 0; | 244 | s32 retval = 0; |
239 | void __user *argp = (void __user *)arg; | 245 | void __user *argp = (void __user *)arg; |
240 | 246 | ||
241 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
242 | if (recover) { | ||
243 | if (cmd != CMD_NOTIFY_THREADDETACH) { | ||
244 | retval = -EIO; | ||
245 | goto exit; | ||
246 | } | ||
247 | } | ||
248 | #endif | ||
249 | /* Verify the memory and ensure that it is not is kernel | 247 | /* Verify the memory and ensure that it is not is kernel |
250 | address space | 248 | address space |
251 | */ | 249 | */ |
diff --git a/drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c b/drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c index c4b68455d94..d3d266987af 100644 --- a/drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
28 | 28 | ||
29 | /* Module Headers */ | 29 | /* Module Headers */ |
30 | #include <ipc.h> | ||
30 | #include <listmp.h> | 31 | #include <listmp.h> |
31 | #include <_listmp.h> | 32 | #include <_listmp.h> |
32 | #include <listmp_ioctl.h> | 33 | #include <listmp_ioctl.h> |
@@ -500,6 +501,12 @@ int listmp_ioctl(struct inode *inode, struct file *filp, | |||
500 | (struct ipc_process_context *)filp->private_data; | 501 | (struct ipc_process_context *)filp->private_data; |
501 | 502 | ||
502 | if (user == true) { | 503 | if (user == true) { |
504 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
505 | if (ipc_recovering()) { | ||
506 | status = -EIO; | ||
507 | goto exit; | ||
508 | } | ||
509 | #endif | ||
503 | if (_IOC_DIR(cmd) & _IOC_READ) | 510 | if (_IOC_DIR(cmd) & _IOC_READ) |
504 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 511 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
505 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 512 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c b/drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c index 0d3195f06f5..d9cead76533 100644 --- a/drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
28 | 28 | ||
29 | /* Module Headers */ | 29 | /* Module Headers */ |
30 | #include <ipc.h> | ||
30 | #include <messageq.h> | 31 | #include <messageq.h> |
31 | #include <messageq_ioctl.h> | 32 | #include <messageq_ioctl.h> |
32 | #include <sharedregion.h> | 33 | #include <sharedregion.h> |
@@ -539,6 +540,15 @@ int messageq_ioctl(struct inode *inode, struct file *filp, | |||
539 | (struct ipc_process_context *)filp->private_data; | 540 | (struct ipc_process_context *)filp->private_data; |
540 | 541 | ||
541 | if (user == true) { | 542 | if (user == true) { |
543 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
544 | if (ipc_recovering() && cmd != CMD_MESSAGEQ_UNBLOCK | ||
545 | && cmd != CMD_MESSAGEQ_DELETE | ||
546 | && cmd != CMD_MESSAGEQ_CLOSE | ||
547 | && cmd != CMD_MESSAGEQ_DESTROY) { | ||
548 | status = -EIO; | ||
549 | goto exit; | ||
550 | } | ||
551 | #endif | ||
542 | if (_IOC_DIR(cmd) & _IOC_READ) | 552 | if (_IOC_DIR(cmd) & _IOC_READ) |
543 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 553 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
544 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 554 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c b/drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c index c36521ede49..79f6ed77b7d 100644 --- a/drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <linux/fs.h> | 20 | #include <linux/fs.h> |
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <ipc.h> | ||
22 | #include <multiproc.h> | 23 | #include <multiproc.h> |
23 | #include <multiproc_ioctl.h> | 24 | #include <multiproc_ioctl.h> |
24 | 25 | ||
@@ -142,6 +143,12 @@ int multiproc_ioctl(struct inode *inode, struct file *filp, | |||
142 | 143 | ||
143 | 144 | ||
144 | if (user == true) { | 145 | if (user == true) { |
146 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
147 | if (ipc_recovering()) { | ||
148 | status = -EIO; | ||
149 | goto exit; | ||
150 | } | ||
151 | #endif | ||
145 | if (_IOC_DIR(cmd) & _IOC_READ) | 152 | if (_IOC_DIR(cmd) & _IOC_READ) |
146 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 153 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
147 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 154 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c b/drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c index da3ac2a0c4c..2eaec1308e4 100644 --- a/drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c | |||
@@ -20,6 +20,8 @@ | |||
20 | #include <linux/fs.h> | 20 | #include <linux/fs.h> |
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
23 | |||
24 | #include <ipc.h> | ||
23 | #include <nameserver.h> | 25 | #include <nameserver.h> |
24 | #include <nameserver_ioctl.h> | 26 | #include <nameserver_ioctl.h> |
25 | 27 | ||
@@ -545,6 +547,12 @@ int nameserver_ioctl(struct inode *inode, struct file *filp, | |||
545 | 547 | ||
546 | 548 | ||
547 | if (user == true) { | 549 | if (user == true) { |
550 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
551 | if (ipc_recovering()) { | ||
552 | status = -EIO; | ||
553 | goto exit; | ||
554 | } | ||
555 | #endif | ||
548 | if (_IOC_DIR(cmd) & _IOC_READ) | 556 | if (_IOC_DIR(cmd) & _IOC_READ) |
549 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 557 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
550 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 558 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/platform.c b/drivers/dsp/syslink/multicore_ipc/platform.c index d71c3544dea..5ae0127faa1 100644 --- a/drivers/dsp/syslink/multicore_ipc/platform.c +++ b/drivers/dsp/syslink/multicore_ipc/platform.c | |||
@@ -1731,6 +1731,8 @@ int platform_start_callback(u16 proc_id, void *arg) | |||
1731 | pr_err("platform_load_callback failed, status [0x%x]\n", | 1731 | pr_err("platform_load_callback failed, status [0x%x]\n", |
1732 | status); | 1732 | status); |
1733 | 1733 | ||
1734 | ipc_notify_event(IPC_START, &proc_id); | ||
1735 | |||
1734 | return status; | 1736 | return status; |
1735 | } | 1737 | } |
1736 | EXPORT_SYMBOL(platform_start_callback); | 1738 | EXPORT_SYMBOL(platform_start_callback); |
@@ -1788,6 +1790,8 @@ int platform_stop_callback(u16 proc_id, void *arg) | |||
1788 | } | 1790 | } |
1789 | } | 1791 | } |
1790 | 1792 | ||
1793 | ipc_notify_event(IPC_STOP, &proc_id); | ||
1794 | |||
1791 | ipc_detach(proc_id); | 1795 | ipc_detach(proc_id); |
1792 | 1796 | ||
1793 | ipc_stop(); | 1797 | ipc_stop(); |
diff --git a/drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c b/drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c index 87d3cef4ac7..53d209a256b 100644 --- a/drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | 26 | ||
27 | #include <ipc.h> | ||
27 | #include <multiproc.h> | 28 | #include <multiproc.h> |
28 | #include <sharedregion.h> | 29 | #include <sharedregion.h> |
29 | #include <sharedregion_ioctl.h> | 30 | #include <sharedregion_ioctl.h> |
@@ -435,6 +436,12 @@ int sharedregion_ioctl(struct inode *inode, struct file *filp, | |||
435 | (struct ipc_process_context *)filp->private_data; | 436 | (struct ipc_process_context *)filp->private_data; |
436 | 437 | ||
437 | if (user == true) { | 438 | if (user == true) { |
439 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
440 | if (ipc_recovering()) { | ||
441 | status = -EIO; | ||
442 | goto exit; | ||
443 | } | ||
444 | #endif | ||
438 | if (_IOC_DIR(cmd) & _IOC_READ) | 445 | if (_IOC_DIR(cmd) & _IOC_READ) |
439 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 446 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
440 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 447 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c b/drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c index 2653ee37757..4ee64a19b70 100644 --- a/drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c +++ b/drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c | |||
@@ -197,6 +197,12 @@ int sysipc_ioctl(struct inode *inode, struct file *filp, | |||
197 | (struct ipc_process_context *)filp->private_data; | 197 | (struct ipc_process_context *)filp->private_data; |
198 | 198 | ||
199 | if (user == true) { | 199 | if (user == true) { |
200 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
201 | if (ipc_recovering()) { | ||
202 | status = -EIO; | ||
203 | goto exit; | ||
204 | } | ||
205 | #endif | ||
200 | if (_IOC_DIR(cmd) & _IOC_READ) | 206 | if (_IOC_DIR(cmd) & _IOC_READ) |
201 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); | 207 | status = !access_ok(VERIFY_WRITE, uarg, _IOC_SIZE(cmd)); |
202 | else if (_IOC_DIR(cmd) & _IOC_WRITE) | 208 | else if (_IOC_DIR(cmd) & _IOC_WRITE) |
diff --git a/drivers/dsp/syslink/omap_notify/drv_notify.c b/drivers/dsp/syslink/omap_notify/drv_notify.c index efa413f48ec..aafe34667e7 100644 --- a/drivers/dsp/syslink/omap_notify/drv_notify.c +++ b/drivers/dsp/syslink/omap_notify/drv_notify.c | |||
@@ -28,9 +28,9 @@ | |||
28 | #include <linux/types.h> | 28 | #include <linux/types.h> |
29 | #include <linux/cdev.h> | 29 | #include <linux/cdev.h> |
30 | 30 | ||
31 | |||
32 | #include <syslink/platform_mem.h> | 31 | #include <syslink/platform_mem.h> |
33 | #include <syslink/ipc_ioctl.h> | 32 | #include <syslink/ipc_ioctl.h> |
33 | #include <syslink/ipc.h> | ||
34 | #include <syslink/drv_notify.h> | 34 | #include <syslink/drv_notify.h> |
35 | #include <syslink/notify_driver.h> | 35 | #include <syslink/notify_driver.h> |
36 | #include <syslink/notify.h> | 36 | #include <syslink/notify.h> |
@@ -239,6 +239,11 @@ int notify_drv_ioctl(struct inode *inode, struct file *filp, u32 cmd, | |||
239 | struct ipc_process_context *pr_ctxt = | 239 | struct ipc_process_context *pr_ctxt = |
240 | (struct ipc_process_context *)filp->private_data; | 240 | (struct ipc_process_context *)filp->private_data; |
241 | 241 | ||
242 | #ifdef CONFIG_SYSLINK_RECOVERY | ||
243 | if (ipc_recovering() && user && cmd != CMD_NOTIFY_THREADDETACH) | ||
244 | return -EIO; | ||
245 | #endif | ||
246 | |||
242 | switch (cmd) { | 247 | switch (cmd) { |
243 | case CMD_NOTIFY_GETCONFIG: | 248 | case CMD_NOTIFY_GETCONFIG: |
244 | { | 249 | { |