[PATCH][1/11] IB: simplify MAD code
From: Hal Rosenstock <[EMAIL PROTECTED]> Remove unneeded MAD agent registration by using a single agent for both directed-route and LID-routed MADs. Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]> Signed-off-by: Roland Dreier <[EMAIL PROTECTED]> --- linux-export.orig/drivers/infiniband/core/agent.c 2005-03-02 20:26:03.280776011 -0800 +++ linux-export/drivers/infiniband/core/agent.c2005-03-02 20:26:10.599187430 -0800 @@ -66,14 +66,13 @@ if (device) { list_for_each_entry(entry, _agent_port_list, port_list) { - if (entry->dr_smp_agent->device == device && + if (entry->smp_agent->device == device && entry->port_num == port_num) return entry; } } else { list_for_each_entry(entry, _agent_port_list, port_list) { - if ((entry->dr_smp_agent == mad_agent) || - (entry->lr_smp_agent == mad_agent) || + if ((entry->smp_agent == mad_agent) || (entry->perf_mgmt_agent == mad_agent)) return entry; } @@ -111,7 +110,7 @@ return 1; } - return smi_check_local_smp(port_priv->dr_smp_agent, smp); + return smi_check_local_smp(port_priv->smp_agent, smp); } static int agent_mad_send(struct ib_mad_agent *mad_agent, @@ -231,10 +230,8 @@ /* Get mad agent based on mgmt_class in MAD */ switch (mad->mad.mad.mad_hdr.mgmt_class) { case IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE: - mad_agent = port_priv->dr_smp_agent; - break; case IB_MGMT_CLASS_SUBN_LID_ROUTED: - mad_agent = port_priv->lr_smp_agent; + mad_agent = port_priv->smp_agent; break; case IB_MGMT_CLASS_PERF_MGMT: mad_agent = port_priv->perf_mgmt_agent; @@ -284,7 +281,6 @@ { int ret; struct ib_agent_port_private *port_priv; - struct ib_mad_reg_req reg_req; unsigned long flags; /* First, check if port already open for SMI */ @@ -308,35 +304,19 @@ spin_lock_init(_priv->send_list_lock); INIT_LIST_HEAD(_priv->send_posted_list); - /* Obtain MAD agent for directed route SM class */ - reg_req.mgmt_class = IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE; - reg_req.mgmt_class_version = 1; - - port_priv->dr_smp_agent = ib_register_mad_agent(device, port_num, - IB_QPT_SMI, - NULL, 0, - _send_handler, - NULL, NULL); + /* Obtain send only MAD agent for SM class (SMI QP) */ + port_priv->smp_agent = ib_register_mad_agent(device, port_num, +IB_QPT_SMI, +NULL, 0, + _send_handler, +NULL, NULL); - if (IS_ERR(port_priv->dr_smp_agent)) { - ret = PTR_ERR(port_priv->dr_smp_agent); + if (IS_ERR(port_priv->smp_agent)) { + ret = PTR_ERR(port_priv->smp_agent); goto error2; } - /* Obtain MAD agent for LID routed SM class */ - reg_req.mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED; - port_priv->lr_smp_agent = ib_register_mad_agent(device, port_num, - IB_QPT_SMI, - NULL, 0, - _send_handler, - NULL, NULL); - if (IS_ERR(port_priv->lr_smp_agent)) { - ret = PTR_ERR(port_priv->lr_smp_agent); - goto error3; - } - - /* Obtain MAD agent for PerfMgmt class */ - reg_req.mgmt_class = IB_MGMT_CLASS_PERF_MGMT; + /* Obtain send only MAD agent for PerfMgmt class (GSI QP) */ port_priv->perf_mgmt_agent = ib_register_mad_agent(device, port_num, IB_QPT_GSI, NULL, 0, @@ -344,15 +324,15 @@ NULL, NULL); if (IS_ERR(port_priv->perf_mgmt_agent)) { ret = PTR_ERR(port_priv->perf_mgmt_agent); - goto error4; + goto error3; } - port_priv->mr = ib_get_dma_mr(port_priv->dr_smp_agent->qp->pd, + port_priv->mr = ib_get_dma_mr(port_priv->smp_agent->qp->pd,
[PATCH][1/11] IB: simplify MAD code
From: Hal Rosenstock [EMAIL PROTECTED] Remove unneeded MAD agent registration by using a single agent for both directed-route and LID-routed MADs. Signed-off-by: Hal Rosenstock [EMAIL PROTECTED] Signed-off-by: Roland Dreier [EMAIL PROTECTED] --- linux-export.orig/drivers/infiniband/core/agent.c 2005-03-02 20:26:03.280776011 -0800 +++ linux-export/drivers/infiniband/core/agent.c2005-03-02 20:26:10.599187430 -0800 @@ -66,14 +66,13 @@ if (device) { list_for_each_entry(entry, ib_agent_port_list, port_list) { - if (entry-dr_smp_agent-device == device + if (entry-smp_agent-device == device entry-port_num == port_num) return entry; } } else { list_for_each_entry(entry, ib_agent_port_list, port_list) { - if ((entry-dr_smp_agent == mad_agent) || - (entry-lr_smp_agent == mad_agent) || + if ((entry-smp_agent == mad_agent) || (entry-perf_mgmt_agent == mad_agent)) return entry; } @@ -111,7 +110,7 @@ return 1; } - return smi_check_local_smp(port_priv-dr_smp_agent, smp); + return smi_check_local_smp(port_priv-smp_agent, smp); } static int agent_mad_send(struct ib_mad_agent *mad_agent, @@ -231,10 +230,8 @@ /* Get mad agent based on mgmt_class in MAD */ switch (mad-mad.mad.mad_hdr.mgmt_class) { case IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE: - mad_agent = port_priv-dr_smp_agent; - break; case IB_MGMT_CLASS_SUBN_LID_ROUTED: - mad_agent = port_priv-lr_smp_agent; + mad_agent = port_priv-smp_agent; break; case IB_MGMT_CLASS_PERF_MGMT: mad_agent = port_priv-perf_mgmt_agent; @@ -284,7 +281,6 @@ { int ret; struct ib_agent_port_private *port_priv; - struct ib_mad_reg_req reg_req; unsigned long flags; /* First, check if port already open for SMI */ @@ -308,35 +304,19 @@ spin_lock_init(port_priv-send_list_lock); INIT_LIST_HEAD(port_priv-send_posted_list); - /* Obtain MAD agent for directed route SM class */ - reg_req.mgmt_class = IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE; - reg_req.mgmt_class_version = 1; - - port_priv-dr_smp_agent = ib_register_mad_agent(device, port_num, - IB_QPT_SMI, - NULL, 0, - agent_send_handler, - NULL, NULL); + /* Obtain send only MAD agent for SM class (SMI QP) */ + port_priv-smp_agent = ib_register_mad_agent(device, port_num, +IB_QPT_SMI, +NULL, 0, + agent_send_handler, +NULL, NULL); - if (IS_ERR(port_priv-dr_smp_agent)) { - ret = PTR_ERR(port_priv-dr_smp_agent); + if (IS_ERR(port_priv-smp_agent)) { + ret = PTR_ERR(port_priv-smp_agent); goto error2; } - /* Obtain MAD agent for LID routed SM class */ - reg_req.mgmt_class = IB_MGMT_CLASS_SUBN_LID_ROUTED; - port_priv-lr_smp_agent = ib_register_mad_agent(device, port_num, - IB_QPT_SMI, - NULL, 0, - agent_send_handler, - NULL, NULL); - if (IS_ERR(port_priv-lr_smp_agent)) { - ret = PTR_ERR(port_priv-lr_smp_agent); - goto error3; - } - - /* Obtain MAD agent for PerfMgmt class */ - reg_req.mgmt_class = IB_MGMT_CLASS_PERF_MGMT; + /* Obtain send only MAD agent for PerfMgmt class (GSI QP) */ port_priv-perf_mgmt_agent = ib_register_mad_agent(device, port_num, IB_QPT_GSI, NULL, 0, @@ -344,15 +324,15 @@ NULL, NULL); if (IS_ERR(port_priv-perf_mgmt_agent)) { ret = PTR_ERR(port_priv-perf_mgmt_agent); - goto error4; + goto error3; } - port_priv-mr = ib_get_dma_mr(port_priv-dr_smp_agent-qp-pd, + port_priv-mr = ib_get_dma_mr(port_priv-smp_agent-qp-pd, IB_ACCESS_LOCAL_WRITE);