L 5.21:  Indirect strings in do_long_ipc second part

(Revision 0  5 December 2000)

 

overview    This  section  is the second part of processing of the indirect strings part of memory messages. It does a simple sanity check, copies the strings from sender's buffer to receiver's buffer with interrupts enabled and stores the number of direct words copied in the result word.

on entry	rcv_hdr	mapped via XKSSEG to receiver's msg hdr
		snd_hdr pointer to sender's message header
data	L4_IPC_REMSGCUT	     0xE0 (7 in error code in result word dope)
	USER_ADDRESS_TOP     0x0000010000000000 (1 TB)
	L4_MAX_STRING_SIZE   4x1024x1024 (4 MB)
	TID_THREAD_MASK	     0000376000 (7 bit thread number field in tid)
	TID_THREAD_SHIFT     10 (shift to get thread # in lo order bit positions)
	RECV_WINDOW_SIZE     16*1024*1024 (16MB per sender thread window size)
	RECV_WINDOW_BASE     0x4000 0000 0000 0000
	
        
167-172 initialize string pointers to point at ith send and receive strings (receive string pointer address computation is same as for fpages and message headers)
173 initialize j to size of ith indirect send string - 1
174-176 store mapped base address of receiver's window in receiver's address space of receiver's ith  indirect string in sender's tcb and flush old window mapping
177 CP0<IE> <-- 1 (enable interrupts)
178-181 copy ith sender indirect string to ith sender indirect string buffer
182 CP0<IE> <-- 0 (disable interrupts)
183,184 restore mapping window address in tcb to value for message buffer - so receiver's string dopes (in receiver's message buffer) can be accessed in next loop iteration
(originally set this on l84 and saved as local variable on sender's stack at l148)
and flush old mappings
185 end of indirect string copying
186 store of indirect strings copied in result word
187 end of "if there exists indirect strings" (line 126)
188 end of "if receive message header within bounds" (line 75)
189-193 if  receive message header not within bounds return with "message truncated" error code
194 end of "if send message header within bounds" (line 61)
195-198 if  receive message header not within bounds store "message truncated" error code in result word
199 end of "if send buffer specified"
200-203 if necessary flush tlb entry for temporary window
204,205 return result message dope (and end of routine that started on line 5 of L5.15)