[Myrinet] A problem with GM/MCP event-driven mechanism!
geoge_zhang <[email protected]>
| Newsgroups | gmane.network.myrinet.general |
|---|---|
| Message-ID | <[email protected]> |
Hi:
Our group would like to know more about the details of GM/MCP event-driven
mechanism. There are two detailed probmems:-).
It's said in the document and the source files, the Mark_LABEL macros
in /mcp directory refer to the handlers correspondint to events. With each
value of GM_STATE and ISR/IMR registers, the dispatch() finds the corresponding
handler by searching gm_event_index[ISR&IMR|state] and then handles the event.
In specific, for START_SEND_EVENT, MARK_LABEL (L_send__start_sending_chunk_, LZERO)
is called to handle the event, and it switches between L_send__start_sending_chunk_0/1
to handler data in send_chunk[0]/[1], there are two problems with this process:
1.If the SDMA engine enqueues a send for the SEND engine, The L_send__start_sending_chunk_0/1
runs continuesly using the following code:
smp = gm.send_chunk[LZERO].smp;
#if GM_ENABLE_CRC32
smh = gm.send_chunk[LZERO].smh;
#endif
sml = gm.send_chunk[LZERO].smlt;
It seems that the SDMA just stores the send mesg in send_chunk[0]/[1] and sets the
smp/smlt,but it doesn't clear the gm.send_chunk[LZERO].smp/smlt. Then the mesg stored
in send_chunk[0]/[1] are send each time L_send__start_sending_chunk called (that is,the sml
is set) ? It seems impossible, but what's the problem ?
2. It's said that when the GM_STATE is set using NOTICE_NO(SEND_PENDING), the START_SEND_EVENT
cann't happen, and so the L_send__start_sending_chunk_0/1 couldn't be called.
But in our program, after the GM_STATE is set using NOTICE_NO(SEND_PENDING) when the ACK
mesg is received, the START_SEND_EVENT still happens and L_send__start_sending_chunk_0/1
still called. Then what's the problem ?
Sorry to give these trivial problems, and it may be confusing. But we really need help,
and any help and information of the mechanism of GM/mcp event-driven is appreciated.
Thanks:-).
Your Geoge.