This is the default provider of IPI for Cortex-M based processors. More...
Functions | |
void | os_ipi_sync_request () |
Request Inter-processor synchronization. | |
void | os_ipi_sync_release () |
Release cores waiting in inter-processor synchronization loop. | |
void | os_ipi_sync_probe () |
Check if inter-processor synchronization is requested. | |
This is the default provider of IPI for Cortex-M based processors.
This implementation provides the "slow" IPI, which means that there are no interrupts occupied and implementation relies on all cores running os_sched_yield() occasionally.
void os_ipi_sync_probe | ( | ) |
Check if inter-processor synchronization is requested.
Each core should call this function from time to time. If any other core calls for inter-processor synchronization, then core calling this function will be blocked in the call until the core which requested the synchronization doesn't release it.
void os_ipi_sync_release | ( | ) |
Release cores waiting in inter-processor synchronization loop.
This function will release all cores which are waiting in os_ipi_sync_probe() function waiting for core which requested synchronization to release it. Failure to call this function after os_ipi_sync_request() was called will result in permanent halt of all other system cores.
void os_ipi_sync_request | ( | ) |
Request Inter-processor synchronization.
This is minimalistic implementation for inter-processor synchronization request for Cortex-M processors. This implementation does not assume presence of any inter-processor interrupt mechanism. It assumes that each core checks for inter-processor sync every now and then. This function will block until all online cores call os_ipi_sync_probe(). By doing so all cores remain synchronized and it is guarranteed they will do nothing. Then this function returns.