linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / infiniband / hw / mthca / mthca_mad.c
index 45e106f..1229c60 100644 (file)
@@ -49,30 +49,6 @@ enum {
        MTHCA_VENDOR_CLASS2 = 0xa
 };
 
-static int mthca_update_rate(struct mthca_dev *dev, u8 port_num)
-{
-       struct ib_port_attr *tprops = NULL;
-       int                  ret;
-
-       tprops = kmalloc(sizeof *tprops, GFP_KERNEL);
-       if (!tprops)
-               return -ENOMEM;
-
-       ret = ib_query_port(&dev->ib_dev, port_num, tprops);
-       if (ret) {
-               printk(KERN_WARNING "ib_query_port failed (%d) for %s port %d\n",
-                      ret, dev->ib_dev.name, port_num);
-               goto out;
-       }
-
-       dev->rate[port_num - 1] = tprops->active_speed *
-                                 ib_width_enum_to_int(tprops->active_width);
-
-out:
-       kfree(tprops);
-       return ret;
-}
-
 static void update_sm_ah(struct mthca_dev *dev,
                         u8 port_num, u16 lid, u8 sl)
 {
@@ -114,22 +90,13 @@ static void smp_snoop(struct ib_device *ibdev,
             mad->mad_hdr.mgmt_class  == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) &&
            mad->mad_hdr.method     == IB_MGMT_METHOD_SET) {
                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);
                        update_sm_ah(to_mdev(ibdev), port_num,
-                                    be16_to_cpu(pinfo->sm_lid),
-                                    pinfo->neighbormtu_mastersmsl & 0xf);
+                                    be16_to_cpup((__be16 *) (mad->data + 58)),
+                                    (*(u8 *) (mad->data + 76)) & 0xf);
 
                        event.device           = ibdev;
+                       event.event            = IB_EVENT_LID_CHANGE;
                        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);
                }
 
@@ -142,19 +109,6 @@ static void smp_snoop(struct ib_device *ibdev,
        }
 }
 
-static void node_desc_override(struct ib_device *dev,
-                              struct ib_mad *mad)
-{
-       if ((mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED ||
-            mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) &&
-           mad->mad_hdr.method == IB_MGMT_METHOD_GET_RESP &&
-           mad->mad_hdr.attr_id == IB_SMP_ATTR_NODE_DESC) {
-               mutex_lock(&to_mdev(dev)->cap_mask_mutex);
-               memcpy(((struct ib_smp *) mad)->data, dev->node_desc, 64);
-               mutex_unlock(&to_mdev(dev)->cap_mask_mutex);
-       }
-}
-
 static void forward_trap(struct mthca_dev *dev,
                         u8 port_num,
                         struct ib_mad *mad)
@@ -253,10 +207,8 @@ int mthca_process_mad(struct ib_device *ibdev,
                return IB_MAD_RESULT_FAILURE;
        }
 
-       if (!out_mad->mad_hdr.status) {
+       if (!out_mad->mad_hdr.status)
                smp_snoop(ibdev, port_num, in_mad);
-               node_desc_override(ibdev, out_mad);
-       }
 
        /* set return bit in status of directed route responses */
        if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)
@@ -279,7 +231,6 @@ int mthca_create_agents(struct mthca_dev *dev)
 {
        struct ib_mad_agent *agent;
        int p, q;
-       int ret;
 
        spin_lock_init(&dev->sm_lock);
 
@@ -289,23 +240,11 @@ int mthca_create_agents(struct mthca_dev *dev)
                                                      q ? IB_QPT_GSI : IB_QPT_SMI,
                                                      NULL, 0, send_handler,
                                                      NULL, NULL);
-                       if (IS_ERR(agent)) {
-                               ret = PTR_ERR(agent);
+                       if (IS_ERR(agent))
                                goto err;
-                       }
                        dev->send_agent[p][q] = agent;
                }
 
-
-       for (p = 1; p <= dev->limits.num_ports; ++p) {
-               ret = mthca_update_rate(dev, p);
-               if (ret) {
-                       mthca_err(dev, "Failed to obtain port %d rate."
-                                 " aborting.\n", p);
-                       goto err;
-               }
-       }
-
        return 0;
 
 err:
@@ -314,10 +253,10 @@ err:
                        if (dev->send_agent[p][q])
                                ib_unregister_mad_agent(dev->send_agent[p][q]);
 
-       return ret;
+       return PTR_ERR(agent);
 }
 
-void __devexit mthca_free_agents(struct mthca_dev *dev)
+void mthca_free_agents(struct mthca_dev *dev)
 {
        struct ib_mad_agent *agent;
        int p, q;