L 5.17:  Processing mappings in do_long_ipc

(Revision 1 - 29  November 2000)

 

overview    This is the second section that processes fpage mappings. It processes the sender's fpages setting up mappings so that these VA ranges in the sender's 1 TB user space point to the appropriate parts of the receiver's fpage in the receiver's 1 TB user space. vm_map is called to do virtually all of the work.

35-37 if there is a receive fpage, then go through the save registers two at a time looking for send fpage pairs  - there can be up to 4 send fpage pairs
(send fpages are in pairs, the one at the high order address is the fpage and the one at the low order address is the "hot spot")
38-44 if the high order save register contains a send fpage
call vm_map, passing it the source and destination tcbs, the send fpage pairs and the receive fpage (i.e., the address in XKSSEG that has been mapped to the receiver's fpage) vm_map does the mapping (see Professor Heiser's API slides 21- 25). The end result of this is that address ranges in the sender's user 1 TB address space are mapped to corresponding ranges in the receiver's user 1 TB address space.  On return a bit is set in  r (considered as a structure this time) to indicate the mapping has been made.
45-51 else, if there are no more send fpages, clear recv_fpage and goto line 52
52-57 this code is intended to handle the case where there is a receive fpage and more than four send fpages, i.e., there are fpages in the memory buffer - it's not implemented in the current L4/MIPS
58 end of mappings started on line16 if the send descriptor indicated there were send fpages