|
@@ -59,7 +59,8 @@ extern enum smi_action smi_handle_dr_smp_send(struct ib_smp *smp,
|
|
u8 node_type, int port_num);
|
|
u8 node_type, int port_num);
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Return 1 if the SMP should be handled by the local SMA/SM via process_mad
|
|
|
|
|
|
+ * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM
|
|
|
|
+ * via process_mad
|
|
*/
|
|
*/
|
|
static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
|
|
static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
|
|
struct ib_device *device)
|
|
struct ib_device *device)
|
|
@@ -71,4 +72,19 @@ static inline enum smi_action smi_check_local_smp(struct ib_smp *smp,
|
|
(smp->hop_ptr == smp->hop_cnt + 1)) ?
|
|
(smp->hop_ptr == smp->hop_cnt + 1)) ?
|
|
IB_SMI_HANDLE : IB_SMI_DISCARD);
|
|
IB_SMI_HANDLE : IB_SMI_DISCARD);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Return IB_SMI_HANDLE if the SMP should be handled by the local SMA/SM
|
|
|
|
+ * via process_mad
|
|
|
|
+ */
|
|
|
|
+static inline enum smi_action smi_check_local_returning_smp(struct ib_smp *smp,
|
|
|
|
+ struct ib_device *device)
|
|
|
|
+{
|
|
|
|
+ /* C14-13:3 -- We're at the end of the DR segment of path */
|
|
|
|
+ /* C14-13:4 -- Hop Pointer == 0 -> give to SM */
|
|
|
|
+ return ((device->process_mad &&
|
|
|
|
+ ib_get_smp_direction(smp) &&
|
|
|
|
+ !smp->hop_ptr) ? IB_SMI_HANDLE : IB_SMI_DISCARD);
|
|
|
|
+}
|
|
|
|
+
|
|
#endif /* __SMI_H_ */
|
|
#endif /* __SMI_H_ */
|