]> rtime.felk.cvut.cz Git - can-benchmark.git/commitdiff
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 2312d435fb3626920cf24be33bc39aa69ecedee5..f38458744cd2ff7508d80ad7e2b3a0b8ff993915 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 || :'
            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
            cleanupgw
 
            main
index ab8f39d401d23a96c192a4bb5e20163dfb88beba..a72558a06b5fe8de6c0a1422bd7f6538486c0e21 100644 (file)
@@ -387,6 +387,22 @@ int send_frame(int socket)
        return ret;
 }
 
        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;
 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);
 
 
        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();
                SEND();
-               count = 1;
-       }
 
        while (!finish_flag &&
               (opt.count == 0 || count < opt.count || msg_in_progress != 0)) {
 
        while (!finish_flag &&
               (opt.count == 0 || count < opt.count || msg_in_progress != 0)) {