IB/mthca: Add client reregister event generation
Change the mthca snoop of MADs that set PortInfo to check if the SM has set the client reregister bit, and if it has, generate a client reregister event. If the bit is not set, just generate a LID change event as usual. Signed-off-by: Leonid Arsh <leonida@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
da2ab62ab5
Коммит
12bbb2b7be
|
@ -114,14 +114,22 @@ static void smp_snoop(struct ib_device *ibdev,
|
||||||
mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) &&
|
mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) &&
|
||||||
mad->mad_hdr.method == IB_MGMT_METHOD_SET) {
|
mad->mad_hdr.method == IB_MGMT_METHOD_SET) {
|
||||||
if (mad->mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO) {
|
if (mad->mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO) {
|
||||||
|
struct ib_port_info *pinfo =
|
||||||
|
(struct ib_port_info *) ((struct ib_smp *) mad)->data;
|
||||||
|
|
||||||
mthca_update_rate(to_mdev(ibdev), port_num);
|
mthca_update_rate(to_mdev(ibdev), port_num);
|
||||||
update_sm_ah(to_mdev(ibdev), port_num,
|
update_sm_ah(to_mdev(ibdev), port_num,
|
||||||
be16_to_cpup((__be16 *) (mad->data + 58)),
|
be16_to_cpu(pinfo->lid),
|
||||||
(*(u8 *) (mad->data + 76)) & 0xf);
|
pinfo->neighbormtu_mastersmsl & 0xf);
|
||||||
|
|
||||||
event.device = ibdev;
|
event.device = ibdev;
|
||||||
event.event = IB_EVENT_LID_CHANGE;
|
|
||||||
event.element.port_num = port_num;
|
event.element.port_num = port_num;
|
||||||
|
|
||||||
|
if(pinfo->clientrereg_resv_subnetto & 0x80)
|
||||||
|
event.event = IB_EVENT_CLIENT_REREGISTER;
|
||||||
|
else
|
||||||
|
event.event = IB_EVENT_LID_CHANGE;
|
||||||
|
|
||||||
ib_dispatch_event(&event);
|
ib_dispatch_event(&event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче