From: Jan Kiszka <[email protected]>

We already have check in rtdm_dev_register, but drivers (such as RTnet)
may call other services without checking the core state. Then we risk
crashes, rather than simple errors.

Signed-off-by: Jan Kiszka <[email protected]>
---
 kernel/cobalt/rtdm/device.c | 2 +-
 kernel/cobalt/rtdm/drvlib.c | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index 4cfdb1c5b1..8fe0ed7355 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -380,7 +380,7 @@ static void unregister_driver(struct rtdm_driver *drv)
  * - -EAGAIN is returned if no registry slot is available (check/raise
  * CONFIG_XENO_OPT_REGISTRY_NRSLOTS).
  *
- * - -ENOSYS is returned if cobalt is disabled
+ * - -ENOSYS is returned if the real-time core is disabled.
  *
  * - -ENXIO is returned if no valid minor could be assigned
  *
diff --git a/kernel/cobalt/rtdm/drvlib.c b/kernel/cobalt/rtdm/drvlib.c
index 316d87b29d..3bf23e7836 100644
--- a/kernel/cobalt/rtdm/drvlib.c
+++ b/kernel/cobalt/rtdm/drvlib.c
@@ -114,6 +114,9 @@ int rtdm_task_init(rtdm_task_t *task, const char *name,
        struct xnthread_init_attr iattr;
        int err;
 
+       if (!realtime_core_enabled())
+               return -ENOSYS;
+
        iattr.name = name;
        iattr.flags = 0;
        iattr.personality = &xenomai_personality;
@@ -1418,6 +1421,8 @@ EXPORT_SYMBOL_GPL(rtdm_mutex_timedlock);
  *
  * - -EBUSY is returned if the specified IRQ line is already in use.
  *
+ * - -ENOSYS is returned if the real-time core is disabled.
+ *
  * @coretags{secondary-only}
  */
 int rtdm_irq_request(rtdm_irq_t *irq_handle, unsigned int irq_no,
@@ -1426,6 +1431,9 @@ int rtdm_irq_request(rtdm_irq_t *irq_handle, unsigned int 
irq_no,
 {
        int err;
 
+       if (!realtime_core_enabled())
+               return -ENOSYS;
+
        if (!XENO_ASSERT(COBALT, xnsched_root_p()))
                return -EPERM;
 
-- 
2.16.4


Reply via email to