I think I may have a 'simple' solution to notifying the target core of DMA write completion - assuming that's what's wanted.
Have the destination buffer structured with a flag positioned at the very end. As DMA transfers are sequential across blocks of transferred data then this flag will be the last location to be written to. Assuming ( potential ) source cores are aware of this structure then :
(A) The target core sets the flag state to 'ready for data', as and when it pleases.
(B) Source cores can initiate DMA writes of data to the buffer by first checking the flag's value for 'ready for data' state.
(C) The flag is then set by the source core to a 'data being transferred' state.
(D) Must use TESTSET to achieve B and C here, atomically accessing and maybe changing in case there is a race with another source core also wanting to write to the destination buffer. This implies the 'ready for data' state of the flag must be of value binary zero.
(E) You need a 'data being transferred' state on your flag as (a) the target core ought know it's request is being fulfilled, but that the contents aren't yet valid, and (b) any other potential source cores must be excluded from writes to the buffer, else you may get overwrites during transfer ( one source core chasing the tail of another through the buffer, mutual overwrites etc depending on core locations and eMesh state and timings .. UGH ).
(F) The final address in the source buffer contains the flag value 'transfer complete', this is hence written to the flag's location in the destination buffer as the final act in the DMA transfer. Which is the desired behaviour !
(G) The target core checks the flag for 'transfer complete' state - busy waiting, non-blocking, whatever you like - before using the data in the buffer.
Rinse, lather, repeat .....
Cheers, Mike.
( edit ) You want DMA writes at source, with the status of that sampled locally on the target, as this fully leverages the asymmetry of the eMesh .....