scc_signals.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #include "scc_signals.h"
  2. extern RCCE_FLAG flag_signals_enabled,flag_data_written;
  3. extern int *sig_array, *data_array, NUES, my_idag;
  4. extern int node_id, num_apps_terminated;
  5. extern FILE *log_file;
  6. int scc_kill(int target_ID, int sig) {
  7. int sig_array_local[LINE_SIZE], error, str_len, i, sig_read_ar[LINE_SIZE], tmp;
  8. RCCE_FLAG_STATUS receiver_status;
  9. char error_str[64];
  10. fprintf(log_file,"I enter here with target_ID %d and sig %d\n",target_ID,sig);
  11. fflush(log_file);
  12. for (i=0; i<LINE_SIZE; i++)
  13. sig_array_local[i] = sig;
  14. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  15. //if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai signals of 0 are disabled\n",ME);
  16. while (receiver_status == RCCE_FLAG_UNSET)
  17. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  18. if (sig == SIG_REJECT || (sig == SIG_FINISH && target_ID != my_idag) || sig == SIG_APP_TERMINATED || (sig == SIG_INIT_APP && target_ID == 0)) {
  19. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[4*node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  20. if (sig_read_ar[3] != NO_SIG && sig_read_ar[3] != SIG_ACK) {
  21. fprintf(log_file,"I have allready sent sig %d\n",sig_read_ar[3]);
  22. fflush(log_file);
  23. sig_array_local[3] = sig_read_ar[3];
  24. }
  25. } else if (sig == SIG_IDAG_FIND_IDAGS) {
  26. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[4*node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  27. //if (sig_read_ar[3] != NO_SIG && sig_read_ar[3] != SIG_ACK) {
  28. if (sig_read_ar[3] == SIG_REJECT || sig_read_ar[3] == SIG_FINISH || sig_read_ar[3] == SIG_APP_TERMINATED || (sig_read_ar[3] == SIG_INIT_APP && target_ID == 0)) {
  29. fprintf(log_file,"I have allready sent minor sig %d\n",sig_read_ar[3]);
  30. fflush(log_file);
  31. /*tmp = sig_read_ar[3];
  32. sig_array_local[3] = sig;
  33. sig_array_local[4] = tmp;*/
  34. sig_array_local[3] = sig_read_ar[3];
  35. }
  36. } else if (sig == SIG_ACK) {
  37. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[4*node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  38. if (sig_read_ar[3] == SIG_ACK) {
  39. fprintf(log_file,"I have allready sent SIG_ACK\n");
  40. fflush(log_file);
  41. sig_array_local[5] = NO_SIG;
  42. }
  43. }
  44. error = RCCE_put((t_vcharp)(&data_array[4*node_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), target_ID);
  45. if (error != RCCE_SUCCESS) {
  46. RCCE_error_string(error, error_str, &str_len);
  47. fprintf(log_file,"I got an error in put with descr %s\n",error_str);
  48. fflush(log_file);
  49. }
  50. fprintf(log_file,"I leave\n");
  51. fflush(log_file);
  52. return error;
  53. }
  54. void scc_signals_check(void) {
  55. int sig_read_ar[LINE_SIZE], sig_array_local[LINE_SIZE], error, str_len, sender_id, i, sig, j, dummy;
  56. RCCE_FLAG_STATUS receiver_status;
  57. char error_str[64];
  58. for (i=0; i<LINE_SIZE; i++) sig_array_local[i] = NO_SIG;
  59. //disable signals here
  60. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  61. //rintf(log_file,"I enter\n");
  62. for (sender_id=0; sender_id<36; sender_id++) {
  63. if (sender_id == node_id) continue;
  64. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  65. dummy=0;
  66. for (i=0; i<100; i++)
  67. for(j=0; j<100; j++) dummy++;
  68. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[4*sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  69. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  70. if (error != RCCE_SUCCESS) {
  71. RCCE_error_string(error, error_str, &str_len);
  72. fprintf(log_file,"I got an error in get from %d with descr %s\n",sender_id,error_str);
  73. fflush(log_file);
  74. } else {
  75. if (sig_read_ar[3] == SIG_INIT) {
  76. sig_INIT_handler(sender_id);
  77. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  78. } else if (sig_read_ar[3] == SIG_ACK) {
  79. fprintf(log_file,"I have to handle a sig ack!\n");
  80. fflush(log_file);
  81. //sig_ACK_handler(sender_id);
  82. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  83. } else if (sig_read_ar[3] == SIG_TERMINATE) {
  84. sig_TERMINATE_handler(sender_id);
  85. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  86. } else if (sig_read_ar[3] == SIG_INIT_APP) {
  87. sig_INIT_APP_handler(sender_id);
  88. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  89. } else if (sig_read_ar[3] == SIG_IDAG_FIND_IDAGS) {
  90. sig_IDAG_FIND_IDAGS_handler(sender_id);
  91. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  92. } else if (sig_read_ar[3] == SIG_REQ_DDS) {
  93. sig_REQ_DDS_handler(sender_id);
  94. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  95. } else if (sig_read_ar[3] == SIG_REQ_CORES) {
  96. sig_REQ_CORES_handler(sender_id);
  97. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  98. } else if (sig_read_ar[3] == SIG_REP_OFFERS) {
  99. sig_REP_OFFERS_handler(sender_id);
  100. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  101. } else if (sig_read_ar[3] == SIG_INIT_AGENT) {
  102. sig_INIT_AGENT_handler(sender_id);
  103. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  104. } else if (sig_read_ar[3] == SIG_ADD_CORES_DDS) {
  105. sig_ADD_CORES_DDS_handler(sender_id);
  106. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  107. } else if (sig_read_ar[3] == SIG_REM_CORES_DDS) {
  108. sig_REM_CORES_DDS_handler(sender_id);
  109. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  110. } else if (sig_read_ar[3] == SIG_APPOINT_WORK) {
  111. sig_APPOINT_WORK_handler(sender_id);
  112. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  113. } else if (sig_read_ar[3] == SIG_CHECK_REM_TIME) {
  114. sig_CHECK_REM_TIME_handler(sender_id);
  115. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  116. } else if (sig_read_ar[3] == SIG_FINISH) {
  117. sig_FINISH_handler(sender_id);
  118. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  119. } else if (sig_read_ar[3] == SIG_REJECT) {
  120. sig_REJECT_handler(sender_id);
  121. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  122. } else if (sig_read_ar[3] == SIG_APP_TERMINATED) {
  123. num_apps_terminated++;
  124. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  125. fflush(log_file);
  126. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  127. } else if (sig_read_ar[3] != NO_SIG) {
  128. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[0],sender_id);
  129. fflush(log_file);
  130. }
  131. sig = sig_read_ar[3];
  132. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  133. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[4*sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  134. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  135. if (sig_read_ar[4] != sig_read_ar[3]) {
  136. fprintf(log_file,"I have a second signal %d first sig was %d not it is %d\n",sig_read_ar[4],sig,sig_read_ar[3]);
  137. fflush(log_file);
  138. /*if (sig_read_ar[1] == SIG_INIT) {
  139. sig_INIT_handler(sender_id);
  140. } else if (sig_read_ar[1] == SIG_ACK) {
  141. sig_ACK_handler(sender_id);
  142. } else if (sig_read_ar[1] == SIG_TERMINATE) {
  143. sig_TERMINATE_handler(sender_id);
  144. } else if (sig_read_ar[1] == SIG_IDAG_FIND_IDAGS) {
  145. sig_IDAG_FIND_IDAGS_handler(sender_id);
  146. } else if (sig_read_ar[1] == SIG_REQ_DDS) {
  147. sig_REQ_DDS_handler(sender_id);
  148. } else if (sig_read_ar[1] == SIG_REQ_CORES) {
  149. sig_REQ_CORES_handler(sender_id);
  150. } else if (sig_read_ar[1] == SIG_REP_OFFERS) {
  151. sig_REP_OFFERS_handler(sender_id);
  152. } else if (sig_read_ar[1] == SIG_INIT_AGENT) {
  153. sig_INIT_AGENT_handler(sender_id);
  154. } else if (sig_read_ar[1] == SIG_ADD_CORES_DDS) {
  155. sig_ADD_CORES_DDS_handler(sender_id);
  156. } else if (sig_read_ar[1] == SIG_REM_CORES_DDS) {
  157. sig_REM_CORES_DDS_handler(sender_id);
  158. } else if (sig_read_ar[1] == SIG_APPOINT_WORK) {
  159. sig_APPOINT_WORK_handler(sender_id);
  160. } else if (sig_read_ar[1] == SIG_CHECK_REM_TIME) {
  161. sig_CHECK_REM_TIME_handler(sender_id);*/
  162. if (sig_read_ar[4] == SIG_IDAG_FIND_IDAGS) {
  163. sig_IDAG_FIND_IDAGS_handler(sender_id);
  164. } else if (sig_read_ar[4] == SIG_INIT_APP) {
  165. sig_INIT_APP_handler(sender_id);
  166. } else if (sig_read_ar[4] == SIG_FINISH) {
  167. sig_FINISH_handler(sender_id);
  168. } else if (sig_read_ar[4] == SIG_REJECT) {
  169. sig_REJECT_handler(sender_id);
  170. } else if (sig_read_ar[4] == SIG_APP_TERMINATED) {
  171. num_apps_terminated++;
  172. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  173. fflush(log_file);
  174. } else if (sig_read_ar[4] != NO_SIG) {
  175. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[1],sender_id);
  176. fflush(log_file);
  177. }
  178. }
  179. if (sig_read_ar[3] != NO_SIG) {
  180. //sig = sig_read_ar[0];
  181. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  182. dummy=0;
  183. for (i=0; i<100; i++)
  184. for(j=0; j<1000; j++) dummy++;
  185. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&data_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  186. if (sig == sig_read_ar[3] && sig_read_ar[5] != NO_SIG) {
  187. error = RCCE_put((t_vcharp)(&data_array[4*sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  188. fprintf(log_file,"I invalidated sender_ids %d signals\n",sender_id);
  189. fflush(log_file);
  190. } else if (sig_read_ar[5] == NO_SIG) {
  191. sig_array_local[3] = SIG_ACK;
  192. error = RCCE_put((t_vcharp)(&data_array[4*sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  193. fprintf(log_file,"I kept sig_ack\n");
  194. fflush(log_file);
  195. }
  196. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  197. }
  198. }
  199. }
  200. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  201. //fprintf(log_file,"I leave\n");
  202. //fflush(log_file);
  203. }