equal
deleted
inserted
replaced
850 #else |
850 #else |
851 if (jiffies - datagram->jiffies_sent |
851 if (jiffies - datagram->jiffies_sent |
852 > ext_injection_timeout_jiffies) |
852 > ext_injection_timeout_jiffies) |
853 #endif |
853 #endif |
854 { |
854 { |
|
855 #if defined EC_RT_SYSLOG || DEBUG_INJECT |
855 unsigned int time_us; |
856 unsigned int time_us; |
|
857 #endif |
856 |
858 |
857 datagram->state = EC_DATAGRAM_ERROR; |
859 datagram->state = EC_DATAGRAM_ERROR; |
|
860 |
|
861 #if defined EC_RT_SYSLOG || DEBUG_INJECT |
858 #ifdef EC_HAVE_CYCLES |
862 #ifdef EC_HAVE_CYCLES |
859 time_us = (unsigned int) |
863 time_us = (unsigned int) |
860 ((cycles_now - datagram->cycles_sent) * 1000LL) |
864 ((cycles_now - datagram->cycles_sent) * 1000LL) |
861 / cpu_khz; |
865 / cpu_khz; |
862 #else |
866 #else |
865 #endif |
869 #endif |
866 EC_MASTER_ERR(master, "Timeout %u us: Injecting" |
870 EC_MASTER_ERR(master, "Timeout %u us: Injecting" |
867 " external datagram %s size=%zu," |
871 " external datagram %s size=%zu," |
868 " max_queue_size=%zu\n", time_us, datagram->name, |
872 " max_queue_size=%zu\n", time_us, datagram->name, |
869 datagram->data_size, master->max_queue_size); |
873 datagram->data_size, master->max_queue_size); |
|
874 #endif |
870 } |
875 } |
871 else { |
876 else { |
872 #if DEBUG_INJECT |
877 #if DEBUG_INJECT |
873 EC_MASTER_DBG(master, 1, "Deferred injecting" |
878 EC_MASTER_DBG(master, 1, "Deferred injecting" |
874 " external datagram %s size=%u, queue_size=%u\n", |
879 " external datagram %s size=%u, queue_size=%u\n", |
942 * infinite loop!). Set the state to EC_DATAGRAM_QUEUED again, probably |
947 * infinite loop!). Set the state to EC_DATAGRAM_QUEUED again, probably |
943 * causing an unmatched datagram. */ |
948 * causing an unmatched datagram. */ |
944 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
949 list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { |
945 if (queued_datagram == datagram) { |
950 if (queued_datagram == datagram) { |
946 datagram->skip_count++; |
951 datagram->skip_count++; |
|
952 #ifdef EC_RT_SYSLOG |
947 EC_MASTER_DBG(master, 1, |
953 EC_MASTER_DBG(master, 1, |
948 "Datagram %p already queued (skipping).\n", datagram); |
954 "Datagram %p already queued (skipping).\n", datagram); |
|
955 #endif |
949 datagram->state = EC_DATAGRAM_QUEUED; |
956 datagram->state = EC_DATAGRAM_QUEUED; |
950 return; |
957 return; |
951 } |
958 } |
952 } |
959 } |
953 |
960 |
1130 " on %s (size %zu < %u byte):\n", |
1137 " on %s (size %zu < %u byte):\n", |
1131 device->dev->name, size, EC_FRAME_HEADER_SIZE); |
1138 device->dev->name, size, EC_FRAME_HEADER_SIZE); |
1132 ec_print_data(frame_data, size); |
1139 ec_print_data(frame_data, size); |
1133 } |
1140 } |
1134 master->stats.corrupted++; |
1141 master->stats.corrupted++; |
|
1142 #ifdef EC_RT_SYSLOG |
1135 ec_master_output_stats(master); |
1143 ec_master_output_stats(master); |
|
1144 #endif |
1136 return; |
1145 return; |
1137 } |
1146 } |
1138 |
1147 |
1139 cur_data = frame_data; |
1148 cur_data = frame_data; |
1140 |
1149 |
1149 "received size %zu):\n", device->dev->name, |
1158 "received size %zu):\n", device->dev->name, |
1150 frame_size, size); |
1159 frame_size, size); |
1151 ec_print_data(frame_data, size); |
1160 ec_print_data(frame_data, size); |
1152 } |
1161 } |
1153 master->stats.corrupted++; |
1162 master->stats.corrupted++; |
|
1163 #ifdef EC_RT_SYSLOG |
1154 ec_master_output_stats(master); |
1164 ec_master_output_stats(master); |
|
1165 #endif |
1155 return; |
1166 return; |
1156 } |
1167 } |
1157 |
1168 |
1158 cmd_follows = 1; |
1169 cmd_follows = 1; |
1159 while (cmd_follows) { |
1170 while (cmd_follows) { |
1171 " on %s (invalid data size %zu):\n", |
1182 " on %s (invalid data size %zu):\n", |
1172 device->dev->name, data_size); |
1183 device->dev->name, data_size); |
1173 ec_print_data(frame_data, size); |
1184 ec_print_data(frame_data, size); |
1174 } |
1185 } |
1175 master->stats.corrupted++; |
1186 master->stats.corrupted++; |
|
1187 #ifdef EC_RT_SYSLOG |
1176 ec_master_output_stats(master); |
1188 ec_master_output_stats(master); |
|
1189 #endif |
1177 return; |
1190 return; |
1178 } |
1191 } |
1179 |
1192 |
1180 // search for matching datagram in the queue |
1193 // search for matching datagram in the queue |
1181 matched = 0; |
1194 matched = 0; |
1190 } |
1203 } |
1191 |
1204 |
1192 // no matching datagram was found |
1205 // no matching datagram was found |
1193 if (!matched) { |
1206 if (!matched) { |
1194 master->stats.unmatched++; |
1207 master->stats.unmatched++; |
|
1208 #ifdef EC_RT_SYSLOG |
1195 ec_master_output_stats(master); |
1209 ec_master_output_stats(master); |
|
1210 #endif |
1196 |
1211 |
1197 if (unlikely(master->debug_level > 0)) { |
1212 if (unlikely(master->debug_level > 0)) { |
1198 EC_MASTER_DBG(master, 0, "UNMATCHED datagram:\n"); |
1213 EC_MASTER_DBG(master, 0, "UNMATCHED datagram:\n"); |
1199 ec_print_data(cur_data - EC_DATAGRAM_HEADER_SIZE, |
1214 ec_print_data(cur_data - EC_DATAGRAM_HEADER_SIZE, |
1200 EC_DATAGRAM_HEADER_SIZE + data_size |
1215 EC_DATAGRAM_HEADER_SIZE + data_size |
2483 datagram->jiffies_sent > timeout_jiffies) { |
2498 datagram->jiffies_sent > timeout_jiffies) { |
2484 #endif |
2499 #endif |
2485 list_del_init(&datagram->queue); |
2500 list_del_init(&datagram->queue); |
2486 datagram->state = EC_DATAGRAM_TIMED_OUT; |
2501 datagram->state = EC_DATAGRAM_TIMED_OUT; |
2487 master->stats.timeouts++; |
2502 master->stats.timeouts++; |
|
2503 |
|
2504 #ifdef EC_RT_SYSLOG |
2488 ec_master_output_stats(master); |
2505 ec_master_output_stats(master); |
2489 |
2506 |
2490 if (unlikely(master->debug_level > 0)) { |
2507 if (unlikely(master->debug_level > 0)) { |
2491 unsigned int time_us; |
2508 unsigned int time_us; |
2492 #ifdef EC_HAVE_CYCLES |
2509 #ifdef EC_HAVE_CYCLES |
2500 #endif |
2517 #endif |
2501 EC_MASTER_DBG(master, 0, "TIMED OUT datagram %p," |
2518 EC_MASTER_DBG(master, 0, "TIMED OUT datagram %p," |
2502 " index %02X waited %u us.\n", |
2519 " index %02X waited %u us.\n", |
2503 datagram, datagram->index, time_us); |
2520 datagram, datagram->index, time_us); |
2504 } |
2521 } |
|
2522 #endif /* RT_SYSLOG */ |
2505 } |
2523 } |
2506 } |
2524 } |
2507 } |
2525 } |
2508 |
2526 |
2509 /*****************************************************************************/ |
2527 /*****************************************************************************/ |