Module: xenomai-forge
Branch: next
Commit: 017fbd8b90e3878e4be98940f65f6b0027210e8c
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=017fbd8b90e3878e4be98940f65f6b0027210e8c

Author: Philippe Gerum <r...@xenomai.org>
Date:   Thu May 29 15:40:51 2014 +0200

drivers/ipc: cleanup atomic blocks

---

 kernel/drivers/ipc/bufp.c     |   37 ++++++++++++++++---------------------
 kernel/drivers/ipc/iddp.c     |   19 ++++++++-----------
 kernel/drivers/ipc/internal.h |    2 --
 kernel/drivers/ipc/xddp.c     |   33 ++++++++++++++++-----------------
 4 files changed, 40 insertions(+), 51 deletions(-)

diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c
index bf37ac0..78e88f4 100644
--- a/kernel/drivers/ipc/bufp.c
+++ b/kernel/drivers/ipc/bufp.c
@@ -28,8 +28,6 @@
 #include <rtdm/ipc.h>
 #include "internal.h"
 
-#define trace(m,a...) printk(KERN_WARNING "%s: " m "\n", __FUNCTION__, ##a)
-
 #define BUFP_SOCKET_MAGIC 0xa61a61a6
 
 struct bufp_socket {
@@ -61,7 +59,6 @@ struct bufp_wait_context {
        struct rtipc_wait_context wc;
        size_t len;
        struct bufp_socket *sk;
-       rtdm_lockctx_t lockctx;
 };
 
 static struct sockaddr_ipc nullsa = {
@@ -135,13 +132,12 @@ static void bufp_close(struct rtipc_private *priv,
                struct rtdm_fd *fd)
 {
        struct bufp_socket *sk = priv->state;
+       rtdm_lockctx_t s;
 
        rtdm_event_destroy(&sk->i_event);
        rtdm_event_destroy(&sk->o_event);
 
        if (sk->name.sipc_port > -1) {
-               spl_t s;
-
                cobalt_atomic_enter(s);
                xnmap_remove(portmap, sk->name.sipc_port);
                cobalt_atomic_leave(s);
@@ -166,6 +162,7 @@ static ssize_t __bufp_readbuf(struct bufp_socket *sk,
        rtdm_toseq_t toseq;
        ssize_t len, ret;
        size_t rbytes, n;
+       rtdm_lockctx_t s;
        u_long rdtoken;
        off_t rdoff;
 
@@ -173,8 +170,7 @@ static ssize_t __bufp_readbuf(struct bufp_socket *sk,
 
        rtdm_toseq_init(&toseq, sk->rx_timeout);
 
-       rtipc_enter_atomic(wait.lockctx);
-
+       cobalt_atomic_enter(s);
 redo:
        for (;;) {
                /*
@@ -203,12 +199,12 @@ redo:
                         * Release the lock while retrieving the data
                         * to keep latency low.
                         */
-                       rtipc_leave_atomic(wait.lockctx);
+                       cobalt_atomic_leave(s);
                        ret = xnbufd_copy_from_kmem(bufd, sk->bufmem + rdoff, 
n);
                        if (ret < 0)
                                return ret;
 
-                       rtipc_enter_atomic(wait.lockctx);
+                       cobalt_atomic_enter(s);
                        /*
                         * In case we were preempted while retrieving
                         * the message, we have to re-read the whole
@@ -279,7 +275,7 @@ redo:
                        break;
        }
 out:
-       rtipc_leave_atomic(wait.lockctx);
+       cobalt_atomic_leave(s);
 
        return ret;
 }
@@ -409,6 +405,7 @@ static ssize_t __bufp_writebuf(struct bufp_socket *rsk,
        struct rtipc_wait_context *wc;
        struct xnthread *waiter;
        rtdm_toseq_t toseq;
+       rtdm_lockctx_t s;
        ssize_t len, ret;
        size_t wbytes, n;
        u_long wrtoken;
@@ -418,8 +415,7 @@ static ssize_t __bufp_writebuf(struct bufp_socket *rsk,
 
        rtdm_toseq_init(&toseq, sk->rx_timeout);
 
-       rtipc_enter_atomic(wait.lockctx);
-
+       cobalt_atomic_enter(s);
 redo:
        for (;;) {
                /*
@@ -448,11 +444,11 @@ redo:
                         * Release the lock while copying the data to
                         * keep latency low.
                         */
-                       rtipc_leave_atomic(wait.lockctx);
+                       cobalt_atomic_leave(s);
                        ret = xnbufd_copy_to_kmem(rsk->bufmem + wroff, bufd, n);
                        if (ret < 0)
                                return ret;
-                       rtipc_enter_atomic(wait.lockctx);
+                       cobalt_atomic_enter(s);
                        /*
                         * In case we were preempted while copying the
                         * message, we have to write the whole thing
@@ -511,7 +507,7 @@ redo:
                        break;
        }
 out:
-       rtipc_leave_atomic(wait.lockctx);
+       cobalt_atomic_leave(s);
 
        return ret;
 }
@@ -525,8 +521,8 @@ static ssize_t __bufp_sendmsg(struct rtipc_private *priv,
        ssize_t len, rdlen, vlen, ret = 0;
        struct rtdm_fd *rfd;
        struct xnbufd bufd;
+       rtdm_lockctx_t s;
        int nvec;
-       spl_t s;
 
        len = rtipc_get_iov_flatlen(iov, iovlen);
        if (len == 0)
@@ -583,7 +579,6 @@ static ssize_t __bufp_sendmsg(struct rtipc_private *priv,
        rtdm_fd_unlock(rfd);
 
        return len - rdlen;
-
 fail:
        rtdm_fd_unlock(rfd);
 
@@ -662,7 +657,7 @@ static int __bufp_bind_socket(struct rtipc_private *priv,
        struct bufp_socket *sk = priv->state;
        int ret = 0, port;
        struct rtdm_fd *fd;
-       spl_t s;
+       rtdm_lockctx_t s;
 
        if (sa->sipc_family != AF_RTIPC)
                return -EINVAL;
@@ -735,9 +730,9 @@ static int __bufp_connect_socket(struct bufp_socket *sk,
                                 struct sockaddr_ipc *sa)
 {
        struct bufp_socket *rsk;
+       rtdm_lockctx_t s;
        xnhandle_t h;
        int ret;
-       spl_t s;
 
        if (sa == NULL) {
                sa = &nullsa;
@@ -804,9 +799,9 @@ static int __bufp_setsockopt(struct bufp_socket *sk,
        struct _rtdm_setsockopt_args sopt;
        struct rtipc_port_label plabel;
        struct timeval tv;
+       rtdm_lockctx_t s;
        int ret = 0;
        size_t len;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;
@@ -899,9 +894,9 @@ static int __bufp_getsockopt(struct bufp_socket *sk,
        struct _rtdm_getsockopt_args sopt;
        struct rtipc_port_label plabel;
        struct timeval tv;
+       rtdm_lockctx_t s;
        socklen_t len;
        int ret = 0;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;
diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c
index 9e14de6..e0e6244 100644
--- a/kernel/drivers/ipc/iddp.c
+++ b/kernel/drivers/ipc/iddp.c
@@ -28,8 +28,6 @@
 #include <rtdm/ipc.h>
 #include "internal.h"
 
-#define trace(m,a...) printk(KERN_WARNING "%s: " m "\n", __FUNCTION__, ##a)
-
 #define IDDP_SOCKET_MAGIC 0xa37a37a8
 
 struct iddp_message {
@@ -115,8 +113,8 @@ __iddp_alloc_mbuf(struct iddp_socket *sk, size_t len,
 {
        struct iddp_message *mbuf = NULL;
        rtdm_toseq_t timeout_seq;
+       rtdm_lockctx_t s;
        int ret = 0;
-       spl_t s;
 
        rtdm_toseq_init(&timeout_seq, timeout);
 
@@ -195,10 +193,9 @@ static void iddp_close(struct rtipc_private *priv,
 {
        struct iddp_socket *sk = priv->state;
        struct iddp_message *mbuf;
+       rtdm_lockctx_t s;
 
        if (sk->name.sipc_port > -1) {
-               spl_t s;
-
                cobalt_atomic_enter(s);
                xnmap_remove(portmap, sk->name.sipc_port);
                cobalt_atomic_leave(s);
@@ -239,7 +236,7 @@ static ssize_t __iddp_recvmsg(struct rtipc_private *priv,
        struct iddp_message *mbuf;
        nanosecs_rel_t timeout;
        struct xnbufd bufd;
-       spl_t s;
+       rtdm_lockctx_t s;
 
        if (!test_bit(_IDDP_BOUND, &sk->status))
                return -EAGAIN;
@@ -387,7 +384,7 @@ static ssize_t __iddp_sendmsg(struct rtipc_private *priv,
        struct rtdm_fd *rfd;
        int nvec, wroff, ret;
        struct xnbufd bufd;
-       spl_t s;
+       rtdm_lockctx_t s;
 
        len = rtipc_get_iov_flatlen(iov, iovlen);
        if (len == 0)
@@ -529,9 +526,9 @@ static int __iddp_bind_socket(struct rtipc_private *priv,
        struct iddp_socket *sk = priv->state;
        int ret = 0, port;
        struct rtdm_fd *fd;
+       rtdm_lockctx_t s;
        void *poolmem;
        size_t poolsz;
-       spl_t s;
 
        if (sa->sipc_family != AF_RTIPC)
                return -EINVAL;
@@ -617,9 +614,9 @@ static int __iddp_connect_socket(struct iddp_socket *sk,
                                 struct sockaddr_ipc *sa)
 {
        struct iddp_socket *rsk;
+       rtdm_lockctx_t s;
        xnhandle_t h;
        int ret;
-       spl_t s;
 
        if (sa == NULL) {
                sa = &nullsa;
@@ -686,9 +683,9 @@ static int __iddp_setsockopt(struct iddp_socket *sk,
        struct _rtdm_setsockopt_args sopt;
        struct rtipc_port_label plabel;
        struct timeval tv;
+       rtdm_lockctx_t s;
        int ret = 0;
        size_t len;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;
@@ -781,9 +778,9 @@ static int __iddp_getsockopt(struct iddp_socket *sk,
        struct _rtdm_getsockopt_args sopt;
        struct rtipc_port_label plabel;
        struct timeval tv;
+       rtdm_lockctx_t s;
        socklen_t len;
        int ret = 0;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;
diff --git a/kernel/drivers/ipc/internal.h b/kernel/drivers/ipc/internal.h
index ed14e3d..d388b73 100644
--- a/kernel/drivers/ipc/internal.h
+++ b/kernel/drivers/ipc/internal.h
@@ -114,7 +114,5 @@ extern struct xnptree rtipc_ptree;
 #define rtipc_get_wait_context         xnthread_get_wait_context
 
 #define rtipc_peek_wait_head(obj)      xnsynch_peek_pendq(&(obj)->synch_base)
-#define rtipc_enter_atomic(lockctx)    xnlock_get_irqsave(&nklock, (lockctx))
-#define rtipc_leave_atomic(lockctx)    xnlock_put_irqrestore(&nklock, 
(lockctx))
 
 #endif /* !_RTIPC_INTERNAL_H */
diff --git a/kernel/drivers/ipc/xddp.c b/kernel/drivers/ipc/xddp.c
index 5190661..5b16314 100644
--- a/kernel/drivers/ipc/xddp.c
+++ b/kernel/drivers/ipc/xddp.c
@@ -150,7 +150,7 @@ static int __xddp_resize_streambuf(struct xddp_socket *sk) 
/* sk->lock held */
 static void __xddp_free_handler(void *buf, void *skarg) /* nklock free */
 {
        struct xddp_socket *sk = skarg;
-       rtdm_lockctx_t lockctx;
+       rtdm_lockctx_t s;
 
        if (buf != sk->buffer) {
                xnheap_free(sk->bufpool, buf);
@@ -159,7 +159,7 @@ static void __xddp_free_handler(void *buf, void *skarg) /* 
nklock free */
 
        /* Reset the streaming buffer. */
 
-       rtdm_lock_get_irqsave(&sk->lock, lockctx);
+       rtdm_lock_get_irqsave(&sk->lock, s);
 
        sk->fillsz = 0;
        sk->buffer_port = -1;
@@ -173,7 +173,7 @@ static void __xddp_free_handler(void *buf, void *skarg) /* 
nklock free */
        if (unlikely(sk->curbufsz != sk->reqbufsz))
                __xddp_resize_streambuf(sk);
 
-       rtdm_lock_put_irqrestore(&sk->lock, lockctx);
+       rtdm_lock_put_irqrestore(&sk->lock, s);
 }
 
 static void __xddp_output_handler(struct xnpipe_mh *mh, void *skarg) /* nklock 
held */
@@ -241,7 +241,7 @@ static void xddp_close(struct rtipc_private *priv,
                      struct rtdm_fd *fd)
 {
        struct xddp_socket *sk = priv->state;
-       spl_t s;
+       rtdm_lockctx_t s;
 
        sk->monitor = NULL;
 
@@ -381,7 +381,7 @@ static ssize_t __xddp_stream(struct xddp_socket *sk,
 {
        struct xddp_message *mbuf;
        size_t fillptr, rembytes;
-       rtdm_lockctx_t lockctx;
+       rtdm_lockctx_t s;
        ssize_t outbytes;
        int ret;
 
@@ -390,7 +390,7 @@ static ssize_t __xddp_stream(struct xddp_socket *sk,
         * the nklock directly or indirectly, so holding our socket
         * lock across those calls is fine.
         */
-       rtdm_lock_get_irqsave(&sk->lock, lockctx);
+       rtdm_lock_get_irqsave(&sk->lock, s);
 
        /*
         * There are two cases in which we must remove the cork
@@ -416,10 +416,10 @@ static ssize_t __xddp_stream(struct xddp_socket *sk,
                fillptr = sk->fillsz;
                sk->fillsz += outbytes;
 
-               rtdm_lock_put_irqrestore(&sk->lock, lockctx);
+               rtdm_lock_put_irqrestore(&sk->lock, s);
                ret = xnbufd_copy_to_kmem(mbuf->data + fillptr,
                                          bufd, outbytes);
-               rtdm_lock_get_irqsave(&sk->lock, lockctx);
+               rtdm_lock_get_irqsave(&sk->lock, s);
 
                if (ret < 0) {
                        outbytes = ret;
@@ -445,7 +445,7 @@ static ssize_t __xddp_stream(struct xddp_socket *sk,
        }
 
 out:
-       rtdm_lock_put_irqrestore(&sk->lock, lockctx);
+       rtdm_lock_put_irqrestore(&sk->lock, s);
 
        return outbytes;
 }
@@ -462,7 +462,7 @@ static ssize_t __xddp_sendmsg(struct rtipc_private *priv,
        struct rtdm_fd *rfd;
        int nvec, to, from;
        struct xnbufd bufd;
-       spl_t s;
+       rtdm_lockctx_t s;
 
        len = rtipc_get_iov_flatlen(iov, iovlen);
        if (len == 0)
@@ -663,10 +663,10 @@ static int __xddp_bind_socket(struct rtipc_private *priv,
 {
        struct xddp_socket *sk = priv->state;
        struct xnpipe_operations ops;
+       rtdm_lockctx_t s;
        size_t poolsz;
        void *poolmem;
        int ret = 0;
-       spl_t s;
 
        if (sa->sipc_family != AF_RTIPC)
                return -EINVAL;
@@ -767,9 +767,9 @@ static int __xddp_connect_socket(struct xddp_socket *sk,
                                 struct sockaddr_ipc *sa)
 {
        struct xddp_socket *rsk;
+       rtdm_lockctx_t s;
        xnhandle_t h;
        int ret;
-       spl_t s;
 
        if (sa == NULL) {
                sa = &nullsa;
@@ -836,11 +836,10 @@ static int __xddp_setsockopt(struct xddp_socket *sk,
        int (*monitor)(struct rtdm_fd *fd, int event, long arg);
        struct _rtdm_setsockopt_args sopt;
        struct rtipc_port_label plabel;
-       rtdm_lockctx_t lockctx;
        struct timeval tv;
+       rtdm_lockctx_t s;
        int ret = 0;
        size_t len;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;
@@ -882,13 +881,13 @@ static int __xddp_setsockopt(struct xddp_socket *sk,
                                return -EINVAL;
                        }
                }
-               rtdm_lock_get_irqsave(&sk->lock, lockctx);
+               rtdm_lock_get_irqsave(&sk->lock, s);
                sk->reqbufsz = len;
                if (len != sk->curbufsz &&
                    !test_bit(_XDDP_SYNCWAIT, &sk->status) &&
                    test_bit(_XDDP_BOUND, &sk->status))
                        ret = __xddp_resize_streambuf(sk);
-               rtdm_lock_put_irqrestore(&sk->lock, lockctx);
+               rtdm_lock_put_irqrestore(&sk->lock, s);
                break;
 
        case XDDP_POOLSZ:
@@ -951,9 +950,9 @@ static int __xddp_getsockopt(struct xddp_socket *sk,
        struct _rtdm_getsockopt_args sopt;
        struct rtipc_port_label plabel;
        struct timeval tv;
+       rtdm_lockctx_t s;
        socklen_t len;
        int ret = 0;
-       spl_t s;
 
        if (rtipc_get_arg(fd, &sopt, arg, sizeof(sopt)))
                return -EFAULT;


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to