From 23ec04c48c522b0beaa3d6b91f19770d78000ce1 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 6 Jul 2021 18:39:57 +0200 Subject: bsps/irq: bsp_interrupt_get_affinity() Return a status code for bsp_interrupt_get_affinity(). Update #3269. --- bsps/include/dev/irq/arm-gic-irq.h | 2 +- bsps/powerpc/qoriq/include/bsp/irq.h | 2 +- bsps/powerpc/qoriq/irq/irq.c | 6 ++++-- bsps/powerpc/t32mppc/include/bsp/irq.h | 3 ++- bsps/riscv/griscv/include/bsp/irq.h | 2 +- bsps/riscv/griscv/irq/irq.c | 4 +++- bsps/riscv/riscv/include/bsp/irq.h | 2 +- bsps/riscv/riscv/irq/irq.c | 4 +++- bsps/shared/dev/irq/arm-gicv2.c | 3 ++- bsps/shared/dev/irq/arm-gicv3.c | 3 ++- bsps/shared/irq/irq-affinity.c | 20 ++++++++++++-------- bsps/sparc/erc32/include/bsp/irq.h | 3 ++- bsps/sparc/leon3/include/bsp/irq.h | 2 +- bsps/sparc/leon3/start/eirq.c | 3 ++- bsps/sparc/shared/irq/irq-shared.c | 2 +- 15 files changed, 38 insertions(+), 23 deletions(-) diff --git a/bsps/include/dev/irq/arm-gic-irq.h b/bsps/include/dev/irq/arm-gic-irq.h index 5ce9d54684..730d792ce4 100644 --- a/bsps/include/dev/irq/arm-gic-irq.h +++ b/bsps/include/dev/irq/arm-gic-irq.h @@ -74,7 +74,7 @@ void bsp_interrupt_set_affinity( const Processor_mask *affinity ); -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ); diff --git a/bsps/powerpc/qoriq/include/bsp/irq.h b/bsps/powerpc/qoriq/include/bsp/irq.h index cf46832045..6618d54190 100644 --- a/bsps/powerpc/qoriq/include/bsp/irq.h +++ b/bsps/powerpc/qoriq/include/bsp/irq.h @@ -385,7 +385,7 @@ void bsp_interrupt_set_affinity( const Processor_mask *affinity ); -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ); diff --git a/bsps/powerpc/qoriq/irq/irq.c b/bsps/powerpc/qoriq/irq/irq.c index 19921270ab..f6f04806ed 100644 --- a/bsps/powerpc/qoriq/irq/irq.c +++ b/bsps/powerpc/qoriq/irq/irq.c @@ -64,7 +64,7 @@ void bsp_interrupt_set_affinity( rtems_interrupt_lock_release(&lock, &lock_context); } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -75,6 +75,7 @@ void bsp_interrupt_get_affinity( ev_int_get_config(vector, &config, &priority, &destination); _Processor_mask_From_uint32_t(affinity, destination, 0); + return RTEMS_SUCCESSFUL; } rtems_status_code bsp_interrupt_get_attributes( @@ -323,7 +324,7 @@ void bsp_interrupt_set_affinity( src_cfg->dr = _Processor_mask_To_uint32_t(affinity, 0); } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -331,6 +332,7 @@ void bsp_interrupt_get_affinity( volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); _Processor_mask_From_uint32_t(affinity, src_cfg->dr, 0); + return RTEMS_SUCCESSFUL; } static void pic_vector_enable(rtems_vector_number vector, uint32_t msk) diff --git a/bsps/powerpc/t32mppc/include/bsp/irq.h b/bsps/powerpc/t32mppc/include/bsp/irq.h index 998eadf3df..c0c374edae 100644 --- a/bsps/powerpc/t32mppc/include/bsp/irq.h +++ b/bsps/powerpc/t32mppc/include/bsp/irq.h @@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity( (void) affinity; } -RTEMS_INLINE_ROUTINE void bsp_interrupt_get_affinity( +RTEMS_INLINE_ROUTINE rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) { (void) vector; _Processor_mask_From_index( affinity, 0 ); + return RTEMS_SUCCESSFUL; } #ifdef __cplusplus diff --git a/bsps/riscv/griscv/include/bsp/irq.h b/bsps/riscv/griscv/include/bsp/irq.h index f9e280d5a9..1df7b4b584 100644 --- a/bsps/riscv/griscv/include/bsp/irq.h +++ b/bsps/riscv/griscv/include/bsp/irq.h @@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity( const Processor_mask *affinity ); -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ); diff --git a/bsps/riscv/griscv/irq/irq.c b/bsps/riscv/griscv/irq/irq.c index 454de414d7..5c52238753 100644 --- a/bsps/riscv/griscv/irq/irq.c +++ b/bsps/riscv/griscv/irq/irq.c @@ -156,7 +156,7 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) return RTEMS_SUCCESSFUL; } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -171,6 +171,8 @@ void bsp_interrupt_get_affinity( _Processor_mask_Set(affinity, cpu_index); } } + + return RTEMS_SUCCESSFUL; } void bsp_interrupt_set_affinity( diff --git a/bsps/riscv/riscv/include/bsp/irq.h b/bsps/riscv/riscv/include/bsp/irq.h index 306988d5e3..03fe8ced3a 100644 --- a/bsps/riscv/riscv/include/bsp/irq.h +++ b/bsps/riscv/riscv/include/bsp/irq.h @@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity( const Processor_mask *affinity ); -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ); diff --git a/bsps/riscv/riscv/irq/irq.c b/bsps/riscv/riscv/irq/irq.c index 000f5c5dea..098a482cd4 100644 --- a/bsps/riscv/riscv/irq/irq.c +++ b/bsps/riscv/riscv/irq/irq.c @@ -399,7 +399,7 @@ void bsp_interrupt_set_affinity( } } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -433,4 +433,6 @@ void bsp_interrupt_get_affinity( _Processor_mask_Assign(affinity, _SMP_Get_online_processors()); } } + + return RTEMS_SUCCESSFUL; } diff --git a/bsps/shared/dev/irq/arm-gicv2.c b/bsps/shared/dev/irq/arm-gicv2.c index 7094db718e..14d0d9d886 100644 --- a/bsps/shared/dev/irq/arm-gicv2.c +++ b/bsps/shared/dev/irq/arm-gicv2.c @@ -303,7 +303,7 @@ void bsp_interrupt_set_affinity( gic_id_set_targets(dist, vector, targets); } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -312,6 +312,7 @@ void bsp_interrupt_get_affinity( uint8_t targets = gic_id_get_targets(dist, vector); _Processor_mask_From_uint32_t(affinity, targets, 0); + return RTEMS_SUCCESSFUL; } void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets) diff --git a/bsps/shared/dev/irq/arm-gicv3.c b/bsps/shared/dev/irq/arm-gicv3.c index 227f3ebac9..13efc7f107 100644 --- a/bsps/shared/dev/irq/arm-gicv3.c +++ b/bsps/shared/dev/irq/arm-gicv3.c @@ -410,7 +410,7 @@ void bsp_interrupt_set_affinity( gic_id_set_targets(dist, vector, targets); } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) @@ -419,6 +419,7 @@ void bsp_interrupt_get_affinity( uint8_t targets = gic_id_get_targets(dist, vector); _Processor_mask_From_uint32_t(affinity, targets, 0); + return RTEMS_SUCCESSFUL; } void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets) diff --git a/bsps/shared/irq/irq-affinity.c b/bsps/shared/irq/irq-affinity.c index d2214cf6ec..ecc2516a26 100644 --- a/bsps/shared/irq/irq-affinity.c +++ b/bsps/shared/irq/irq-affinity.c @@ -72,6 +72,7 @@ rtems_status_code rtems_interrupt_get_affinity( cpu_set_t *affinity ) { + rtems_status_code sc; Processor_mask set; Processor_mask_Copy_status status; @@ -79,20 +80,23 @@ rtems_status_code rtems_interrupt_get_affinity( return RTEMS_INVALID_ADDRESS; } - if (!bsp_interrupt_is_valid_vector(vector)) { - return RTEMS_INVALID_ID; - } + _Processor_mask_Zero( &set ); + if ( bsp_interrupt_is_valid_vector( vector ) ) { #if defined(RTEMS_SMP) - bsp_interrupt_get_affinity(vector, &set); + sc = bsp_interrupt_get_affinity( vector, &set ); #else - _Processor_mask_From_index(&set, 0); + _Processor_mask_From_index( &set, 0 ); + sc = RTEMS_SUCCESSFUL; #endif + } else { + sc = RTEMS_INVALID_ID; + } - status = _Processor_mask_To_cpu_set_t(&set, affinity_size, affinity); - if (status != PROCESSOR_MASK_COPY_LOSSLESS) { + status = _Processor_mask_To_cpu_set_t( &set, affinity_size, affinity ); + if ( sc == RTEMS_SUCCESSFUL && status != PROCESSOR_MASK_COPY_LOSSLESS ) { return RTEMS_INVALID_SIZE; } - return RTEMS_SUCCESSFUL; + return sc; } diff --git a/bsps/sparc/erc32/include/bsp/irq.h b/bsps/sparc/erc32/include/bsp/irq.h index 9e0f511b55..17ab3c09f0 100644 --- a/bsps/sparc/erc32/include/bsp/irq.h +++ b/bsps/sparc/erc32/include/bsp/irq.h @@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity( (void) affinity; } -RTEMS_INLINE_ROUTINE void bsp_interrupt_get_affinity( +RTEMS_INLINE_ROUTINE rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) { (void) vector; _Processor_mask_From_index( affinity, 0 ); + return RTEMS_SUCCESSFUL; } #endif /* LIBBSP_ERC32_IRQ_CONFIG_H */ diff --git a/bsps/sparc/leon3/include/bsp/irq.h b/bsps/sparc/leon3/include/bsp/irq.h index 5a53246a6b..baf97815e3 100644 --- a/bsps/sparc/leon3/include/bsp/irq.h +++ b/bsps/sparc/leon3/include/bsp/irq.h @@ -34,7 +34,7 @@ void bsp_interrupt_set_affinity( const Processor_mask *affinity ); -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ); diff --git a/bsps/sparc/leon3/start/eirq.c b/bsps/sparc/leon3/start/eirq.c index 54b45759ab..87e3000536 100644 --- a/bsps/sparc/leon3/start/eirq.c +++ b/bsps/sparc/leon3/start/eirq.c @@ -226,11 +226,12 @@ void bsp_interrupt_set_affinity( LEON3_IRQCTRL_RELEASE(&lock_context); } -void bsp_interrupt_get_affinity( +rtems_status_code bsp_interrupt_get_affinity( rtems_vector_number vector, Processor_mask *affinity ) { *affinity = leon3_interrupt_affinities[vector]; + return RTEMS_SUCCESSFUL; } #endif diff --git a/bsps/sparc/shared/irq/irq-shared.c b/bsps/sparc/shared/irq/irq-shared.c index c332cdb082..68ad57d723 100644 --- a/bsps/sparc/shared/irq/irq-shared.c +++ b/bsps/sparc/shared/irq/irq-shared.c @@ -16,7 +16,7 @@ static inline int bsp_irq_cpu(int irq) #if defined(RTEMS_SMP) Processor_mask affinity; - bsp_interrupt_get_affinity((rtems_vector_number) irq, &affinity); + (void) bsp_interrupt_get_affinity((rtems_vector_number) irq, &affinity); return (int) _Processor_mask_Find_last_set(&affinity); #elif defined(LEON3) return _LEON3_Get_current_processor(); -- cgit v1.2.3