Increase txqueue length (qdisc) to avoid ENOBUFS errors
authorMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 4 Dec 2010 07:45:28 +0000 (08:45 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 4 Dec 2010 07:45:28 +0000 (08:45 +0100)
gw-tests/lib.sh
latester/latester.c

index 2312d43..f384587 100644 (file)
@@ -114,6 +114,8 @@ _run() {
            sshgw 'chrt -p -f 50 `pidof irq/146-can1` > /dev/null || :'
            sshgw 'chrt -p -f 49 `pidof sirq-net-rx/0` > /dev/null || :'
            sshgw 'chrt -p -f 49 `pidof sirq-net-tx/0` > /dev/null || :'
+           # Set the length of qdisc queue to avoid ENOBUFS errors
+           ifconfig can0 txqueuelen 200
            cleanupgw
 
            main
index ab8f39d..a72558a 100644 (file)
@@ -387,6 +387,22 @@ int send_frame(int socket)
        return ret;
 }
 
+static inline send_and_check(int s)
+{
+       int ret;
+       ret = send_frame(s);
+       if (ret != sizeof(struct can_frame)) {
+/*             if (ret == -1 && errno == ENOBUFS && opt.period_us == 0 && !opt.oneattime) { */
+/*                     stats.enobufs++; */
+/*                     /\* Ignore this error - pfifo_fast qeuue is full *\/ */
+/*             } else */
+                       error(1, errno, "send_frame (line %d)", __LINE__);
+       } else {
+               count++;
+               msg_in_progress++;
+       }
+}
+
 static inline void get_next_timeout(struct timespec *timeout)
 {
        struct timespec now;
@@ -542,26 +558,10 @@ void *measure_thread(void *arg)
 
        set_sched_policy_and_prio(SCHED_FIFO, 40);
 
-#define SEND()                                                         \
-       do {                                                            \
-               ret = send_frame(pfd[0].fd);                            \
-               if (ret != sizeof(struct can_frame)) {                  \
-                       if (ret == -1 && errno == ENOBUFS && opt.period_us == 0 && !opt.oneattime) { \
-                               stats.enobufs++;                        \
-                               /* Ignore this error - pfifo_fast qeuue is full */ \
-                       } else                                          \
-                               error(1, errno, "send_frame (line %d)", __LINE__); \
-               }                                                       \
-               else {                                                  \
-                       count++;                                        \
-                       msg_in_progress++;                              \
-               }                                                       \
-       } while (0)
-
-       if (opt.oneattime) {
+#define SEND() send_and_check(pfd[0].fd)
+
+       if (opt.oneattime)
                SEND();
-               count = 1;
-       }
 
        while (!finish_flag &&
               (opt.count == 0 || count < opt.count || msg_in_progress != 0)) {