From: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Jubin John <jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
	devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org,
	mike.marciniszyn-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	Vennila Megavannan
	<vennila.megavannan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH RESEND v3 5/6] staging/rdma/hfi1: adding per SDMA engine stats to hfistats
Date: Tue, 1 Mar 2016 10:29:43 -0500	[thread overview]
Message-ID: <56D5B567.4040706@redhat.com> (raw)
In-Reply-To: <1452555057-5155-6-git-send-email-jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 10936 bytes --]
On 01/11/2016 06:30 PM, Jubin John wrote:
> From: Vennila Megavannan <vennila.megavannan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> 
> Added the following per sdma engine stats:
>   - SendDmaDescFetchedCnt
>   - software maintained count of SDMA interrupts
> 	 (SDmaInt, SDmaIdleInt, SDmaProgressInt)
>   - software maintained counts of SDMA error cases
> 
> Reviewed-by: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Mike Marciniszyn <mike.marciniszyn-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Vennila Megavannan <vennila.megavannan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Jubin John <jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> ---
> Changes in v2:
> 	- None
> 
> Changes in v3:
> 	- Refreshed patch against latest staging-next
> 
>  drivers/staging/rdma/hfi1/chip.c           |  110 +++++++++++++++++++++++++++-
>  drivers/staging/rdma/hfi1/chip.h           |    5 +
>  drivers/staging/rdma/hfi1/chip_registers.h |    1 +
>  drivers/staging/rdma/hfi1/hfi.h            |    1 +
>  drivers/staging/rdma/hfi1/sdma.c           |    9 ++-
>  drivers/staging/rdma/hfi1/sdma.h           |    7 ++
>  6 files changed, 129 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/staging/rdma/hfi1/chip.c b/drivers/staging/rdma/hfi1/chip.c
> index 503bfca..f4f720d 100644
> --- a/drivers/staging/rdma/hfi1/chip.c
> +++ b/drivers/staging/rdma/hfi1/chip.c
> @@ -1297,10 +1297,58 @@ static u64 dev_access_u32_csr(const struct cntr_entry *entry,
>  			    void *context, int vl, int mode, u64 data)
>  {
>  	struct hfi1_devdata *dd = context;
> +	u64 csr = entry->csr;
>  
> -	if (vl != CNTR_INVALID_VL)
> -		return 0;
> -	return read_write_csr(dd, entry->csr, mode, data);
> +	if (entry->flags & CNTR_SDMA) {
> +		if (vl == CNTR_INVALID_VL)
> +			return 0;
> +		csr += 0x100 * vl;
> +	} else {
> +		if (vl != CNTR_INVALID_VL)
> +			return 0;
> +	}
> +	return read_write_csr(dd, csr, mode, data);
> +}
> +
> +static u64 access_sde_err_cnt(const struct cntr_entry *entry,
> +			      void *context, int idx, int mode, u64 data)
> +{
> +	struct hfi1_devdata *dd = (struct hfi1_devdata *)context;
> +
> +	if (dd->per_sdma && idx < dd->num_sdma)
> +		return dd->per_sdma[idx].err_cnt;
> +	return 0;
> +}
> +
> +static u64 access_sde_int_cnt(const struct cntr_entry *entry,
> +			      void *context, int idx, int mode, u64 data)
> +{
> +	struct hfi1_devdata *dd = (struct hfi1_devdata *)context;
> +
> +	if (dd->per_sdma && idx < dd->num_sdma)
> +		return dd->per_sdma[idx].sdma_int_cnt;
> +	return 0;
> +}
> +
> +static u64 access_sde_idle_int_cnt(const struct cntr_entry *entry,
> +				   void *context, int idx, int mode, u64 data)
> +{
> +	struct hfi1_devdata *dd = (struct hfi1_devdata *)context;
> +
> +	if (dd->per_sdma && idx < dd->num_sdma)
> +		return dd->per_sdma[idx].idle_int_cnt;
> +	return 0;
> +}
> +
> +static u64 access_sde_progress_int_cnt(const struct cntr_entry *entry,
> +				       void *context, int idx, int mode,
> +				       u64 data)
> +{
> +	struct hfi1_devdata *dd = (struct hfi1_devdata *)context;
> +
> +	if (dd->per_sdma && idx < dd->num_sdma)
> +		return dd->per_sdma[idx].progress_int_cnt;
> +	return 0;
>  }
>  
>  static u64 dev_access_u64_csr(const struct cntr_entry *entry, void *context,
> @@ -4070,6 +4118,22 @@ static struct cntr_entry dev_cntrs[DEV_CNTR_LAST] = {
>  			    access_sw_kmem_wait),
>  [C_SW_SEND_SCHED] = CNTR_ELEM("SendSched", 0, 0, CNTR_NORMAL,
>  			    access_sw_send_schedule),
> +[C_SDMA_DESC_FETCHED_CNT] = CNTR_ELEM("SDEDscFdCn",
> +				      SEND_DMA_DESC_FETCHED_CNT, 0,
> +				      CNTR_NORMAL | CNTR_32BIT | CNTR_SDMA,
> +				      dev_access_u32_csr),
> +[C_SDMA_INT_CNT] = CNTR_ELEM("SDMAInt", 0, 0,
> +			     CNTR_NORMAL | CNTR_32BIT | CNTR_SDMA,
> +			     access_sde_int_cnt),
> +[C_SDMA_ERR_CNT] = CNTR_ELEM("SDMAErrCt", 0, 0,
> +			     CNTR_NORMAL | CNTR_32BIT | CNTR_SDMA,
> +			     access_sde_err_cnt),
> +[C_SDMA_IDLE_INT_CNT] = CNTR_ELEM("SDMAIdInt", 0, 0,
> +				  CNTR_NORMAL | CNTR_32BIT | CNTR_SDMA,
> +				  access_sde_idle_int_cnt),
> +[C_SDMA_PROGRESS_INT_CNT] = CNTR_ELEM("SDMAPrIntCn", 0, 0,
> +				      CNTR_NORMAL | CNTR_32BIT | CNTR_SDMA,
> +				      access_sde_progress_int_cnt),
>  /* MISC_ERR_STATUS */
>  [C_MISC_PLL_LOCK_FAIL_ERR] = CNTR_ELEM("MISC_PLL_LOCK_FAIL_ERR", 0, 0,
>  				CNTR_NORMAL,
> @@ -5707,6 +5771,7 @@ static void handle_sdma_eng_err(struct hfi1_devdata *dd,
>  	dd_dev_err(sde->dd, "CONFIG SDMA(%u) source: %u status 0x%llx\n",
>  		   sde->this_idx, source, (unsigned long long)status);
>  #endif
> +	sde->err_cnt++;
>  	sdma_engine_error(sde, status);
>  
>  	/*
> @@ -11150,6 +11215,20 @@ u32 hfi1_read_cntrs(struct hfi1_devdata *dd, loff_t pos, char **namep,
>  						dd->cntrs[entry->offset + j] =
>  									    val;
>  					}
> +				} else if (entry->flags & CNTR_SDMA) {
> +					hfi1_cdbg(CNTR,
> +						  "\t Per SDMA Engine\n");
> +					for (j = 0; j < dd->chip_sdma_engines;
> +					     j++) {
> +						val =
> +						entry->rw_cntr(entry, dd, j,
> +							       CNTR_MODE_R, 0);
> +						hfi1_cdbg(CNTR,
> +							  "\t\tRead 0x%llx for %d\n",
> +							  val, j);
> +						dd->cntrs[entry->offset + j] =
> +									val;
> +					}
>  				} else {
>  					val = entry->rw_cntr(entry, dd,
>  							CNTR_INVALID_VL,
> @@ -11553,6 +11632,21 @@ static int init_cntrs(struct hfi1_devdata *dd)
>  				dd->ndevcntrs++;
>  				index++;
>  			}
> +		} else if (dev_cntrs[i].flags & CNTR_SDMA) {
> +			hfi1_dbg_early(
> +				       "\tProcessing per SDE counters chip enginers %u\n",
> +				       dd->chip_sdma_engines);
> +			dev_cntrs[i].offset = index;
> +			for (j = 0; j < dd->chip_sdma_engines; j++) {
> +				memset(name, '\0', C_MAX_NAME);
> +				snprintf(name, C_MAX_NAME, "%s%d",
> +					 dev_cntrs[i].name, j);
> +				sz += strlen(name);
> +				sz++;
> +				hfi1_dbg_early("\t\t%s\n", name);
> +				dd->ndevcntrs++;
> +				index++;
> +			}
>  		} else {
>  			/* +1 for newline  */
>  			sz += strlen(dev_cntrs[i].name) + 1;
> @@ -11594,6 +11688,16 @@ static int init_cntrs(struct hfi1_devdata *dd)
>  					p += strlen(name);
>  					*p++ = '\n';
>  				}
> +			} else if (dev_cntrs[i].flags & CNTR_SDMA) {
> +				for (j = 0; j < TXE_NUM_SDMA_ENGINES;
> +				     j++) {
> +					memset(name, '\0', C_MAX_NAME);
> +					snprintf(name, C_MAX_NAME, "%s%d",
> +						 dev_cntrs[i].name, j);
> +					memcpy(p, name, strlen(name));
> +					p += strlen(name);
> +					*p++ = '\n';
> +				}
>  			} else {
>  				memcpy(p, dev_cntrs[i].name,
>  				       strlen(dev_cntrs[i].name));
> diff --git a/drivers/staging/rdma/hfi1/chip.h b/drivers/staging/rdma/hfi1/chip.h
> index 1368a44..b46ef66 100644
> --- a/drivers/staging/rdma/hfi1/chip.h
> +++ b/drivers/staging/rdma/hfi1/chip.h
> @@ -787,6 +787,11 @@ enum {
>  	C_SW_PIO_WAIT,
>  	C_SW_KMEM_WAIT,
>  	C_SW_SEND_SCHED,
> +	C_SDMA_DESC_FETCHED_CNT,
> +	C_SDMA_INT_CNT,
> +	C_SDMA_ERR_CNT,
> +	C_SDMA_IDLE_INT_CNT,
> +	C_SDMA_PROGRESS_INT_CNT,
>  /* MISC_ERR_STATUS */
>  	C_MISC_PLL_LOCK_FAIL_ERR,
>  	C_MISC_MBIST_FAIL_ERR,
> diff --git a/drivers/staging/rdma/hfi1/chip_registers.h b/drivers/staging/rdma/hfi1/chip_registers.h
> index 701e9e1..fb36541 100644
> --- a/drivers/staging/rdma/hfi1/chip_registers.h
> +++ b/drivers/staging/rdma/hfi1/chip_registers.h
> @@ -1290,5 +1290,6 @@
>  #define CCE_INT_BLOCKED (CCE + 0x000000110C00)
>  #define SEND_DMA_IDLE_CNT (TXE + 0x000000200040)
>  #define SEND_DMA_DESC_FETCHED_CNT (TXE + 0x000000200058)
> +#define CCE_MSIX_PBA_OFFSET 0X0110000
>  
>  #endif          /* DEF_CHIP_REG */
> diff --git a/drivers/staging/rdma/hfi1/hfi.h b/drivers/staging/rdma/hfi1/hfi.h
> index d4a859f..d32ee84 100644
> --- a/drivers/staging/rdma/hfi1/hfi.h
> +++ b/drivers/staging/rdma/hfi1/hfi.h
> @@ -490,6 +490,7 @@ struct hfi1_sge_state;
>  #define CNTR_DISABLED		0x2 /* Disable this counter */
>  #define CNTR_32BIT		0x4 /* Simulate 64 bits for this counter */
>  #define CNTR_VL			0x8 /* Per VL counter */
> +#define CNTR_SDMA              0x10
>  #define CNTR_INVALID_VL		-1  /* Specifies invalid VL */
>  #define CNTR_MODE_W		0x0
>  #define CNTR_MODE_R		0x1
> diff --git a/drivers/staging/rdma/hfi1/sdma.c b/drivers/staging/rdma/hfi1/sdma.c
> index 1d38be5..cb66bd0 100644
> --- a/drivers/staging/rdma/hfi1/sdma.c
> +++ b/drivers/staging/rdma/hfi1/sdma.c
> @@ -1061,7 +1061,6 @@ int sdma_init(struct hfi1_devdata *dd, u8 port)
>  		sde->desc_avail = sdma_descq_freecnt(sde);
>  		sde->sdma_shift = ilog2(descq_cnt);
>  		sde->sdma_mask = (1 << sde->sdma_shift) - 1;
> -		sde->descq_full_count = 0;
>  
>  		/* Create a mask for all 3 chip interrupt sources */
>  		sde->imask = (u64)1 << (0*TXE_NUM_SDMA_ENGINES + this_idx)
> @@ -1073,6 +1072,8 @@ int sdma_init(struct hfi1_devdata *dd, u8 port)
>  		/* Create a mask specifically for sdma_progress */
>  		sde->progress_mask =
>  			(u64)1 << (TXE_NUM_SDMA_ENGINES + this_idx);
> +		sde->int_mask =
> +			(u64)1 << (0 * TXE_NUM_SDMA_ENGINES + this_idx);
                                   ^^^^^^^^^^^^^^^^^^^^^^^^
Why is that there?
>  		spin_lock_init(&sde->tail_lock);
>  		seqlock_init(&sde->head_lock);
>  		spin_lock_init(&sde->senddmactrl_lock);
> @@ -1552,6 +1553,12 @@ void sdma_engine_interrupt(struct sdma_engine *sde, u64 status)
>  	trace_hfi1_sdma_engine_interrupt(sde, status);
>  	write_seqlock(&sde->head_lock);
>  	sdma_set_desc_cnt(sde, sdma_desct_intr);
> +	if (status & sde->idle_mask)
> +		sde->idle_int_cnt++;
> +	else if (status & sde->progress_mask)
> +		sde->progress_int_cnt++;
> +	else if (status & sde->int_mask)
> +		sde->sdma_int_cnt++;
>  	sdma_make_progress(sde, status);
>  	write_sequnlock(&sde->head_lock);
>  }
> diff --git a/drivers/staging/rdma/hfi1/sdma.h b/drivers/staging/rdma/hfi1/sdma.h
> index da89e64..757017a 100644
> --- a/drivers/staging/rdma/hfi1/sdma.h
> +++ b/drivers/staging/rdma/hfi1/sdma.h
> @@ -409,6 +409,7 @@ struct sdma_engine {
>  	u64 imask;			/* clear interrupt mask */
>  	u64 idle_mask;
>  	u64 progress_mask;
> +	u64 int_mask;
>  	/* private: */
>  	volatile __le64      *head_dma; /* DMA'ed by chip */
>  	/* private: */
> @@ -465,6 +466,12 @@ struct sdma_engine {
>  	u16                   tx_head;
>  	/* private: */
>  	u64                   last_status;
> +	/* private */
> +	u64                     err_cnt;
> +	/* private */
> +	u64                     sdma_int_cnt;
> +	u64                     idle_int_cnt;
> +	u64                     progress_int_cnt;
>  
>  	/* private: */
>  	struct list_head      dmawait;
> 
-- 
Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
              GPG KeyID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
next prev parent reply	other threads:[~2016-03-01 15:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-11 23:30 [PATCH RESEND v3 0/6] staging/rdma/hfi1: Driver cleanup and misc fixes Jubin John
     [not found] ` <1452555057-5155-1-git-send-email-jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-01-11 23:30   ` [PATCH RESEND v3 1/6] staging/rdma/hfi1: Use BIT macro Jubin John
2016-01-11 23:30   ` [PATCH RESEND v3 2/6] staging/rdma/hfi1: Move s_sde to the read mostly portion of the hfi1_qp structure Jubin John
2016-01-11 23:30   ` [PATCH RESEND v3 3/6] staging/rdma/hfi1: change krcvqs module parameter type from byte to uint Jubin John
2016-01-11 23:30   ` [PATCH RESEND v3 5/6] staging/rdma/hfi1: adding per SDMA engine stats to hfistats Jubin John
     [not found]     ` <1452555057-5155-6-git-send-email-jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-01 15:29       ` Doug Ledford [this message]
     [not found]         ` <56D5B567.4040706-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-03-01 20:27           ` Jubin John
     [not found]             ` <20160301202736.GA8501-W4f6Xiosr+yv7QzWx2u06xL4W9x8LtSr@public.gmane.org>
2016-03-03 15:50               ` Doug Ledford
     [not found]                 ` <56D85D51.40800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-03-04  2:02                   ` Jubin John
2016-01-11 23:30   ` [PATCH RESEND v3 6/6] staging/rdma/hfi1: Remove unneeded variable index Jubin John
2016-01-11 23:30 ` [PATCH RESEND v3 4/6] staging/rdma/hfi1: Change default krcvqs Jubin John
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox
  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):
  git send-email \
    --in-reply-to=56D5B567.4040706@redhat.com \
    --to=dledford-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=jubin.john-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mike.marciniszyn-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=vennila.megavannan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    /path/to/YOUR_REPLY
  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
  Be sure your reply has a Subject: header at the top and a blank line
  before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).