bsps/irq: bsp_interrupt_get_affinity()

Return a status code for bsp_interrupt_get_affinity().

Update #3269.
This commit is contained in:
Sebastian Huber
2021-07-06 18:39:57 +02:00
parent 32f5a195d7
commit 23ec04c48c
15 changed files with 41 additions and 26 deletions

View File

@@ -74,7 +74,7 @@ void bsp_interrupt_set_affinity(
const Processor_mask *affinity const Processor_mask *affinity
); );
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
); );

View File

@@ -385,7 +385,7 @@ void bsp_interrupt_set_affinity(
const Processor_mask *affinity const Processor_mask *affinity
); );
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
); );

View File

@@ -64,7 +64,7 @@ void bsp_interrupt_set_affinity(
rtems_interrupt_lock_release(&lock, &lock_context); rtems_interrupt_lock_release(&lock, &lock_context);
} }
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -75,6 +75,7 @@ void bsp_interrupt_get_affinity(
ev_int_get_config(vector, &config, &priority, &destination); ev_int_get_config(vector, &config, &priority, &destination);
_Processor_mask_From_uint32_t(affinity, destination, 0); _Processor_mask_From_uint32_t(affinity, destination, 0);
return RTEMS_SUCCESSFUL;
} }
rtems_status_code bsp_interrupt_get_attributes( 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); 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, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -331,6 +332,7 @@ void bsp_interrupt_get_affinity(
volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector);
_Processor_mask_From_uint32_t(affinity, src_cfg->dr, 0); _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) static void pic_vector_enable(rtems_vector_number vector, uint32_t msk)

View File

@@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity(
(void) 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, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
{ {
(void) vector; (void) vector;
_Processor_mask_From_index( affinity, 0 ); _Processor_mask_From_index( affinity, 0 );
return RTEMS_SUCCESSFUL;
} }
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity(
const Processor_mask *affinity const Processor_mask *affinity
); );
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
); );

View File

@@ -156,7 +156,7 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -171,6 +171,8 @@ void bsp_interrupt_get_affinity(
_Processor_mask_Set(affinity, cpu_index); _Processor_mask_Set(affinity, cpu_index);
} }
} }
return RTEMS_SUCCESSFUL;
} }
void bsp_interrupt_set_affinity( void bsp_interrupt_set_affinity(

View File

@@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity(
const Processor_mask *affinity const Processor_mask *affinity
); );
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
); );

View File

@@ -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, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -433,4 +433,6 @@ void bsp_interrupt_get_affinity(
_Processor_mask_Assign(affinity, _SMP_Get_online_processors()); _Processor_mask_Assign(affinity, _SMP_Get_online_processors());
} }
} }
return RTEMS_SUCCESSFUL;
} }

View File

@@ -303,7 +303,7 @@ void bsp_interrupt_set_affinity(
gic_id_set_targets(dist, vector, targets); gic_id_set_targets(dist, vector, targets);
} }
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -312,6 +312,7 @@ void bsp_interrupt_get_affinity(
uint8_t targets = gic_id_get_targets(dist, vector); uint8_t targets = gic_id_get_targets(dist, vector);
_Processor_mask_From_uint32_t(affinity, targets, 0); _Processor_mask_From_uint32_t(affinity, targets, 0);
return RTEMS_SUCCESSFUL;
} }
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets) void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)

View File

@@ -410,7 +410,7 @@ void bsp_interrupt_set_affinity(
gic_id_set_targets(dist, vector, targets); gic_id_set_targets(dist, vector, targets);
} }
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
@@ -419,6 +419,7 @@ void bsp_interrupt_get_affinity(
uint8_t targets = gic_id_get_targets(dist, vector); uint8_t targets = gic_id_get_targets(dist, vector);
_Processor_mask_From_uint32_t(affinity, targets, 0); _Processor_mask_From_uint32_t(affinity, targets, 0);
return RTEMS_SUCCESSFUL;
} }
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets) void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)

View File

@@ -72,6 +72,7 @@ rtems_status_code rtems_interrupt_get_affinity(
cpu_set_t *affinity cpu_set_t *affinity
) )
{ {
rtems_status_code sc;
Processor_mask set; Processor_mask set;
Processor_mask_Copy_status status; Processor_mask_Copy_status status;
@@ -79,20 +80,23 @@ rtems_status_code rtems_interrupt_get_affinity(
return RTEMS_INVALID_ADDRESS; return RTEMS_INVALID_ADDRESS;
} }
if (!bsp_interrupt_is_valid_vector(vector)) { _Processor_mask_Zero( &set );
return RTEMS_INVALID_ID;
}
if ( bsp_interrupt_is_valid_vector( vector ) ) {
#if defined(RTEMS_SMP) #if defined(RTEMS_SMP)
bsp_interrupt_get_affinity(vector, &set); sc = bsp_interrupt_get_affinity( vector, &set );
#else #else
_Processor_mask_From_index( &set, 0 ); _Processor_mask_From_index( &set, 0 );
sc = RTEMS_SUCCESSFUL;
#endif #endif
} else {
sc = RTEMS_INVALID_ID;
}
status = _Processor_mask_To_cpu_set_t( &set, affinity_size, affinity ); status = _Processor_mask_To_cpu_set_t( &set, affinity_size, affinity );
if (status != PROCESSOR_MASK_COPY_LOSSLESS) { if ( sc == RTEMS_SUCCESSFUL && status != PROCESSOR_MASK_COPY_LOSSLESS ) {
return RTEMS_INVALID_SIZE; return RTEMS_INVALID_SIZE;
} }
return RTEMS_SUCCESSFUL; return sc;
} }

View File

@@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity(
(void) 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, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
{ {
(void) vector; (void) vector;
_Processor_mask_From_index( affinity, 0 ); _Processor_mask_From_index( affinity, 0 );
return RTEMS_SUCCESSFUL;
} }
#endif /* LIBBSP_ERC32_IRQ_CONFIG_H */ #endif /* LIBBSP_ERC32_IRQ_CONFIG_H */

View File

@@ -34,7 +34,7 @@ void bsp_interrupt_set_affinity(
const Processor_mask *affinity const Processor_mask *affinity
); );
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
); );

View File

@@ -226,11 +226,12 @@ void bsp_interrupt_set_affinity(
LEON3_IRQCTRL_RELEASE(&lock_context); LEON3_IRQCTRL_RELEASE(&lock_context);
} }
void bsp_interrupt_get_affinity( rtems_status_code bsp_interrupt_get_affinity(
rtems_vector_number vector, rtems_vector_number vector,
Processor_mask *affinity Processor_mask *affinity
) )
{ {
*affinity = leon3_interrupt_affinities[vector]; *affinity = leon3_interrupt_affinities[vector];
return RTEMS_SUCCESSFUL;
} }
#endif #endif

View File

@@ -16,7 +16,7 @@ static inline int bsp_irq_cpu(int irq)
#if defined(RTEMS_SMP) #if defined(RTEMS_SMP)
Processor_mask affinity; 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); return (int) _Processor_mask_Find_last_set(&affinity);
#elif defined(LEON3) #elif defined(LEON3)
return _LEON3_Get_current_processor(); return _LEON3_Get_current_processor();