| From d8804a377b25ab11ad59787d66faafb1b0bb0d5e Mon Sep 17 00:00:00 2001 |
| From: Mike Marciniszyn <mike.marciniszyn@intel.com> |
| Date: Mon, 6 Jan 2020 08:42:28 -0500 |
| Subject: [PATCH] IB/hfi1: Add software counter for ctxt0 seq drop |
| |
| commit 5ffd048698ea5139743acd45e8ab388a683642b8 upstream. |
| |
| All other code paths increment some form of drop counter. |
| |
| This was missed in the original implementation. |
| |
| Fixes: 82c2611daaf0 ("staging/rdma/hfi1: Handle packets with invalid RHF on context 0") |
| Link: https://lore.kernel.org/r/20200106134228.119356.96828.stgit@awfm-01.aw.intel.com |
| Reviewed-by: Kaike Wan <kaike.wan@intel.com> |
| Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> |
| Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> |
| Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c |
| index 67052dc3100c..ab7209539e99 100644 |
| --- a/drivers/infiniband/hw/hfi1/chip.c |
| +++ b/drivers/infiniband/hw/hfi1/chip.c |
| @@ -1685,6 +1685,14 @@ static u64 access_sw_pio_drain(const struct cntr_entry *entry, |
| return dd->verbs_dev.n_piodrain; |
| } |
| |
| +static u64 access_sw_ctx0_seq_drop(const struct cntr_entry *entry, |
| + void *context, int vl, int mode, u64 data) |
| +{ |
| + struct hfi1_devdata *dd = context; |
| + |
| + return dd->ctx0_seq_drop; |
| +} |
| + |
| static u64 access_sw_vtx_wait(const struct cntr_entry *entry, |
| void *context, int vl, int mode, u64 data) |
| { |
| @@ -4248,6 +4256,8 @@ static struct cntr_entry dev_cntrs[DEV_CNTR_LAST] = { |
| access_sw_cpu_intr), |
| [C_SW_CPU_RCV_LIM] = CNTR_ELEM("RcvLimit", 0, 0, CNTR_NORMAL, |
| access_sw_cpu_rcv_limit), |
| +[C_SW_CTX0_SEQ_DROP] = CNTR_ELEM("SeqDrop0", 0, 0, CNTR_NORMAL, |
| + access_sw_ctx0_seq_drop), |
| [C_SW_VTX_WAIT] = CNTR_ELEM("vTxWait", 0, 0, CNTR_NORMAL, |
| access_sw_vtx_wait), |
| [C_SW_PIO_WAIT] = CNTR_ELEM("PioWait", 0, 0, CNTR_NORMAL, |
| diff --git a/drivers/infiniband/hw/hfi1/chip.h b/drivers/infiniband/hw/hfi1/chip.h |
| index b76cf81f927f..1ee2ff700d10 100644 |
| --- a/drivers/infiniband/hw/hfi1/chip.h |
| +++ b/drivers/infiniband/hw/hfi1/chip.h |
| @@ -926,6 +926,7 @@ enum { |
| C_DC_PG_STS_TX_MBE_CNT, |
| C_SW_CPU_INTR, |
| C_SW_CPU_RCV_LIM, |
| + C_SW_CTX0_SEQ_DROP, |
| C_SW_VTX_WAIT, |
| C_SW_PIO_WAIT, |
| C_SW_PIO_DRAIN, |
| diff --git a/drivers/infiniband/hw/hfi1/driver.c b/drivers/infiniband/hw/hfi1/driver.c |
| index 01aa1f132f55..941b465244ab 100644 |
| --- a/drivers/infiniband/hw/hfi1/driver.c |
| +++ b/drivers/infiniband/hw/hfi1/driver.c |
| @@ -734,6 +734,7 @@ static noinline int skip_rcv_packet(struct hfi1_packet *packet, int thread) |
| { |
| int ret; |
| |
| + packet->rcd->dd->ctx0_seq_drop++; |
| /* Set up for the next packet */ |
| packet->rhqoff += packet->rsize; |
| if (packet->rhqoff >= packet->maxcnt) |
| diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h |
| index 1af94650bd84..b79931cc74ab 100644 |
| --- a/drivers/infiniband/hw/hfi1/hfi.h |
| +++ b/drivers/infiniband/hw/hfi1/hfi.h |
| @@ -1153,6 +1153,8 @@ struct hfi1_devdata { |
| |
| char *boardname; /* human readable board info */ |
| |
| + u64 ctx0_seq_drop; |
| + |
| /* reset value */ |
| u64 z_int_counter; |
| u64 z_rcv_limit; |
| -- |
| 2.7.4 |
| |