bsps/riscv: Fix software interrupt dispatching

In SMP configurations, there may be no software interrupt handler
installed when the software interrupt is processed.  Add the new
interrupt handler dispatch variant
bsp_interrupt_handler_dispatch_unlikely() for this special case.
This commit is contained in:
Sebastian Huber
2022-11-11 13:58:24 +01:00
parent 55318d17b4
commit 77c8d822c3
2 changed files with 33 additions and 2 deletions

View File

@@ -457,6 +457,35 @@ static inline void bsp_interrupt_dispatch_entries(
} while ( RTEMS_PREDICT_FALSE( entry != NULL ) );
}
/**
* @brief Sequentially calls all interrupt handlers installed at the vector.
*
* This function does not validate the vector number. If the vector number is
* out of range, then the behaviour is undefined.
*
* The function assumes that no handlers are installed at the vector. In this
* case, no operation is performed.
*
* In uniprocessor configurations, you can call this function within every
* context which can be disabled via rtems_interrupt_local_disable().
*
* In SMP configurations, you can call this function in every context.
*
* @param vector is the vector number.
*/
static inline void bsp_interrupt_handler_dispatch_unlikely(
rtems_vector_number vector
)
{
const rtems_interrupt_entry *entry;
entry = bsp_interrupt_entry_load_first( vector );
if ( RTEMS_PREDICT_FALSE( entry != NULL ) ) {
bsp_interrupt_dispatch_entries( entry );
}
}
/**
* @brief Sequentially calls all interrupt handlers installed at the vector.
*