summaryrefslogtreecommitdiffstats
path: root/bsps/shared/irq/irq-affinity.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/shared/irq/irq-affinity.c')
-rw-r--r--bsps/shared/irq/irq-affinity.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/bsps/shared/irq/irq-affinity.c b/bsps/shared/irq/irq-affinity.c
index d8ac6d55c1..7e9250a948 100644
--- a/bsps/shared/irq/irq-affinity.c
+++ b/bsps/shared/irq/irq-affinity.c
@@ -3,14 +3,14 @@
/**
* @file
*
- * @ingroup bsp_interrupt
+ * @ingroup RTEMSImplClassicIntr
*
* @brief This source file contains the implementation of
* rtems_interrupt_get_affinity() and rtems_interrupt_set_affinity().
*/
/*
- * Copyright (C) 2017 embedded brains GmbH (http://www.embedded-brains.de)
+ * Copyright (C) 2017, 2022 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,7 +36,7 @@
#include <bsp/irq-generic.h>
-#include <rtems/score/processormask.h>
+#include <rtems/score/smpimpl.h>
rtems_status_code rtems_interrupt_set_affinity(
rtems_vector_number vector,
@@ -51,17 +51,22 @@ rtems_status_code rtems_interrupt_set_affinity(
return RTEMS_INVALID_ADDRESS;
}
- if (!bsp_interrupt_is_valid_vector(vector)) {
+ if ( !bsp_interrupt_is_valid_vector( vector ) ) {
return RTEMS_INVALID_ID;
}
- status = _Processor_mask_From_cpu_set_t(&set, affinity_size, affinity);
+ status = _Processor_mask_From_cpu_set_t( &set, affinity_size, affinity );
if ( !_Processor_mask_Is_at_most_partial_loss( status ) ) {
return RTEMS_INVALID_NUMBER;
}
+ _Processor_mask_And( &set, _SMP_Get_online_processors(), &set );
+ if ( _Processor_mask_Is_zero( &set ) ) {
+ return RTEMS_INVALID_NUMBER;
+ }
+
#if defined(RTEMS_SMP)
- return bsp_interrupt_set_affinity(vector, &set);
+ return bsp_interrupt_set_affinity( vector, &set );
#else
return RTEMS_SUCCESSFUL;
#endif