mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Stephane Eranian <eranian@hpl.hp.com>
To: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <andi@firstfloor.org>, linux-kernel@vger.kernel.org
Subject: Re: [patch 2/8] 2.6.22-rc3 perfmon2 : IBS implementation for AMD64
Date: Tue, 19 Jun 2007 05:39:51 -0700	[thread overview]
Message-ID: <20070619123951.GC23051@frankl.hpl.hp.com> (raw)
In-Reply-To: <20070615093330.944272000@localhost>

Robert,

I applied this patch to my tree.
thanks.

On Fri, Jun 15, 2007 at 06:58:11PM +0200, Robert Richter wrote:
> Debug messages added for better debugging.
> 
> Signed-off-by: Robert Richter <robert.richter@amd.com>
> 
> Index: linux-2.6.22-rc3/perfmon/perfmon_file.c
> ===================================================================
> --- linux-2.6.22-rc3.orig/perfmon/perfmon_file.c
> +++ linux-2.6.22-rc3/perfmon/perfmon_file.c
> @@ -192,6 +192,8 @@ static int pfm_mmap(struct file *file, s
>  	unsigned long flags;
>  	int ret;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	ctx  = file->private_data;
>  	size = (vma->vm_end - vma->vm_start);
>  
> @@ -332,6 +334,8 @@ static ssize_t pfm_read(struct file *fil
>  	union pfarg_msg msg_buf;
>  	int non_block, ret;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	ctx = filp->private_data;
>  	if (ctx == NULL) {
>  		PFM_ERR("no ctx for pfm_read");
> @@ -375,6 +379,8 @@ static unsigned int pfm_poll(struct file
>  	unsigned long flags;
>  	unsigned int mask = 0;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	if (filp->f_op != &pfm_file_ops) {
>  		PFM_ERR("pfm_poll bad magic");
>  		return 0;
> @@ -449,6 +455,8 @@ static int pfm_fasync(int fd, struct fil
>  	struct pfm_context *ctx;
>  	int ret;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	ctx = filp->private_data;
>  	if (ctx == NULL) {
>  		PFM_ERR("pfm_fasync no ctx");
> @@ -611,6 +619,8 @@ static int pfm_close(struct inode *inode
>  {
>  	struct pfm_context *ctx;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	ctx = filp->private_data;
>  	if (ctx == NULL) {
>  		PFM_ERR("no ctx");
> @@ -621,6 +631,8 @@ static int pfm_close(struct inode *inode
>  
>  static int pfm_no_open(struct inode *irrelevant, struct file *dontcare)
>  {
> +	PFM_DBG("pfm_file_ops");
> +
>  	return -ENXIO;
>  }
>  
> @@ -637,6 +649,8 @@ static int pfm_flush(struct file *filp, 
>  {
>  	struct pfm_context *ctx;
>  
> +	PFM_DBG("pfm_file_ops");
> +
>  	ctx = filp->private_data;
>  	if (ctx == NULL) {
>  		PFM_ERR("pfm_flush no ctx");
> Index: linux-2.6.22-rc3/perfmon/perfmon_syscalls.c
> ===================================================================
> --- linux-2.6.22-rc3.orig/perfmon/perfmon_syscalls.c
> +++ linux-2.6.22-rc3/perfmon/perfmon_syscalls.c
> @@ -403,6 +403,8 @@ asmlinkage long sys_pfm_create_context(s
>  	void *fmt_arg = NULL;
>  	int ret;
>  
> +	PFM_DBG("syscall");
> +
>  	if (atomic_read(&perfmon_disabled))
>  		return -ENOSYS;
>  
> @@ -433,8 +435,12 @@ asmlinkage long sys_pfm_write_pmcs(int f
>  	size_t sz;
>  	int ret, fput_needed;
>  
> -	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
> +	PFM_DBG("syscall");
> +
> +	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq)) {
> +                PFM_DBG("invalid arg count %d", count);
>  		return -EINVAL;
> +	}
>  
>  	sz = count*sizeof(*ureq);
>  
> @@ -475,6 +481,8 @@ asmlinkage long sys_pfm_write_pmcs(int f
>  		kfree(fptr);
>  error:
>  	fput_light(filp, fput_needed);
> +	if (ret)
> +		PFM_DBG("failed: errno=%d", -ret);
>  
>  	return ret;
>  }
> @@ -490,6 +498,8 @@ asmlinkage long sys_pfm_write_pmds(int f
>  	size_t sz;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
>  		return -EINVAL;
>  
> @@ -543,6 +553,8 @@ asmlinkage long sys_pfm_read_pmds(int fd
>  	size_t sz;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
>  		return -EINVAL;
>  
> @@ -591,6 +603,8 @@ asmlinkage long sys_pfm_restart(int fd)
>  	unsigned long flags;
>  	int ret, fput_needed, complete_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	filp = fget_light(fd, &fput_needed);
>  	if (unlikely(filp == NULL)) {
>  		PFM_DBG("invalid fd %d", fd);
> @@ -647,6 +661,8 @@ asmlinkage long sys_pfm_stop(int fd)
>  	unsigned long flags;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	filp = fget_light(fd, &fput_needed);
>  	if (unlikely(filp == NULL)) {
>  		PFM_DBG("invalid fd %d", fd);
> @@ -682,6 +698,8 @@ asmlinkage long sys_pfm_start(int fd, st
>  	unsigned long flags;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	filp = fget_light(fd, &fput_needed);
>  	if (unlikely(filp == NULL)) {
>  		PFM_DBG("invalid fd %d", fd);
> @@ -724,6 +742,8 @@ asmlinkage long sys_pfm_load_context(int
>  	struct pfarg_load req;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (copy_from_user(&req, ureq, sizeof(req)))
>  		return -EFAULT;
>  
> @@ -792,6 +812,8 @@ asmlinkage long sys_pfm_unload_context(i
>  	int is_system, can_release = 0;
>  	u32 cpu;
>  
> +	PFM_DBG("syscall");
> +
>  	filp = fget_light(fd, &fput_needed);
>  	if (unlikely(filp == NULL)) {
>  		PFM_DBG("invalid fd %d", fd);
> @@ -834,6 +856,8 @@ asmlinkage long sys_pfm_create_evtsets(i
>  	size_t sz;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
>  		return -EINVAL;
>  
> @@ -890,6 +914,8 @@ asmlinkage long  sys_pfm_getinfo_evtsets
>  	size_t sz;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
>  		return -EINVAL;
>  
> @@ -932,6 +958,8 @@ asmlinkage long  sys_pfm_getinfo_evtsets
>  	kfree(fptr);
>  error:
>  	fput_light(filp, fput_needed);
> +	if (ret)
> +		PFM_DBG("failed: errno=%d", -ret);
>  	return ret;
>  }
>  
> @@ -945,6 +973,8 @@ asmlinkage long sys_pfm_delete_evtsets(i
>  	size_t sz;
>  	int ret, fput_needed;
>  
> +	PFM_DBG("syscall");
> +
>  	if (count < 0 || count >= PFM_MAX_ARG_COUNT(ureq))
>  		return -EINVAL;
>  
> Index: linux-2.6.22-rc3/perfmon/perfmon_rw.c
> ===================================================================
> --- linux-2.6.22-rc3.orig/perfmon/perfmon_rw.c
> +++ linux-2.6.22-rc3/perfmon/perfmon_rw.c
> @@ -474,7 +474,7 @@ int __pfm_write_pmcs(struct pfm_context 
>  	return 0;
>  error:
>  	pfm_retflag_set(req->reg_flags, error_code);
> -	PFM_DBG("set%u pmc%u error=%d", set_id, cnum, error_code);
> +	PFM_DBG("set%u pmc%u error=0x%08x", set_id, cnum, error_code);
>  	return ret;
>  }
>  
> Index: linux-2.6.22-rc3/include/asm-i386/perfmon.h
> ===================================================================
> --- linux-2.6.22-rc3.orig/include/asm-i386/perfmon.h
> +++ linux-2.6.22-rc3/include/asm-i386/perfmon.h
> @@ -140,6 +140,10 @@ static inline void pfm_arch_write_pmc(st
>  	if (ctx && ctx->flags.started == 0)
>  		return;
>  
> +	PFM_DBG_ovfl("pfm_arch_write_pmc(0x%016Lx, 0x%016Lx)",
> +		     (unsigned long long) pfm_pmu_conf->pmc_desc[cnum].hw_addr,
> +		     (unsigned long long) value);
> +	BUG_ON(pfm_pmu_conf->pmc_desc[cnum].type & PFM_REG_V);
>  	if (arch_info->pmu_style == PFM_X86_PMU_P4)
>  		__pfm_write_reg_p4(&arch_info->pmc_addrs[cnum], value);
>  	else
> @@ -155,6 +159,10 @@ static inline void pfm_arch_write_pmd(st
>  	if (pfm_pmu_conf->pmd_desc[cnum].type & PFM_REG_C64)
>  		value |= ~pfm_pmu_conf->ovfl_mask;
>  
> +	PFM_DBG_ovfl("pfm_arch_write_pmd(0x%016Lx, 0x%016Lx)",
> +		     (unsigned long long) pfm_pmu_conf->pmd_desc[cnum].hw_addr,
> +		     (unsigned long long) value);
> +	BUG_ON(pfm_pmu_conf->pmd_desc[cnum].type & PFM_REG_V);
>  	if (arch_info->pmu_style == PFM_X86_PMU_P4)
>  		__pfm_write_reg_p4(&arch_info->pmd_addrs[cnum], value);
>  	else
> @@ -165,10 +173,14 @@ static inline u64 pfm_arch_read_pmd(stru
>  {
>  	struct pfm_arch_pmu_info *arch_info = pfm_pmu_conf->arch_info;
>  	u64 tmp;
> +	BUG_ON(pfm_pmu_conf->pmd_desc[cnum].type & PFM_REG_V);
>  	if (arch_info->pmu_style == PFM_X86_PMU_P4)
>  		__pfm_read_reg_p4(&arch_info->pmd_addrs[cnum], &tmp);
>  	else
>  		rdmsrl(pfm_pmu_conf->pmd_desc[cnum].hw_addr, tmp);
> +	PFM_DBG_ovfl("pfm_arch_read_pmd(0x%016Lx) = 0x%016Lx",
> +		     (unsigned long long) pfm_pmu_conf->pmd_desc[cnum].hw_addr,
> +		     (unsigned long long) tmp);
>  	return tmp;
>  }
>  
> @@ -176,10 +188,14 @@ static inline u64 pfm_arch_read_pmc(stru
>  {
>  	struct pfm_arch_pmu_info *arch_info = pfm_pmu_conf->arch_info;
>  	u64 tmp;
> +	BUG_ON(pfm_pmu_conf->pmc_desc[cnum].type & PFM_REG_V);
>  	if (arch_info->pmu_style == PFM_X86_PMU_P4)
>  		__pfm_read_reg_p4(&arch_info->pmc_addrs[cnum], &tmp);
>  	else
>  		rdmsrl(pfm_pmu_conf->pmc_desc[cnum].hw_addr, tmp);
> +        PFM_DBG_ovfl("pfm_arch_read_pmc(0x%016Lx) = 0x%016Lx",
> +		     (unsigned long long) pfm_pmu_conf->pmc_desc[cnum].hw_addr,
> +		     (unsigned long long) tmp);
>  	return tmp;
>  }
>  
> Index: linux-2.6.22-rc3/perfmon/perfmon.c
> ===================================================================
> --- linux-2.6.22-rc3.orig/perfmon/perfmon.c
> +++ linux-2.6.22-rc3/perfmon/perfmon.c
> @@ -865,7 +865,8 @@ int __init pfm_init(void)
>  {
>  	int ret;
>  
> -	PFM_LOG("version %u.%u", PFM_VERSION_MAJ, PFM_VERSION_MIN);
> +	PFM_LOG("version %u.%u, compiled: " __DATE__ ", " __TIME__,
> +		PFM_VERSION_MAJ, PFM_VERSION_MIN);
>  
>  	pfm_ctx_cachep = kmem_cache_create("pfm_context",
>  				   sizeof(struct pfm_context)+PFM_ARCH_CTX_SIZE,
> Index: linux-2.6.22-rc3/perfmon/perfmon_intr.c
> ===================================================================
> --- linux-2.6.22-rc3.orig/perfmon/perfmon_intr.c
> +++ linux-2.6.22-rc3/perfmon/perfmon_intr.c
> @@ -170,6 +170,7 @@ static void pfm_overflow_handler(struct 
>  		 * check for overflow condition
>  		 */
>  		if (likely(old_val > new_val)) {
> +			PFM_DBG_ovfl("64 bit overflow of PMD%d", i);
>  			has_64b_ovfl = 1;
>  			if (has_ovfl_sw && ovfl_thres > 0) {
>  				if (ovfl_thres == 1)
> @@ -188,11 +189,13 @@ static void pfm_overflow_handler(struct 
>  				  max_pmd);
>  
>  		} else {
> +			PFM_DBG_ovfl("Hardware counter overflow of PMD%d=0x%04llx",
> +				i, new_val);
>  			/* only keep track of 64-bit overflows */
>  			__clear_bit(i, ulp(pend_ovfls));
>  			/*
> -		 	 * on some PMU, it may be necessary to re-arm the PMD
> -		 	 */
> +			 * on some PMU, it may be necessary to re-arm the PMD
> +			 */
>  			pfm_arch_ovfl_reset_pmd(ctx, i);
>  		}
>  
> 
> --
> AMD Saxony, Dresden, Germany
> Operating System Research Center
> email: robert.richter@amd.com
> 
> 
> 

-- 

-Stephane

  reply	other threads:[~2007-06-19 12:40 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-15 16:56 [patch 0/8] " Robert Richter
2007-06-15 16:57 ` [patch 1/8] " Robert Richter
2007-06-15 18:54   ` David Rientjes
2007-06-20 18:36     ` Robert Richter
2007-06-19 12:39   ` Stephane Eranian
2007-06-15 16:58 ` [patch 2/8] " Robert Richter
2007-06-19 12:39   ` Stephane Eranian [this message]
2007-06-15 16:58 ` [patch 3/8] " Robert Richter
2007-06-19 12:40   ` Stephane Eranian
2007-06-15 16:59 ` [patch 4/8] " Robert Richter
2007-06-15 18:52   ` David Rientjes
2007-06-20 18:36     ` Robert Richter
2007-06-19 13:34   ` Stephane Eranian
2007-06-15 17:00 ` [patch 5/8] " Robert Richter
2007-06-15 17:00 ` [patch 6/8] " Robert Richter
2007-06-15 20:15   ` David Rientjes
2007-06-20 18:38     ` Robert Richter
2007-06-15 17:01 ` [patch 7/8] " Robert Richter
2007-06-15 17:02 ` [patch 8/8] " Robert Richter

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=20070619123951.GC23051@frankl.hpl.hp.com \
    --to=eranian@hpl.hp.com \
    --cc=andi@firstfloor.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robert.richter@amd.com \
    /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

all inboxes | Powered by JetHome®