Commit aca7f4fc authored by Sebastian Sanchez's avatar Sebastian Sanchez Committed by Jason Gunthorpe

IB/hfi1: Optimize process_receive_ib()

The arguments for trace_hfi1_rcvhdr() get computed every
time in the hot path regardless of the whether the trace
is on or off. This is seen to be costly with a profile.
The handling of fault inject isolates the verbs device for
all packets regardless of the presence of a RHF_DC_ERR error.

Fix the first by computing trace_hfi1_rcvhdr() arguments within
the trace itself, so that when the trace is off, the argument
data isn't computed. Fix the second by moving the error check to
handle_eflags() when an RHF error occurs and by testing for
RHF_DC_ERR before executing the reset of handle_eflags().
Reviewed-by: default avatarDon Hiatt <don.hiatt@intel.com>
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarSebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent ca85bb1c
...@@ -256,7 +256,12 @@ static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd, ...@@ -256,7 +256,12 @@ static void rcv_hdrerr(struct hfi1_ctxtdata *rcd, struct hfi1_pportdata *ppd,
u32 mlid_base; u32 mlid_base;
struct hfi1_ibport *ibp = rcd_to_iport(rcd); struct hfi1_ibport *ibp = rcd_to_iport(rcd);
struct hfi1_devdata *dd = ppd->dd; struct hfi1_devdata *dd = ppd->dd;
struct rvt_dev_info *rdi = &dd->verbs_dev.rdi; struct hfi1_ibdev *verbs_dev = &dd->verbs_dev;
struct rvt_dev_info *rdi = &verbs_dev->rdi;
if ((packet->rhf & RHF_DC_ERR) &&
hfi1_dbg_fault_suppress_err(verbs_dev))
return;
if (packet->rhf & (RHF_VCRC_ERR | RHF_ICRC_ERR)) if (packet->rhf & (RHF_VCRC_ERR | RHF_ICRC_ERR))
return; return;
...@@ -1552,19 +1557,7 @@ int process_receive_ib(struct hfi1_packet *packet) ...@@ -1552,19 +1557,7 @@ int process_receive_ib(struct hfi1_packet *packet)
if (hfi1_setup_9B_packet(packet)) if (hfi1_setup_9B_packet(packet))
return RHF_RCV_CONTINUE; return RHF_RCV_CONTINUE;
trace_hfi1_rcvhdr(packet->rcd->ppd->dd, trace_hfi1_rcvhdr(packet, RHF_RCV_TYPE_IB);
packet->rcd->ctxt,
rhf_err_flags(packet->rhf),
RHF_RCV_TYPE_IB,
packet->hlen,
packet->tlen,
packet->updegr,
rhf_egr_index(packet->rhf));
if (unlikely(
(hfi1_dbg_fault_suppress_err(&packet->rcd->dd->verbs_dev) &&
(packet->rhf & RHF_DC_ERR))))
return RHF_RCV_CONTINUE;
if (unlikely(rhf_err_flags(packet->rhf))) { if (unlikely(rhf_err_flags(packet->rhf))) {
handle_eflags(packet); handle_eflags(packet);
......
...@@ -63,17 +63,9 @@ __print_symbolic(type, \ ...@@ -63,17 +63,9 @@ __print_symbolic(type, \
#define TRACE_SYSTEM hfi1_rx #define TRACE_SYSTEM hfi1_rx
TRACE_EVENT(hfi1_rcvhdr, TRACE_EVENT(hfi1_rcvhdr,
TP_PROTO(struct hfi1_devdata *dd, TP_PROTO(struct hfi1_packet *packet, u32 etype),
u32 ctxt, TP_ARGS(packet, etype),
u64 eflags, TP_STRUCT__entry(DD_DEV_ENTRY(packet->rcd->dd)
u32 etype,
u32 hlen,
u32 tlen,
u32 updegr,
u32 etail
),
TP_ARGS(dd, ctxt, eflags, etype, hlen, tlen, updegr, etail),
TP_STRUCT__entry(DD_DEV_ENTRY(dd)
__field(u64, eflags) __field(u64, eflags)
__field(u32, ctxt) __field(u32, ctxt)
__field(u32, etype) __field(u32, etype)
...@@ -82,14 +74,14 @@ TRACE_EVENT(hfi1_rcvhdr, ...@@ -82,14 +74,14 @@ TRACE_EVENT(hfi1_rcvhdr,
__field(u32, updegr) __field(u32, updegr)
__field(u32, etail) __field(u32, etail)
), ),
TP_fast_assign(DD_DEV_ASSIGN(dd); TP_fast_assign(DD_DEV_ASSIGN(packet->rcd->dd);
__entry->eflags = eflags; __entry->eflags = rhf_err_flags(packet->rhf);
__entry->ctxt = ctxt; __entry->ctxt = packet->rcd->ctxt;
__entry->etype = etype; __entry->etype = etype;
__entry->hlen = hlen; __entry->hlen = packet->hlen;
__entry->tlen = tlen; __entry->tlen = packet->tlen;
__entry->updegr = updegr; __entry->updegr = packet->updegr;
__entry->etail = etail; __entry->etail = rhf_egr_index(packet->rhf);
), ),
TP_printk( TP_printk(
"[%s] ctxt %d eflags 0x%llx etype %d,%s hlen %d tlen %d updegr %d etail %d", "[%s] ctxt %d eflags 0x%llx etype %d,%s hlen %d tlen %d updegr %d etail %d",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment