scc_signals_cpy.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #include "scc_signals.h"
  2. extern RCCE_FLAG flag_signals_enabled,flag_data_written;
  3. extern int *sig_array, *data_array, NUES;
  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];
  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 || sig == SIG_APP_TERMINATED || (sig == SIG_INIT_APP && target_ID == 0)) {
  19. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  20. if (sig_read_ar[0] != NO_SIG && sig_read_ar[0] != SIG_ACK) {
  21. fprintf(log_file,"I have allready sent sig %d\n",sig_read_ar[0]);
  22. fflush(log_file);
  23. sig_array_local[0] = sig_read_ar[0];
  24. }
  25. }
  26. error = RCCE_put((t_vcharp)(&sig_array[node_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), target_ID);
  27. if (error != RCCE_SUCCESS) {
  28. RCCE_error_string(error, error_str, &str_len);
  29. fprintf(log_file,"I got an error in put with descr %s\n",error_str);
  30. fflush(log_file);
  31. }
  32. fprintf(log_file,"I leave\n");
  33. fflush(log_file);
  34. return error;
  35. }
  36. void scc_signals_check(void) {
  37. int sig_read_ar[LINE_SIZE], sig_array_local[LINE_SIZE], error, str_len, sender_id, i, sig;
  38. RCCE_FLAG_STATUS receiver_status;
  39. char error_str[64];
  40. for (i=0; i<LINE_SIZE; i++) sig_array_local[i] = NO_SIG;
  41. //disable signals here
  42. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  43. //rintf(log_file,"I enter\n");
  44. for (sender_id=0; sender_id<36; sender_id++) {
  45. if (sender_id == node_id) continue;
  46. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  47. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  48. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  49. if (error != RCCE_SUCCESS) {
  50. RCCE_error_string(error, error_str, &str_len);
  51. fprintf(log_file,"I got an error in get from %d with descr %s\n",sender_id,error_str);
  52. fflush(log_file);
  53. } else {
  54. if (sig_read_ar[0] == SIG_INIT) {
  55. sig_INIT_handler(sender_id);
  56. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  57. } else if (sig_read_ar[0] == SIG_ACK) {
  58. sig_ACK_handler(sender_id);
  59. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  60. } else if (sig_read_ar[0] == SIG_TERMINATE) {
  61. sig_TERMINATE_handler(sender_id);
  62. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  63. } else if (sig_read_ar[0] == SIG_INIT_APP) {
  64. sig_INIT_APP_handler(sender_id);
  65. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  66. } else if (sig_read_ar[0] == SIG_IDAG_FIND_IDAGS) {
  67. sig_IDAG_FIND_IDAGS_handler(sender_id);
  68. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  69. } else if (sig_read_ar[0] == SIG_REQ_DDS) {
  70. sig_REQ_DDS_handler(sender_id);
  71. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  72. } else if (sig_read_ar[0] == SIG_REQ_CORES) {
  73. sig_REQ_CORES_handler(sender_id);
  74. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  75. } else if (sig_read_ar[0] == SIG_REP_OFFERS) {
  76. sig_REP_OFFERS_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[0] == SIG_INIT_AGENT) {
  79. sig_INIT_AGENT_handler(sender_id);
  80. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  81. } else if (sig_read_ar[0] == SIG_ADD_CORES_DDS) {
  82. sig_ADD_CORES_DDS_handler(sender_id);
  83. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  84. } else if (sig_read_ar[0] == SIG_REM_CORES_DDS) {
  85. sig_REM_CORES_DDS_handler(sender_id);
  86. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  87. } else if (sig_read_ar[0] == SIG_APPOINT_WORK) {
  88. sig_APPOINT_WORK_handler(sender_id);
  89. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  90. } else if (sig_read_ar[0] == SIG_CHECK_REM_TIME) {
  91. sig_CHECK_REM_TIME_handler(sender_id);
  92. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  93. } else if (sig_read_ar[0] == SIG_FINISH) {
  94. sig_FINISH_handler(sender_id);
  95. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  96. } else if (sig_read_ar[0] == SIG_REJECT) {
  97. sig_REJECT_handler(sender_id);
  98. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  99. } else if (sig_read_ar[0] == SIG_APP_TERMINATED) {
  100. num_apps_terminated++;
  101. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  102. fflush(log_file);
  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[0] != NO_SIG) {
  105. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[0],sender_id);
  106. fflush(log_file);
  107. }
  108. sig = sig_read_ar[0];
  109. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  110. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  111. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  112. if (sig_read_ar[1] != sig_read_ar[0]) {
  113. fprintf(log_file,"I have a second signal %d first sig was %d not it is %d\n",sig_read_ar[1],sig,sig_read_ar[0]);
  114. fflush(log_file);
  115. /*if (sig_read_ar[1] == SIG_INIT) {
  116. sig_INIT_handler(sender_id);
  117. } else if (sig_read_ar[1] == SIG_ACK) {
  118. sig_ACK_handler(sender_id);
  119. } else if (sig_read_ar[1] == SIG_TERMINATE) {
  120. sig_TERMINATE_handler(sender_id);
  121. } else if (sig_read_ar[1] == SIG_IDAG_FIND_IDAGS) {
  122. sig_IDAG_FIND_IDAGS_handler(sender_id);
  123. } else if (sig_read_ar[1] == SIG_REQ_DDS) {
  124. sig_REQ_DDS_handler(sender_id);
  125. } else if (sig_read_ar[1] == SIG_REQ_CORES) {
  126. sig_REQ_CORES_handler(sender_id);
  127. } else if (sig_read_ar[1] == SIG_REP_OFFERS) {
  128. sig_REP_OFFERS_handler(sender_id);
  129. } else if (sig_read_ar[1] == SIG_INIT_AGENT) {
  130. sig_INIT_AGENT_handler(sender_id);
  131. } else if (sig_read_ar[1] == SIG_ADD_CORES_DDS) {
  132. sig_ADD_CORES_DDS_handler(sender_id);
  133. } else if (sig_read_ar[1] == SIG_REM_CORES_DDS) {
  134. sig_REM_CORES_DDS_handler(sender_id);
  135. } else if (sig_read_ar[1] == SIG_APPOINT_WORK) {
  136. sig_APPOINT_WORK_handler(sender_id);
  137. } else if (sig_read_ar[1] == SIG_CHECK_REM_TIME) {
  138. sig_CHECK_REM_TIME_handler(sender_id);
  139. } else */
  140. if (sig_read_ar[1] == SIG_INIT_APP) {
  141. sig_INIT_APP_handler(sender_id);
  142. } else if (sig_read_ar[1] == SIG_FINISH) {
  143. sig_FINISH_handler(sender_id);
  144. } else if (sig_read_ar[1] == SIG_REJECT) {
  145. sig_REJECT_handler(sender_id);
  146. } else if (sig_read_ar[1] == SIG_APP_TERMINATED) {
  147. num_apps_terminated++;
  148. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  149. fflush(log_file);
  150. } else if (sig_read_ar[1] != NO_SIG) {
  151. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[1],sender_id);
  152. fflush(log_file);
  153. }
  154. }
  155. if (sig_read_ar[0] != NO_SIG) {
  156. //sig = sig_read_ar[0];
  157. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  158. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  159. if (sig == sig_read_ar[0]) {
  160. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  161. fprintf(log_file,"I invalidated sender_ids %d signals\n",sender_id);
  162. fflush(log_file);
  163. }
  164. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  165. }
  166. }
  167. }
  168. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  169. //fprintf(log_file,"I leave\n");
  170. //fflush(log_file);
  171. }