Changeset 416 for trunk/kernel/kern/rpc.c
- Timestamp:
- Jan 4, 2018, 10:05:47 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/kern/rpc.c
r415 r416 94 94 /////////////////////////////////////// 95 95 void rpc_send( cxy_t server_cxy, 96 rpc_desc_t * rpc, 97 bool_t block ) 96 rpc_desc_t * rpc ) 98 97 { 99 98 error_t error; … … 106 105 rpc->lid = core->lid; 107 106 108 printk("\n @@@ enter %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",109 __FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);110 111 107 // build an extended pointer on the RPC descriptor 112 108 xptr_t desc_xp = XPTR( local_cxy , rpc ); … … 137 133 dev_pic_send_ipi( server_cxy , core->lid ); 138 134 139 // wait RPC completion if blocking135 // wait RPC completion before returning if blocking RPC 140 136 // - busy waiting policy during kernel_init, or if threads cannot yield 141 137 // - block and deschedule in all other cases 142 if ( block)138 if ( rpc->blocking ) 143 139 { 144 140 if( (this->type == THREAD_IDLE) || (thread_can_yield() == false) ) // busy waiting … … 178 174 dev_pic_ack_ipi(); 179 175 } 180 181 printk("\n @@@ exit %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",182 __FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);183 184 176 } // end rpc_send() 185 177 … … 244 236 hal_atomic_add( &LOCAL_CLUSTER->rpc_threads , 1 ); 245 237 246 grpc_dmsg("\n[DBG] %s : core [%x,%d] creates a new RPC thread %x / cycle %d\n",247 __FUNCTION__ , local_cxy , core->lid , thread ->trdid , hal_time_stamp() );238 grpc_dmsg("\n[DBG] %s : core [%x,%d] creates a new RPC thread %x / trdid %x / cycle %d\n", 239 __FUNCTION__ , local_cxy , core->lid , thread , thread->trdid , hal_time_stamp() ); 248 240 249 241 } 250 242 } 251 243 } 252 253 //@@@254 sched_display( 0 );255 //@@@256 244 257 245 grpc_dmsg("\n[DBG] %s : core[%x,%d] / interrupted thread %s deschedules / cycle %d\n", … … 279 267 rpc_desc_t * desc_ptr; // RPC request local pointer 280 268 uint32_t index; // RPC request index 281 uint32_t responses; // number of responses received by client282 269 thread_t * thread_ptr; // local pointer on client thread 283 270 lid_t core_lid; // local index of client core 271 bool_t blocking; // blocking RPC when true 284 272 285 273 // makes RPC thread not preemptable … … 319 307 desc_ptr = (rpc_desc_t *)GET_PTR( desc_xp ); 320 308 321 // get rpc index from RPC descriptor 322 index = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->index ) ); 323 324 printk("\n @@@ in %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n", 325 __FUNCTION__ , desc_cxy , desc_ptr , index , &desc_ptr->index ); 326 309 // get RPC <index> & <blocking> fields from RPC descriptor 310 index = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->index ) ); 311 blocking = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->blocking ) ); 312 327 313 grpc_dmsg("\n[DBG] %s : core[%x,%d] / RPC thread %x / starts rpc %d / cycle %d\n", 328 314 __FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , (uint32_t)hal_get_cycles() ); … … 334 320 __FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , hal_time_stamp() ); 335 321 336 // increment handled RPC counter322 // increment handled RPCs counter 337 323 count++; 338 324 339 // decrement response counter in RPC descriptor 340 responses = hal_remote_atomic_add(XPTR( desc_cxy, &desc_ptr->response ), -1);341 342 // unblock client thread and send IPI to client core if last response343 if( responses == 1 )344 { 345 // get pointer on client thread and unblock it325 // decrement response counter in RPC descriptor if blocking 326 if( blocking ) 327 { 328 // decrement responses counter in RPC descriptor 329 hal_remote_atomic_add(XPTR( desc_cxy, &desc_ptr->response ), -1); 330 331 // unblock client thread 346 332 thread_ptr = (thread_t *)hal_remote_lpt(XPTR(desc_cxy,&desc_ptr->thread)); 347 333 thread_unblock( XPTR(desc_cxy,thread_ptr) , THREAD_BLOCKED_RPC ); … … 363 349 // release rpc_fifo ownership if not lost 364 350 if( rpc_fifo->owner == this->trdid ) rpc_fifo->owner = 0; 365 } 351 352 } // end if RPC fifo 366 353 367 354 // sucide if too many RPC threads in cluster … … 412 399 rpc.index = RPC_PMEM_GET_PAGES; 413 400 rpc.response = 1; 401 rpc.blocking = true; 414 402 415 403 // set input arguments in RPC descriptor … … 417 405 418 406 // register RPC request in remote RPC fifo (blocking function) 419 rpc_send( cxy , &rpc , true);407 rpc_send( cxy , &rpc ); 420 408 421 409 // get output arguments from RPC descriptor … … 470 458 rpc.index = RPC_PMEM_RELEASE_PAGES; 471 459 rpc.response = 1; 460 rpc.blocking = true; 472 461 473 462 // set input arguments in RPC descriptor … … 475 464 476 465 // register RPC request in remote RPC fifo (blocking function) 477 rpc_send( cxy , &rpc , true);466 rpc_send( cxy , &rpc ); 478 467 479 468 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 526 515 rpc.index = RPC_PROCESS_MAKE_EXEC; 527 516 rpc.response = 1; 517 rpc.blocking = true; 528 518 529 519 // set input arguments in RPC descriptor … … 531 521 532 522 // register RPC request in remote RPC fifo (blocking function) 533 rpc_send( cxy , &rpc , true);523 rpc_send( cxy , &rpc ); 534 524 535 525 // get output arguments from RPC descriptor … … 597 587 rpc.index = RPC_PROCESS_MAKE_FORK; 598 588 rpc.response = 1; 589 rpc.blocking = true; 599 590 600 591 // set input arguments in RPC descriptor … … 603 594 604 595 // register RPC request in remote RPC fifo (blocking function) 605 rpc_send( cxy , &rpc , true);596 rpc_send( cxy , &rpc ); 606 597 607 598 // get output arguments from RPC descriptor … … 658 649 /////////////////////////////////////////////////// 659 650 void rpc_process_make_exit_client( cxy_t cxy, 660 p rocess_t * process,651 pid_t pid, 661 652 uint32_t status ) 662 653 { … … 671 662 rpc.index = RPC_PROCESS_MAKE_EXIT; 672 663 rpc.response = 1; 664 rpc.blocking = true; 673 665 674 666 // set input arguments in RPC descriptor 675 rpc.args[0] = (uint64_t) (intptr_t)process;667 rpc.args[0] = (uint64_t)pid; 676 668 rpc.args[1] = (uint64_t)status; 677 669 678 670 // register RPC request in remote RPC fifo (blocking function) 679 rpc_send( cxy , &rpc , true);671 rpc_send( cxy , &rpc ); 680 672 681 673 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 691 683 CURRENT_THREAD->core->lid , hal_time_stamp() ); 692 684 693 p rocess_t * process;694 uint32_t 685 pid_t pid; 686 uint32_t status; 695 687 696 688 // get client cluster identifier and pointer on RPC descriptor … … 699 691 700 692 // get arguments from RPC descriptor 701 p rocess = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );702 status = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );693 pid = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) ); 694 status = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) ); 703 695 704 696 // call local kernel function 705 process_make_exit( p rocess, status );697 process_make_exit( pid , status ); 706 698 707 699 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 716 708 /////////////////////////////////////////////////// 717 709 void rpc_process_make_kill_client( cxy_t cxy, 718 p rocess_t * process,710 pid_t pid, 719 711 uint32_t sig_id ) 720 712 { … … 729 721 rpc.index = RPC_PROCESS_MAKE_KILL; 730 722 rpc.response = 1; 723 rpc.blocking = true; 731 724 732 725 // set input arguments in RPC descriptor 733 rpc.args[0] = (uint64_t) (intptr_t)process;726 rpc.args[0] = (uint64_t)pid; 734 727 rpc.args[1] = (uint64_t)sig_id; 735 728 736 729 // register RPC request in remote RPC fifo (blocking function) 737 rpc_send( cxy , &rpc , true);730 rpc_send( cxy , &rpc ); 738 731 739 732 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 749 742 CURRENT_THREAD->core->lid , hal_time_stamp() ); 750 743 751 p rocess_t * process;744 pid_t pid; 752 745 uint32_t sig_id; 753 746 … … 757 750 758 751 // get arguments from RPC descriptor 759 p rocess = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );760 sig_id = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );752 pid = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) ); 753 sig_id = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) ); 761 754 762 755 // call local kernel function 763 process_make_exit( p rocess, sig_id );756 process_make_exit( pid , sig_id ); 764 757 765 758 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 791 784 rpc.index = RPC_THREAD_USER_CREATE; 792 785 rpc.response = 1; 786 rpc.blocking = true; 793 787 794 788 // set input arguments in RPC descriptor … … 799 793 800 794 // register RPC request in remote RPC fifo (blocking function) 801 rpc_send( cxy , &rpc , true);795 rpc_send( cxy , &rpc ); 802 796 803 797 // get output arguments from RPC descriptor … … 883 877 rpc.index = RPC_THREAD_KERNEL_CREATE; 884 878 rpc.response = 1; 879 rpc.blocking = true; 885 880 886 881 // set input arguments in RPC descriptor … … 890 885 891 886 // register RPC request in remote RPC fifo (blocking function) 892 rpc_send( cxy , &rpc , true);887 rpc_send( cxy , &rpc ); 893 888 894 889 // get output arguments from RPC descriptor … … 956 951 rpc.index = RPC_THREAD_KILL; 957 952 rpc.response = 1; 953 rpc.blocking = true; 958 954 959 955 // set input arguments in RPC descriptor … … 961 957 962 958 // register RPC request in remote RPC fifo (blocking function) 963 rpc_send( cxy , &rpc , true);959 rpc_send( cxy , &rpc ); 964 960 965 961 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 997 993 ///////////////////////////////////////////////////////////////////////////////////////// 998 994 999 /////////////////////////////////////////////////// 1000 void rpc_process_sigaction_client( cxy_t cxy, 1001 process_t * process, // in 1002 uint32_t sigaction, // in 1003 xptr_t rsp_xp, // in 1004 xptr_t client_xp ) // in 1005 { 1006 sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n", 1007 __FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD , 1008 local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() ); 1009 1010 // initialise RPC descriptor header 1011 rpc_desc_t rpc; 1012 rpc.index = RPC_PROCESS_SIGACTION; 1013 1014 // set input arguments in RPC descriptor 1015 rpc.args[0] = (uint64_t)(intptr_t)process; 1016 rpc.args[1] = (uint64_t)sigaction; 1017 rpc.args[2] = (uint64_t)rsp_xp; 1018 rpc.args[3] = (uint64_t)client_xp; 1019 1020 // register RPC request in remote RPC fifo (non blocking) 1021 rpc_send( cxy , &rpc , false ); 1022 1023 sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n", 1024 __FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD , 1025 local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() ); 995 //////////////////////////////////////////////////// 996 void rpc_process_sigaction_client( cxy_t cxy, 997 rpc_desc_t * rpc_ptr ) 998 { 999 sigaction_dmsg("\n[DBG] %s : enter to %s process %x in cluster %x / cycle %d\n", 1000 __FUNCTION__ , process_action_str( (uint32_t)rpc_ptr->args[0] ) , 1001 ((process_t *)(intptr_t)rpc_ptr->args[1])->pid , cxy , (uint32_t)hal_get_cycles() ); 1002 1003 // register RPC request in remote RPC fifo 1004 rpc_send( cxy , rpc_ptr ); 1005 1006 sigaction_dmsg("\n[DBG] %s : exit after %s process %x in cluster %x / cycle %d\n", 1007 __FUNCTION__ , process_action_str( (uint32_t)rpc_ptr->args[0] ) , 1008 ((process_t *)(intptr_t)rpc_ptr->args[1])->pid , cxy , (uint32_t)hal_get_cycles() ); 1026 1009 } 1027 1010 … … 1029 1012 void rpc_process_sigaction_server( xptr_t xp ) 1030 1013 { 1031 process_t * process; 1032 uint32_t action; 1033 xptr_t rsp_xp; 1034 xptr_t client_xp; 1035 1036 // get client cluster identifier and pointer on RPC descriptor 1037 cxy_t client_cxy = (cxy_t)GET_CXY( xp ); 1038 rpc_desc_t * desc = (rpc_desc_t *)GET_PTR( xp ); 1014 process_t * process; // pointer on local process descriptor 1015 uint32_t action; // sigaction index 1016 thread_t * client_ptr; // local pointer on client thread in client cluster 1017 cxy_t client_cxy; // client cluster identifier 1018 xptr_t client_xp; // extended pointer on client thread 1019 core_t * client_core; // local pointer on core running the client thread 1020 rpc_desc_t * rpc; // local pointer on rpc descriptor in client cluster 1021 1022 // get client cluster identifier and pointer on RPC descriptor 1023 client_cxy = (cxy_t)GET_CXY( xp ); 1024 rpc = (rpc_desc_t *)GET_PTR( xp ); 1039 1025 1040 1026 // get arguments from RPC descriptor 1041 process = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) ); 1042 action = (uint32_t) hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) ); 1043 rsp_xp = (xptr_t) hal_remote_lwd( XPTR( client_cxy , &desc->args[2] ) ); 1044 client_xp = (xptr_t) hal_remote_lwd( XPTR( client_cxy , &desc->args[3] ) ); 1045 1046 sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n", 1047 __FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD , 1048 local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() ); 1027 action = (uint32_t) hal_remote_lwd( XPTR( client_cxy , &rpc->args[0] ) ); 1028 process = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &rpc->args[1] ) ); 1029 client_ptr = (thread_t *)hal_remote_lpt( XPTR( client_cxy , &rpc->thread ) ); 1030 1031 // build extended pointer on client thread 1032 client_xp = XPTR( client_cxy , client_ptr ); 1033 1034 sigaction_dmsg("\n[DBG] %s : enter to %s process %x / cycle %d\n", 1035 __FUNCTION__ , process_action_str( action ) , process->pid , (uint32_t)hal_get_cycles() ); 1049 1036 1050 1037 // call relevant kernel function 1051 if (action == DELETE_ALL_THREADS ) process_delete ( process , rsp_xp , client_xp ); 1052 else if (action == BLOCK_ALL_THREADS ) process_block ( process , rsp_xp , client_xp ); 1053 else if (action == UNBLOCK_ALL_THREADS ) process_unblock( process , rsp_xp , client_xp ); 1054 1055 sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n", 1056 __FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD , 1057 local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() ); 1038 if (action == DELETE_ALL_THREADS ) process_delete ( process , client_xp ); 1039 else if (action == BLOCK_ALL_THREADS ) process_block ( process , client_xp ); 1040 else if (action == UNBLOCK_ALL_THREADS ) process_unblock( process ); 1041 1042 // decrement the responses counter in RPC descriptor, 1043 // unblock the client thread only if it is the last response. 1044 if( hal_remote_atomic_add( XPTR( client_cxy , &rpc->response ) , -1 ) == 1 ) 1045 { 1046 client_core = (core_t *)hal_remote_lpt( XPTR( client_cxy , &client_ptr->core ) ); 1047 thread_unblock( client_xp , THREAD_BLOCKED_RPC ); 1048 dev_pic_send_ipi( client_cxy , client_core->lid ); 1049 } 1050 1051 sigaction_dmsg("\n[DBG] %s : exit after %s process %x / cycle %d\n", 1052 __FUNCTION__ , process_action_str( action ) , process->pid , (uint32_t)hal_get_cycles() ); 1058 1053 } 1059 1054 … … 1085 1080 rpc.index = RPC_VFS_INODE_CREATE; 1086 1081 rpc.response = 1; 1082 rpc.blocking = true; 1087 1083 1088 1084 // set input arguments in RPC descriptor … … 1097 1093 1098 1094 // register RPC request in remote RPC fifo (blocking function) 1099 rpc_send( cxy , &rpc , true);1095 rpc_send( cxy , &rpc ); 1100 1096 1101 1097 // get output values from RPC descriptor … … 1178 1174 rpc.index = RPC_VFS_INODE_DESTROY; 1179 1175 rpc.response = 1; 1176 rpc.blocking = true; 1180 1177 1181 1178 // set input arguments in RPC descriptor … … 1183 1180 1184 1181 // register RPC request in remote RPC fifo (blocking function) 1185 rpc_send( cxy , &rpc , true);1182 rpc_send( cxy , &rpc ); 1186 1183 1187 1184 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 1236 1233 rpc.index = RPC_VFS_DENTRY_CREATE; 1237 1234 rpc.response = 1; 1235 rpc.blocking = true; 1238 1236 1239 1237 // set input arguments in RPC descriptor … … 1243 1241 1244 1242 // register RPC request in remote RPC fifo (blocking function) 1245 rpc_send( cxy , &rpc , true);1243 rpc_send( cxy , &rpc ); 1246 1244 1247 1245 // get output values from RPC descriptor … … 1315 1313 rpc.index = RPC_VFS_DENTRY_DESTROY; 1316 1314 rpc.response = 1; 1315 rpc.blocking = true; 1317 1316 1318 1317 // set input arguments in RPC descriptor … … 1320 1319 1321 1320 // register RPC request in remote RPC fifo (blocking function) 1322 rpc_send( cxy , &rpc , true);1321 rpc_send( cxy , &rpc ); 1323 1322 1324 1323 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 1373 1372 rpc.index = RPC_VFS_FILE_CREATE; 1374 1373 rpc.response = 1; 1374 rpc.blocking = true; 1375 1375 1376 1376 // set input arguments in RPC descriptor … … 1379 1379 1380 1380 // register RPC request in remote RPC fifo (blocking function) 1381 rpc_send( cxy , &rpc , true);1381 rpc_send( cxy , &rpc ); 1382 1382 1383 1383 // get output values from RPC descriptor … … 1442 1442 rpc.index = RPC_VFS_FILE_DESTROY; 1443 1443 rpc.response = 1; 1444 rpc.blocking = true; 1444 1445 1445 1446 // set input arguments in RPC descriptor … … 1447 1448 1448 1449 // register RPC request in remote RPC fifo (blocking function) 1449 rpc_send( cxy , &rpc , true);1450 rpc_send( cxy , &rpc ); 1450 1451 1451 1452 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 1499 1500 rpc.index = RPC_VFS_INODE_LOAD; 1500 1501 rpc.response = 1; 1502 rpc.blocking = true; 1501 1503 1502 1504 // set input arguments in RPC descriptor … … 1506 1508 1507 1509 // register RPC request in remote RPC fifo (blocking function) 1508 rpc_send( cxy , &rpc , true);1510 rpc_send( cxy , &rpc ); 1509 1511 1510 1512 // get output values from RPC descriptor … … 1573 1575 rpc.index = RPC_VFS_MAPPER_LOAD_ALL; 1574 1576 rpc.response = 1; 1577 rpc.blocking = true; 1575 1578 1576 1579 // set input arguments in RPC descriptor … … 1578 1581 1579 1582 // register RPC request in remote RPC fifo (blocking function) 1580 rpc_send( cxy , &rpc , true);1583 rpc_send( cxy , &rpc ); 1581 1584 1582 1585 // get output values from RPC descriptor … … 1638 1641 rpc.index = RPC_FATFS_GET_CLUSTER; 1639 1642 rpc.response = 1; 1643 rpc.blocking = true; 1640 1644 1641 1645 // set input arguments in RPC descriptor … … 1645 1649 1646 1650 // register RPC request in remote RPC fifo 1647 rpc_send( cxy , &rpc , true);1651 rpc_send( cxy , &rpc ); 1648 1652 1649 1653 // get output argument from rpc descriptor … … 1711 1715 rpc.index = RPC_VMM_GET_VSEG; 1712 1716 rpc.response = 1; 1717 rpc.blocking = true; 1713 1718 1714 1719 // set input arguments in RPC descriptor … … 1717 1722 1718 1723 // register RPC request in remote RPC fifo (blocking function) 1719 rpc_send( cxy , &rpc , true);1724 rpc_send( cxy , &rpc ); 1720 1725 1721 1726 // get output argument from rpc descriptor … … 1786 1791 rpc.index = RPC_VMM_GET_PTE; 1787 1792 rpc.response = 1; 1793 rpc.blocking = true; 1788 1794 1789 1795 // set input arguments in RPC descriptor … … 1793 1799 1794 1800 // register RPC request in remote RPC fifo (blocking function) 1795 rpc_send( cxy , &rpc , true);1801 rpc_send( cxy , &rpc ); 1796 1802 1797 1803 // get output argument from rpc descriptor … … 1860 1866 rpc.index = RPC_THREAD_USER_CREATE; 1861 1867 rpc.response = 1; 1868 rpc.blocking = true; 1862 1869 1863 1870 // set input arguments in RPC descriptor … … 1865 1872 1866 1873 // register RPC request in remote RPC fifo (blocking function) 1867 rpc_send( cxy , &rpc , true);1874 rpc_send( cxy , &rpc ); 1868 1875 1869 1876 // get output arguments from RPC descriptor … … 1923 1930 rpc.index = RPC_THREAD_USER_CREATE; 1924 1931 rpc.response = 1; 1932 rpc.blocking = true; 1925 1933 1926 1934 // set input arguments in RPC descriptor … … 1929 1937 1930 1938 // register RPC request in remote RPC fifo (blocking function) 1931 rpc_send( cxy , &rpc , true);1939 rpc_send( cxy , &rpc ); 1932 1940 1933 1941 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 1986 1994 rpc.index = RPC_MAPPER_MOVE_BUFFER; 1987 1995 rpc.response = 1; 1996 rpc.blocking = true; 1988 1997 1989 1998 // set input arguments in RPC descriptor … … 1996 2005 1997 2006 // register RPC request in remote RPC fifo (blocking function) 1998 rpc_send( cxy , &rpc , true);2007 rpc_send( cxy , &rpc ); 1999 2008 2000 2009 // get output values from RPC descriptor … … 2083 2092 rpc.index = RPC_MAPPER_GET_PAGE; 2084 2093 rpc.response = 1; 2094 rpc.blocking = true; 2085 2095 2086 2096 // set input arguments in RPC descriptor … … 2089 2099 2090 2100 // register RPC request in remote RPC fifo (blocking function) 2091 rpc_send( cxy , &rpc , true);2101 rpc_send( cxy , &rpc ); 2092 2102 2093 2103 // get output values from RPC descriptor … … 2151 2161 rpc.index = RPC_VMM_CREATE_VSEG; 2152 2162 rpc.response = 1; 2163 rpc.blocking = true; 2153 2164 2154 2165 // set input arguments in RPC descriptor … … 2163 2174 2164 2175 // register RPC request in remote RPC fifo (blocking function) 2165 rpc_send( cxy , &rpc , true);2176 rpc_send( cxy , &rpc ); 2166 2177 2167 2178 // get output values from RPC descriptor … … 2230 2241 rpc.index = RPC_SCHED_DISPLAY; 2231 2242 rpc.response = 1; 2243 rpc.blocking = true; 2232 2244 2233 2245 // set input arguments in RPC descriptor … … 2235 2247 2236 2248 // register RPC request in remote RPC fifo (blocking function) 2237 rpc_send( cxy , &rpc , true);2249 rpc_send( cxy , &rpc ); 2238 2250 2239 2251 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n", … … 2282 2294 rpc.index = RPC_VMM_SET_COW; 2283 2295 rpc.response = 1; 2296 rpc.blocking = true; 2284 2297 2285 2298 // set input arguments in RPC descriptor … … 2287 2300 2288 2301 // register RPC request in remote RPC fifo (blocking function) 2289 rpc_send( cxy , &rpc , true);2302 rpc_send( cxy , &rpc ); 2290 2303 2291 2304 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
Note: See TracChangeset
for help on using the changeset viewer.