Module: xenomai-abe
Branch: analogy
Commit: c4baa205e55055c9c26d35537af6b06a012da223
URL:    
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=c4baa205e55055c9c26d35537af6b06a012da223

Author: Alexis Berlemont <alexis.berlem...@gmail.com>
Date:   Wed Apr 21 01:17:07 2010 +0200

analogy: add calls to rtdm_rt_capable() in ioctl handlers

Analogy now integrates calls to rtdm_rt_capable() in many ioctl
handlers. Not all of them were updated: the ioctls in charge of
the description of the board configuration  (dev_info, subd_info,
chan_info, rng_info) needs no real-time warranty in any way.

---

 ksrc/drivers/analogy/buffer.c      |   30 ++++++++++++++++++------------
 ksrc/drivers/analogy/command.c     |    3 +++
 ksrc/drivers/analogy/instruction.c |    6 ++++++
 ksrc/drivers/analogy/transfer.c    |    3 +++
 4 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index d882810..916a571 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -389,6 +389,12 @@ int a4l_ioctl_mmap(a4l_cxt_t *cxt, void *arg)
        __a4l_dbg(1, core_dbg, 
                  "a4l_ioctl_mmap: minor=%d\n", a4l_get_minor(cxt));
 
+       /* The mmap operation cannot be performed in a 
+          real-time context */
+       if (rtdm_in_rt_context() != 0) {
+               return -ENOSYS;
+       }
+
        dev = a4l_get_dev(cxt);
 
        /* Basically check the device */
@@ -398,12 +404,6 @@ int a4l_ioctl_mmap(a4l_cxt_t *cxt, void *arg)
                return -EINVAL;
        }
 
-       /* The mmap operation cannot be performed in a 
-          real-time context */
-       if (rtdm_in_rt_context() != 0) {
-               return -ENOSYS;
-       }
-
        /* Recover the argument structure */
        if (rtdm_safe_copy_from_user(cxt->user_info,
                                     &map_cfg, arg, sizeof(a4l_mmap_t)) != 0)
@@ -467,18 +467,18 @@ int a4l_ioctl_bufcfg(a4l_cxt_t * cxt, void *arg)
        __a4l_dbg(1, core_dbg, 
                  "a4l_ioctl_bufcfg: minor=%d\n", a4l_get_minor(cxt));
 
-       /* Basic checking */
-       if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
-               __a4l_err("a4l_ioctl_bufcfg: unattached device\n");
-               return -EINVAL;
-       }
-
        /* As Linux API is used to allocate a virtual buffer,
           the calling process must not be in primary mode */
        if (rtdm_in_rt_context() != 0) {
                return -ENOSYS;
        }
 
+       /* Basic checking */
+       if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
+               __a4l_err("a4l_ioctl_bufcfg: unattached device\n");
+               return -EINVAL;
+       }
+
        if (rtdm_safe_copy_from_user(cxt->user_info,
                                     &buf_cfg, 
                                     arg, sizeof(a4l_bufcfg_t)) != 0)
@@ -536,6 +536,9 @@ int a4l_ioctl_bufinfo(a4l_cxt_t * cxt, void *arg)
        __a4l_dbg(1, core_dbg, 
                  "a4l_ioctl_bufinfo: minor=%d\n", a4l_get_minor(cxt));
 
+       if (rtdm_rt_capable(cxt->user_info) != 0)
+               return -ENOSYS;
+
        /* Basic checking */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_ioctl_bufinfo: unattached device\n");
@@ -879,6 +882,9 @@ int a4l_ioctl_poll(a4l_cxt_t * cxt, void *arg)
        a4l_buf_t *buf;
        a4l_poll_t poll;
 
+       if (rtdm_rt_capable(cxt->user_info) != 0)
+               return -ENOSYS;
+
        /* Basic checking */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_poll: unattached device\n");
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index d58f05f..05e4d78 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -304,6 +304,9 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
        __a4l_dbg(1, core_dbg, 
                  "a4l_ioctl_cmd: minor=%d\n", a4l_get_minor(cxt));
 
+       if (rtdm_rt_capable(cxt->user_info) != 0)
+               return -ENOSYS;
+
        /* Basically check the device */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_ioctl_cmd: cannot command "
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index f3a4ed7..a95c8c5 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -292,6 +292,9 @@ int a4l_ioctl_insn(a4l_cxt_t * cxt, void *arg)
        a4l_kinsn_t insn;
        a4l_dev_t *dev = a4l_get_dev(cxt);
 
+       if (rtdm_rt_capable(cxt->user_info) != 0)
+               return -ENOSYS;
+
        /* Basic checking */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_ioctl_insn: unattached device\n");
@@ -391,6 +394,9 @@ int a4l_ioctl_insnlist(a4l_cxt_t * cxt, void *arg)
        a4l_kilst_t ilst;
        a4l_dev_t *dev = a4l_get_dev(cxt);
 
+       if (rtdm_rt_capable(cxt->user_info) != 0)
+               return -ENOSYS;
+
        /* Basic checking */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_ioctl_insnlist: unattached device\n");
diff --git a/ksrc/drivers/analogy/transfer.c b/ksrc/drivers/analogy/transfer.c
index c2a8d90..c8a7d43 100644
--- a/ksrc/drivers/analogy/transfer.c
+++ b/ksrc/drivers/analogy/transfer.c
@@ -498,6 +498,9 @@ int a4l_ioctl_cancel(a4l_cxt_t * cxt, void *arg)
        a4l_dev_t *dev = a4l_get_dev(cxt);
        a4l_subd_t *subd;
 
+       __a4l_dbg(1, core_dbg, 
+                 "a4l_ioctl_cancel: minor=%d\n", a4l_get_minor(cxt));
+
        /* Basically check the device */
        if (!test_bit(A4L_DEV_ATTACHED, &dev->flags)) {
                __a4l_err("a4l_ioctl_cancel: operation not supported on "


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to