Hi Yevgeny,

On 15:33 Mon 17 Dec     , Yevgeny Kliteynik wrote:
> If a heavy sweep requested during idle queue processing, OSM continues
> to process it till the end and only then notices the heavy sweep request.
> In some cases this might leave a topology change unhandled for several
> minutes.

Could you provide more details about such cases?

As far as I know the idle queue is used only for multicast re-routing.
If so, it is interesting by itself why it takes minutes and where. Is
where MCG join/leave storm? Or single re-routing cycle takes minutes?

Sasha

> 
> Signed-off-by:  Yevgeny Kliteynik <[EMAIL PROTECTED]>
> ---
>  opensm/opensm/osm_state_mgr.c |   31 ++++++++++++++++++++++++-------
>  1 files changed, 24 insertions(+), 7 deletions(-)
> 
> diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
> index 5c39f11..6ee5ee6 100644
> --- a/opensm/opensm/osm_state_mgr.c
> +++ b/opensm/opensm/osm_state_mgr.c
> @@ -1607,13 +1607,30 @@ void osm_state_mgr_process(IN osm_state_mgr_t * const 
> p_mgr,
>                               /* CALL the done function */
>                               __process_idle_time_queue_done(p_mgr);
> 
> -                             /*
> -                              * Set the signal to 
> OSM_SIGNAL_IDLE_TIME_PROCESS
> -                              * so that the next element in the queue gets 
> processed
> -                              */
> -
> -                             signal = OSM_SIGNAL_IDLE_TIME_PROCESS;
> -                             p_mgr->state = OSM_SM_STATE_PROCESS_REQUEST;
> +                             if (p_mgr->p_subn->force_immediate_heavy_sweep) 
> {
> +                                     /*
> +                                      * Do not read next item from the idle 
> queue.
> +                                      * Immediate heavy sweep is requested, 
> so it's
> +                                      * more important.
> +                                      * Besides, there is a chance that 
> after the
> +                                      * heavy sweep complition, idle queue 
> processing
> +                                      * that SM would have performed here 
> will be obsolete.
> +                                      */
> +                                     if (osm_log_is_active(p_mgr->p_log, 
> OSM_LOG_DEBUG))
> +                                             osm_log(p_mgr->p_log, 
> OSM_LOG_DEBUG,
> +                                             "osm_state_mgr_process: "
> +                                             "interrupting idle time queue 
> processing - heavy sweep requested\n");
> +                                     signal = OSM_SIGNAL_NONE:
> +                                     p_mgr->state = OSM_SM_STATE_IDLE;
> +                             }
> +                             else {
> +                                     /*
> +                                      * Set the signal to 
> OSM_SIGNAL_IDLE_TIME_PROCESS
> +                                      * so that the next element in the 
> queue gets processed
> +                                      */
> +                                     signal = OSM_SIGNAL_IDLE_TIME_PROCESS;
> +                                     p_mgr->state = 
> OSM_SM_STATE_PROCESS_REQUEST;
> +                             }
>                               break;
> 
>                       default:
> -- 
> 1.5.1.4
> 
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to