[ofa-general] Re: OpenSM prints guids twice
Yevgeny Kliteynik
kliteyn at dev.mellanox.co.il
Sun Oct 14 01:53:33 PDT 2007
Sasha Khapyorsky wrote:
> Hi Yevgeny,
>
> On 10:07 Mon 08 Oct , Yevgeny Kliteynik wrote:
>> I noticed the following problem a while ago - when the whole
>> duplicated guids and re-reading files mails were running,
>> but never had a chance to dig deeper.
>>
>> Anyway, sometimes OpenSM 'sees' the same HCA ports twice.
>
> It is just how osm_state_mgr_report() is done - it iterates nodes by
> port_guid_tbl map and not by node_guid_tbl. I have no idea why it was
> done this way, likely just a bug. Anyway the patch below fixes this.
Great, thanks.
-- Yevgeny
> Sasha
>
>
> commit b272c11fa910And07a0b02d5544ea75507f69515c
> Author: Sasha Khapyorsky <sashak at voltaire.com>
> Date: Mon Oct 8 15:02:54 2007 +0200
>
> opensm: report message fix
>
> Generate OpenSM report message node by node (not by ports), and so
> eliminate duplicated nodes reporting.
>
> Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
>
> diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
> index e5ef89d..4646c8a 100644
> --- a/opensm/opensm/osm_state_mgr.c
> +++ b/opensm/opensm/osm_state_mgr.c
> @@ -1169,7 +1169,6 @@ static void __osm_topology_file_create(IN osm_state_mgr_t * const p_mgr)
> static void __osm_state_mgr_report(IN osm_state_mgr_t * const p_mgr)
> {
> const cl_qmap_t *p_tbl;
> - const osm_port_t *p_port;
> const osm_node_t *p_node;
> const osm_physp_t *p_physp;
> const osm_physp_t *p_remote_physp;
> @@ -1191,23 +1190,22 @@ static void __osm_state_mgr_report(IN osm_state_mgr_t * const p_mgr)
> ": # : Sta : LID : LMC : MTU : LWA : LSA : Port GUID "
> " : Neighbor Port (Port #)\n");
>
> - p_tbl = &p_mgr->p_subn->port_guid_tbl;
> + p_tbl = &p_mgr->p_subn->node_guid_tbl;
>
> /*
> * Hold lock non-exclusively while we perform these read-only operations.
> */
>
> CL_PLOCK_ACQUIRE(p_mgr->p_lock);
> - p_port = (osm_port_t *) cl_qmap_head(p_tbl);
> - while (p_port != (osm_port_t *) cl_qmap_end(p_tbl)) {
> + p_node = (osm_node_t *) cl_qmap_head(p_tbl);
> + while (p_node != (osm_node_t *) cl_qmap_end(p_tbl)) {
> if (osm_log_is_active(p_mgr->p_log, OSM_LOG_DEBUG)) {
> osm_log(p_mgr->p_log, OSM_LOG_DEBUG,
> "__osm_state_mgr_report: "
> - "Processing port 0x%016" PRIx64 "\n",
> - cl_ntoh64(osm_port_get_guid(p_port)));
> + "Processing node 0x%016" PRIx64 "\n",
> + cl_ntoh64(osm_node_get_node_guid(p_node)));
> }
>
> - p_node = p_port->p_node;
> node_type = osm_node_get_type(p_node);
> if (node_type == IB_NODE_TYPE_SWITCH)
> start_port = 0;
> @@ -1311,7 +1309,7 @@ static void __osm_state_mgr_report(IN osm_state_mgr_t * const p_mgr)
> osm_log_printf(p_mgr->p_log, OSM_LOG_VERBOSE,
> "------------------------------------------------------"
> "------------------------------------------------\n");
> - p_port = (osm_port_t *) cl_qmap_next(&p_port->map_item);
> + p_node = (osm_node_t *) cl_qmap_next(&p_node->map_item);
> }
>
> CL_PLOCK_RELEASE(p_mgr->p_lock);
>
More information about the general
mailing list