return IPOIB_CM_ULP;
else if (strstr(symbol_name, "ipoib_"))
return IPOIB_ULP;
+ else if (strstr(symbol_name, "xve_cm_"))
+ return XVE_CM_ULP;
+ else if (strstr(symbol_name, "xve_"))
+ return XVE_ULP;
#endif
}
return OTHER_ULP;
seq_puts(s, "\t[EPSA tunneling]\n");
else if (qp->ulp_type == RDS_ULP)
seq_puts(s, "\t[RDS]\n");
+ else if (qp->flags & SIF_QPF_IPOIB)
+ seq_puts(s, "\t[IPoIB]\n");
else if (qp->ulp_type == IPOIB_CM_ULP)
seq_puts(s, "\t[IPOIB_CM]\n");
else if (qp->flags & SIF_QPF_EOIB)
seq_puts(s, "\t[EoIB]\n");
- else if (qp->flags & SIF_QPF_IPOIB)
- seq_puts(s, "\t[IPoIB]\n");
+ else if (qp->ulp_type == XVE_CM_ULP)
+ seq_puts(s, "\t[EoIB_CM]\n");
else if (qp->flags & SIF_QPF_NO_EVICT)
seq_puts(s, "\t[no_evict]\n");
else if (qp->flags & SIF_QPF_FLUSH_RETRY)
IB_DEVICE_XRC |
IB_DEVICE_BLOCK_MULTICAST_LOOPBACK;
- /* returns max_sge SIF_HW_MAX_SEND_SGE -1 for IPoIB datagram mode */
- /* TBD: Add test for uvnic */
- props->max_sge = SIF_HW_MAX_SEND_SGE -
- (sif_find_kernel_ulp_caller() == IPOIB_ULP);
+ /*
+ * LSO requires one SGE entry, hence subtract one if IPoIB,
+ * EoIB, or if we are unable to determine the ULP
+ */
+ props->max_sge = SIF_HW_MAX_SEND_SGE - (
+ sif_find_kernel_ulp_caller() == IPOIB_ULP ||
+ sif_find_kernel_ulp_caller() == XVE_ULP ||
+ STACK_UNWIND_LEVEL == 0);
props->max_sge_rd = ldev.max_sge_rd;
props->max_cq = sdev->ba[cq_sw].entry_cnt;