Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Copies the answer back to the calling thread
- */
- if(message->origptr)
- {
- if((uintptr_t)message->origptr < vmm::user_space_base || (uintptr_t)message->origptr > vmm::user_space_limit)
- {
- }
- else
- {
- uintptr_t alignedptr = align4k((uintptr_t)message->origptr);
- uintptr_t phys = caller->proc->memmgr->get_context()->phys(alignedptr);
- if(phys)
- {
- uintptr_t virt = kernel::vmmgr().alloc_vonly(bytes_to_pages(sizeof(kernel::ipc::answer_t)));
- if(virt)
- {
- if(kernel::vmmgr().map(virt, phys, vmm::present | vmm::write, bytes_to_pages(sizeof(kernel::ipc::answer_t))))
- {
- memcpy((void*)(virt + offset4k((uintptr_t)message->origptr)), (void*)&message->answer, sizeof(kernel::ipc::answer_t));
- }
- kernel::vmmgr().umap(virt, bytes_to_pages(sizeof(kernel::ipc::answer_t)));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement