Changeset 619 for trunk/kernel/libk/user_dir.c
- Timestamp:
- Feb 12, 2019, 1:15:47 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/libk/user_dir.c
r614 r619 286 286 printk("\n[ERROR] in %s : cannot map vpn %x in GPT\n", 287 287 __FUNCTION__, (vpn + page_id) ); 288 // use the non blocking RPC to delete the remote vseg 289 rpc_desc_t desc; 290 desc.index = RPC_VMM_DELETE_VSEG; 291 desc.responses = 1; 292 desc.thread = CURRENT_THREAD; 293 desc.lid = CURRENT_THREAD->core->lid; 294 desc.blocking = true; 295 desc.args[0] = ref_pid; 296 desc.args[1] = vpn << CONFIG_PPM_PAGE_SHIFT; 297 rpc_vmm_delete_vseg_client( ref_cxy , &desc ); 288 289 // delete the vseg 290 if( ref_cxy == local_cxy) vmm_delete_vseg( ref_pid, vpn<<CONFIG_PPM_PAGE_SHIFT ); 291 else rpc_vmm_delete_vseg_client( ref_cxy, ref_pid, vpn<<CONFIG_PPM_PAGE_SHIFT ); 292 298 293 // release the user_dir descriptor 299 294 req.type = KMEM_DIR; … … 387 382 lpid_t lpid; // process local index 388 383 rpc_desc_t rpc; // rpc descriptor 384 uint32_t responses; // response counter 389 385 390 386 // get pointers on calling process & thread … … 441 437 thread_block( XPTR( local_cxy , this ) , THREAD_BLOCKED_RPC ); 442 438 443 // initialize RPC descriptor shared fields 444 rpc.responses = 0; 439 // initialize responses counter 440 responses = 0; 441 442 // initialize a shared RPC descriptor 443 // can be shared, because no out arguments 444 rpc.rsp = &responses; 445 445 rpc.blocking = false; 446 446 rpc.index = RPC_VMM_DELETE_VSEG; … … 461 461 462 462 // atomically increment responses counter 463 hal_atomic_add( (void *)&rpc.responses , 1 ); 464 465 // call RPC 466 rpc_vmm_delete_vseg_client( process_cxy , &rpc ); 467 468 } // end list of copies 463 hal_atomic_add( &responses , 1 ); 464 465 // send RPC to target cluster 466 rpc_send( process_cxy , &rpc ); 467 } 469 468 470 469 // release the lock protecting process copies … … 472 471 473 472 // client thread deschedule 474 sched_yield("blocked on rpc_vmm_ unmap_vseg");473 sched_yield("blocked on rpc_vmm_delete_vseg"); 475 474 476 475 // restore IRQs
Note: See TracChangeset
for help on using the changeset viewer.