master/master.c
branchstable-1.5
changeset 2532 bdadf6da4914
parent 2530 f8b779c9794e
child 2541 1ddd186e9d2c
equal deleted inserted replaced
2531:193443bcd7dc 2532:bdadf6da4914
   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 /*****************************************************************************/