From owner-svn-src-head@FreeBSD.ORG Tue Dec 2 10:46:36 2008 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2E4671065672; Tue, 2 Dec 2008 10:46:36 +0000 (UTC) (envelope-from jkoshy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1FEBA8FC18; Tue, 2 Dec 2008 10:46:36 +0000 (UTC) (envelope-from jkoshy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mB2AkZ00056619; Tue, 2 Dec 2008 10:46:35 GMT (envelope-from jkoshy@svn.freebsd.org) Received: (from jkoshy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mB2AkZFo056617; Tue, 2 Dec 2008 10:46:35 GMT (envelope-from jkoshy@svn.freebsd.org) Message-Id: <200812021046.mB2AkZFo056617@svn.freebsd.org> From: Joseph Koshy Date: Tue, 2 Dec 2008 10:46:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185555 - head/sys/dev/hwpmc X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Dec 2008 10:46:36 -0000 Author: jkoshy Date: Tue Dec 2 10:46:35 2008 New Revision: 185555 URL: http://svn.freebsd.org/changeset/base/185555 Log: - Efficiency tweak: when checking for PMC overflows, only go to hardware for PMCs that have been configured for sampling. - Bug fix: acknowledge PMC hardware overflows irrespective of the the (software) PMC's state. Modified: head/sys/dev/hwpmc/hwpmc_amd.c head/sys/dev/hwpmc/hwpmc_ppro.c Modified: head/sys/dev/hwpmc/hwpmc_amd.c ============================================================================== --- head/sys/dev/hwpmc/hwpmc_amd.c Tue Dec 2 10:39:47 2008 (r185554) +++ head/sys/dev/hwpmc/hwpmc_amd.c Tue Dec 2 10:46:35 2008 (r185555) @@ -632,7 +632,6 @@ amd_intr(int cpu, struct trapframe *tf) uint32_t config, evsel, perfctr; struct pmc *pm; struct amd_cpu *pac; - struct pmc_hw *phw; pmc_value_t v; KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), @@ -660,21 +659,19 @@ amd_intr(int cpu, struct trapframe *tf) for (i = 0; retval == 0 && i < AMD_NPMCS; i++) { - if (!AMD_PMC_HAS_OVERFLOWED(i)) - continue; - - phw = &pac->pc_amdpmcs[i]; - - KASSERT(phw != NULL, ("[amd,%d] null PHW pointer", __LINE__)); - - if ((pm = phw->phw_pmc) == NULL || - pm->pm_state != PMC_STATE_RUNNING || + if ((pm = pac->pc_amdpmcs[i].phw_pmc) == NULL || !PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) { continue; } + if (!AMD_PMC_HAS_OVERFLOWED(i)) + continue; + retval = 1; /* Found an interrupting PMC. */ + if (pm->pm_state != PMC_STATE_RUNNING) + continue; + /* Stop the PMC, reload count. */ evsel = AMD_PMC_EVSEL_0 + i; perfctr = AMD_PMC_PERFCTR_0 + i; Modified: head/sys/dev/hwpmc/hwpmc_ppro.c ============================================================================== --- head/sys/dev/hwpmc/hwpmc_ppro.c Tue Dec 2 10:39:47 2008 (r185554) +++ head/sys/dev/hwpmc/hwpmc_ppro.c Tue Dec 2 10:46:35 2008 (r185555) @@ -688,17 +688,19 @@ p6_intr(int cpu, struct trapframe *tf) for (ri = 0; ri < P6_NPMCS; ri++) { - if (!P6_PMC_HAS_OVERFLOWED(ri)) - continue; - if ((pm = pc->pc_p6pmcs[ri].phw_pmc) == NULL || - pm->pm_state != PMC_STATE_RUNNING || !PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) { continue; } + if (!P6_PMC_HAS_OVERFLOWED(ri)) + continue; + retval = 1; + if (pm->pm_state != PMC_STATE_RUNNING) + continue; + error = pmc_process_interrupt(cpu, pm, tf, TRAPF_USERMODE(tf)); if (error)