[openib-general] [PATCH] ib_smi: Make port number parameter to SMI DR routines
Hal Rosenstock
Thu Oct 14 06:16:26 PDT 2004
ib_smi: Make port number parameter to SMI DR routines
(in preparation for switch support where port number is not the port of
the receiving MAD agent)
Index: ib_smi.c
===================================================================
--- ib_smi.c (revision 990)
+++ ib_smi.c (working copy)
@@ -42,7 +42,8 @@
* discarded.
*/
static int smi_handle_dr_smp_send(struct ib_mad_agent *mad_agent,
- struct ib_smp *smp)
+ struct ib_smp *smp,
+ int port_num)
{
u8 hop_ptr, hop_cnt;
@@ -55,7 +56,7 @@
if (hop_cnt && hop_ptr == 0) {
smp->hop_ptr++;
return (smp->initial_path[smp->hop_ptr] ==
- mad_agent->port_num);
+ port_num);
}
/* C14-9:2 */
@@ -66,7 +67,7 @@
/* smp->return_path set when received */
smp->hop_ptr++;
return (smp->initial_path[smp->hop_ptr] ==
- mad_agent->port_num);
+ port_num);
}
/* C14-9:3 -- We're at the end of the DR segment of path */
@@ -86,7 +87,7 @@
if (hop_cnt && hop_ptr == hop_cnt + 1) {
smp->hop_ptr--;
return (smp->return_path[smp->hop_ptr] ==
- mad_agent->port_num);
+ port_num);
}
/* C14-13:2 */
@@ -96,7 +97,7 @@
smp->hop_ptr--;
return (smp->return_path[smp->hop_ptr] ==
- mad_agent->port_num);
+ port_num);
}
/* C14-13:3 -- at the end of the DR segment of path */
@@ -118,12 +119,13 @@
* the spec. Return 0 if the SMP should be dropped.
*/
static int smi_handle_smp_send(struct ib_mad_agent *mad_agent,
- struct ib_smp *smp)
+ struct ib_smp *smp,
+ int port_num)
{
switch (smp->mgmt_class)
{
case IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE:
- return smi_handle_dr_smp_send(mad_agent, smp);
+ return smi_handle_dr_smp_send(mad_agent, smp, port_num);
default: /* LR SM or PerfMgmt classes */
return 1;
}
@@ -149,6 +151,7 @@
*/
static int smi_handle_dr_smp_recv(struct ib_mad_agent *mad_agent,
struct ib_smp *smp,
+ int port_num,
int phys_port_cnt)
{
u8 hop_ptr, hop_cnt;
@@ -175,7 +178,7 @@
/* C14-9:3 -- We're at the end of the DR segment of path */
if (hop_ptr == hop_cnt) {
if (hop_cnt)
- smp->return_path[hop_ptr] = mad_agent->port_num;
+ smp->return_path[hop_ptr] = port_num;
/* smp->hop_ptr updated when sending */
return (mad_agent->device->node_type == IB_NODE_SWITCH ||
@@ -192,7 +195,7 @@
if (hop_cnt && hop_ptr == hop_cnt + 1) {
smp->hop_ptr--;
return (smp->return_path[smp->hop_ptr] ==
- mad_agent->port_num);
+ port_num);
}
/* C14-13:2 */
@@ -227,12 +230,14 @@
*/
static int smi_handle_smp_recv(struct ib_mad_agent *mad_agent,
struct ib_smp *smp,
+ int port_num,
int phys_port_cnt)
{
switch (smp->mgmt_class)
{
case IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE:
- return smi_handle_dr_smp_recv(mad_agent, smp, phys_port_cnt);
+ return smi_handle_dr_smp_recv(mad_agent, smp,
+ port_num, phys_port_cnt);
default: /* LR SM or PerfMgmt classes */
return 1;
}
@@ -402,7 +407,7 @@
struct ib_mad *smp_response;
int ret;
- if (!smi_handle_smp_send(mad_agent, smp)) {
+ if (!smi_handle_smp_send(mad_agent, smp, mad_agent->port_num)) {
/* SMI failed send */
return 0;
}
@@ -417,6 +422,7 @@
if (ret & IB_MAD_RESULT_SUCCESS) {
if (!smi_handle_smp_recv(mad_agent,
(struct ib_smp *)smp_response,
+ mad_agent->port_num,
phys_port_cnt)) {
/* SMI failed receive */
kfree(smp_response);
@@ -437,7 +443,8 @@
struct ib_mad_recv_wc *mad_recv_wc,
int phys_port_cnt)
{
- if (!smi_handle_smp_recv(mad_agent, smp, phys_port_cnt)) {
+ if (!smi_handle_smp_recv(mad_agent, smp,
+ mad_agent->port_num, phys_port_cnt)) {
/* SMI failed receive */
return 0;
}
More information about the openib-general mailing list