[IBAL] Summary: Ill-defined mechanism of event propagation.[mlnx: 4412]
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 2 Jun 2009 17:32:41 +0000 (17:32 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Tue, 2 Jun 2009 17:32:41 +0000 (17:32 +0000)
commit6f7653ca8223d9113a34bc33bbdd59aee9896ea2
treed58fdde6ead43f87bac7198a76ad2afeb6c48864
parent45b0518c688a9a4046cef242311e3248a6bd17c8
[IBAL] Summary: Ill-defined mechanism of event propagation.[mlnx: 4412]

Bug description and reproduction:
1. Connect to machines (A and B) via IB switch
2. Run subnet manager (say, opensm) on B
3. Kill opensm and clear arp tables
4. Rerun opensm - ping will not longer work
5. That's because new opensm instance will clear old multicast groups, and side A will be not aware about opensm restart and will not request to join new MCAST group

Explanations:
There are 2 types of events relevant in our case: PnP and AE.
The problem had happened due to:
1. During opensm restart, port will generate AE event: IB_EVENT_LID_CHANGE or (in other cases)  IB_EVENT_CLIENT_REREGISTER
These events will be generated even in the case when SM was restarted, but LID will not actually change.

2. All PnP events were handled properly; but these events were mapped to IB_AE_FATAL
This patch fixes it and maps IB_EVENT_* events to appropriate IB_AE_* events and then to IB_PNP_* events

3. unction force_smi_poll() will now update it's subscribers about LID change event iff LID was changed.
So, we still have the problem when opensm was restarted and no one of the port attributes was changed.

This patch generated appropriate IB_PNP event to resolve this issue.

Signed off by: Xalex

git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2226 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
core/al/al_ci_ca.h
core/al/al_ci_ca_shared.c
core/al/al_pnp.h
core/al/kernel/al_ci_ca.c
core/al/kernel/al_pnp.c
inc/iba/ib_al.h