aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Guzman Lugo <fernando.lugo@ti.com>2010-12-07 20:30:18 -0500
committerPaolo Pisati <paolo.pisati@canonical.com>2012-08-17 04:19:09 -0400
commit26a75334d98321f1ebfeeabe5298ff6d6ef4ff1a (patch)
tree8526d2a887e9333ed7244978d268984f679949fa
parent17328e2e9ae044a8701c858b794a25c6b11df480 (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.h14
-rw-r--r--arch/arm/plat-omap/include/syslink/notify_ducatidriver.h2
-rw-r--r--drivers/dsp/syslink/multicore_ipc/gatemp_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/heapbufmp_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/heapmemmp_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/ipc_drv.c16
-rw-r--r--drivers/dsp/syslink/multicore_ipc/listmp_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/messageq_ioctl.c10
-rw-r--r--drivers/dsp/syslink/multicore_ipc/multiproc_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/nameserver_ioctl.c8
-rw-r--r--drivers/dsp/syslink/multicore_ipc/platform.c4
-rw-r--r--drivers/dsp/syslink/multicore_ipc/sharedregion_ioctl.c7
-rw-r--r--drivers/dsp/syslink/multicore_ipc/sysipc_ioctl.c6
-rw-r--r--drivers/dsp/syslink/omap_notify/drv_notify.c7
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 123enum {
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. */
175int ipc_unregister_notifier(struct notifier_block *nb); 179int ipc_unregister_notifier(struct notifier_block *nb);
176 180
181/* check if ipc is in recovery state */
182#ifdef CONFIG_SYSLINK_RECOVERY
183bool ipc_recovering(void);
184#endif
185
186/* Indicate to schedule the recovery mechanism */
187void 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
31extern u32 get_ducati_virt_mem(); 31extern u32 get_ducati_virt_mem(void);
32extern void unmap_ducati_virt_mem(u32 shm_virt_addr); 32extern 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
109static void ipc_recover_schedule(void) 109void 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}
115EXPORT_SYMBOL_GPL(ipc_recover_schedule);
115 116
116static int ipc_ducati_iommu_notifier_call(struct notifier_block *nb, 117static 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
155bool 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}
1736EXPORT_SYMBOL(platform_start_callback); 1738EXPORT_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 {