scc_signals.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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;
  8. RCCE_FLAG_STATUS receiver_status;
  9. char error_str[64];
  10. //printf("I am %d and i enter here with target_ID %d\n",node_id,target_ID);
  11. for (i=0; i<LINE_SIZE; i++)
  12. sig_array_local[i] = sig;
  13. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  14. //if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai signals of 0 are disabled\n",ME);
  15. while (receiver_status == RCCE_FLAG_UNSET)
  16. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  17. error = RCCE_put((t_vcharp)(&sig_array[node_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), target_ID);
  18. if (error != RCCE_SUCCESS) {
  19. RCCE_error_string(error, error_str, &str_len);
  20. printf("I am %d and i got an error in put with descr %s\n",node_id,error_str);
  21. }
  22. return error;
  23. }
  24. void scc_signals_check(void) {
  25. int sig_read_ar[LINE_SIZE], sig_array_local[LINE_SIZE], error, str_len, sender_id, i;
  26. RCCE_FLAG_STATUS receiver_status;
  27. char error_str[64];
  28. for (i=0; i<LINE_SIZE; i++) sig_array_local[i] = NO_SIG;
  29. //disable signals here
  30. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  31. for (sender_id=0; sender_id<NUES; sender_id++) {
  32. if (sender_id == node_id) continue;
  33. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  34. if (error != RCCE_SUCCESS) {
  35. RCCE_error_string(error, error_str, &str_len);
  36. printf("I am %d and i got an error in get from %d with descr %s\n",node_id,sender_id,error_str);
  37. } else {
  38. if (sig_read_ar[0] == SIG_INIT) {
  39. sig_INIT_handler(sender_id);
  40. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  41. } else if (sig_read_ar[0] == SIG_ACK) {
  42. sig_ACK_handler(sender_id);
  43. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  44. } else if (sig_read_ar[0] == SIG_TERMINATE) {
  45. sig_TERMINATE_handler(sender_id);
  46. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  47. } else if (sig_read_ar[0] == SIG_INIT_APP) {
  48. sig_INIT_APP_handler(sender_id);
  49. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  50. } else if (sig_read_ar[0] == SIG_IDAG_FIND_IDAGS) {
  51. sig_IDAG_FIND_IDAGS_handler(sender_id);
  52. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  53. } else if (sig_read_ar[0] == SIG_REQ_DDS) {
  54. sig_REQ_DDS_handler(sender_id);
  55. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  56. } else if (sig_read_ar[0] == SIG_REQ_CORES) {
  57. sig_REQ_CORES_handler(sender_id);
  58. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  59. } else if (sig_read_ar[0] == SIG_REP_OFFERS) {
  60. sig_REP_OFFERS_handler(sender_id);
  61. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  62. } else if (sig_read_ar[0] == SIG_INIT_AGENT) {
  63. sig_INIT_AGENT_handler(sender_id);
  64. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  65. } else if (sig_read_ar[0] == SIG_REJECT) {
  66. sig_REJECT_handler(sender_id);
  67. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  68. } else if (sig_read_ar[0] == SIG_APP_TERMINATED) {
  69. num_apps_terminated++;
  70. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  71. fflush(log_file);
  72. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  73. } else if (sig_read_ar[0] != NO_SIG) printf("I am %d and i read smth different than no_sig which is %d from %d\n",node_id,sig_read_ar[0],sender_id);
  74. }
  75. }
  76. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  77. }