(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) |