svn commit: r192576 - user/kmacy/releng_7_2_fcs/sys/dev/hwpmc
Kip Macy
kmacy at FreeBSD.org
Fri May 22 05:11:04 UTC 2009
Author: kmacy
Date: Fri May 22 05:11:03 2009
New Revision: 192576
URL: http://svn.freebsd.org/changeset/base/192576
Log:
update piv and amd
Modified:
user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_amd.c
user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_piv.c
Modified: user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_amd.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_amd.c Fri May 22 04:49:59 2009 (r192575)
+++ user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_amd.c Fri May 22 05:11:03 2009 (r192576)
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2003-2007 Joseph Koshy
+ * Copyright (c) 2003-2008 Joseph Koshy
* Copyright (c) 2007 The FreeBSD Foundation
* All rights reserved.
*
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/pmc.h>
+#include <sys/pmckern.h>
#include <sys/smp.h>
#include <sys/systm.h>
@@ -265,7 +266,7 @@ amd_read_pmc(int cpu, int ri, pmc_value_
struct pmc *pm;
pmc_value_t tmp;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -290,12 +291,15 @@ amd_read_pmc(int cpu, int ri, pmc_value_
#endif
tmp = rdmsr(pd->pm_perfctr); /* RDMSR serializes */
- if (PMC_IS_SAMPLING_MODE(mode))
- *v = AMD_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp);
- else
- *v = tmp;
+ PMCDBG(MDP,REA,2,"amd-read (pre-munge) id=%d -> %jd", ri, tmp);
+ if (PMC_IS_SAMPLING_MODE(mode)) {
+ /* Sign extend 48 bit value to 64 bits. */
+ tmp = (pmc_value_t) (((int64_t) tmp << 16) >> 16);
+ tmp = AMD_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp);
+ }
+ *v = tmp;
- PMCDBG(MDP,REA,2,"amd-read id=%d -> %jd", ri, *v);
+ PMCDBG(MDP,REA,2,"amd-read (post-munge) id=%d -> %jd", ri, *v);
return 0;
}
@@ -311,7 +315,7 @@ amd_write_pmc(int cpu, int ri, pmc_value
enum pmc_mode mode;
struct pmc *pm;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -354,7 +358,7 @@ amd_config_pmc(int cpu, int ri, struct p
PMCDBG(MDP,CFG,1, "cpu=%d ri=%d pm=%p", cpu, ri, pm);
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -436,7 +440,7 @@ amd_allocate_pmc(int cpu, int ri, struct
(void) cpu;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row index %d", __LINE__, ri));
@@ -518,7 +522,7 @@ amd_release_pmc(int cpu, int ri, struct
(void) pmc;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -550,7 +554,7 @@ amd_start_pmc(int cpu, int ri)
struct pmc_hw *phw;
const struct amd_descr *pd;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -590,7 +594,7 @@ amd_stop_pmc(int cpu, int ri)
const struct amd_descr *pd;
uint64_t config;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -628,13 +632,12 @@ 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 < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] out of range CPU %d", __LINE__, cpu));
- PMCDBG(MDP,INT,1, "cpu=%d tf=0x%p um=%d", cpu, (void *) tf,
+ PMCDBG(MDP,INT,1, "cpu=%d tf=%p um=%d", cpu, (void *) tf,
TRAPF_USERMODE(tf));
retval = 0;
@@ -656,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;
@@ -708,7 +709,7 @@ amd_describe(int cpu, int ri, struct pmc
const struct amd_descr *pd;
struct pmc_hw *phw;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < AMD_NPMCS,
("[amd,%d] row-index %d out of range", __LINE__, ri));
@@ -764,7 +765,7 @@ amd_pcpu_init(struct pmc_mdep *md, int c
struct amd_cpu *pac;
struct pmc_hw *phw;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] insane cpu number %d", __LINE__, cpu));
PMCDBG(MDP,INI,1,"amd-init cpu=%d", cpu);
@@ -811,7 +812,7 @@ amd_pcpu_fini(struct pmc_mdep *md, int c
struct pmc_cpu *pc;
struct amd_cpu *pac;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] insane cpu number (%d)", __LINE__, cpu));
PMCDBG(MDP,INI,1,"amd-cleanup cpu=%d", cpu);
@@ -954,7 +955,7 @@ pmc_amd_initialize(void)
for (i = 0; i < AMD_NPMCS; i++) {
(void) snprintf(amd_pmcdesc[i].pm_descr.pd_name,
sizeof(amd_pmcdesc[i].pm_descr.pd_name), "%s-%d",
- name, i-1);
+ name, i);
amd_pmcdesc[i].pm_descr.pd_class = class;
}
Modified: user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_piv.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_piv.c Fri May 22 04:49:59 2009 (r192575)
+++ user/kmacy/releng_7_2_fcs/sys/dev/hwpmc/hwpmc_piv.c Fri May 22 05:11:03 2009 (r192576)
@@ -490,8 +490,8 @@ static int p4_escrdisp[P4_NESCR];
KASSERT(p4_escrdisp[(E)] <= 0, ("[p4,%d] row disposition error",\
__LINE__)); \
atomic_add_int(&p4_escrdisp[(E)], -1); \
- KASSERT(p4_escrdisp[(E)] >= (-mp_ncpus), ("[p4,%d] row " \
- "disposition error", __LINE__)); \
+ KASSERT(p4_escrdisp[(E)] >= (-pmc_cpu_max_active()), \
+ ("[p4,%d] row disposition error", __LINE__)); \
} while (0)
#define P4_ESCR_UNMARK_ROW_STANDALONE(E) do { \
@@ -554,11 +554,11 @@ p4_pcpu_init(struct pmc_mdep *md, int cp
struct p4_cpu *p4c;
struct pmc_cpu *pc, *plc;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] insane cpu number %d", __LINE__, cpu));
- PMCDBG(MDP,INI,0, "p4-init cpu=%d logical=%d", cpu,
- pmc_cpu_is_logical(cpu) != 0);
+ PMCDBG(MDP,INI,0, "p4-init cpu=%d is-primary=%d", cpu,
+ pmc_cpu_is_primary(cpu) != 0);
first_ri = md->pmd_classdep[PMC_MDEP_CLASS_INDEX_P4].pcd_ri;
@@ -574,7 +574,7 @@ p4_pcpu_init(struct pmc_mdep *md, int cp
* secondary.
*/
- if (pmc_cpu_is_logical(cpu) && (cpu & 1)) {
+ if (!pmc_cpu_is_primary(cpu) && (cpu & 1)) {
p4_system_has_htt = 1;
@@ -678,7 +678,7 @@ p4_read_pmc(int cpu, int ri, pmc_value_t
enum pmc_mode mode;
struct p4pmc_descr *pd;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[p4,%d] illegal row-index %d", __LINE__, ri));
@@ -735,7 +735,7 @@ p4_write_pmc(int cpu, int ri, pmc_value_
const struct pmc_hw *phw;
const struct p4pmc_descr *pd;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[amd,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[amd,%d] illegal row-index %d", __LINE__, ri));
@@ -788,7 +788,7 @@ p4_config_pmc(int cpu, int ri, struct pm
struct p4_cpu *pc;
int cfgflags, cpuflag;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
@@ -917,7 +917,7 @@ p4_allocate_pmc(int cpu, int ri, struct
struct p4_event_descr *pevent;
const struct p4pmc_descr *pd;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[p4,%d] illegal row-index value %d", __LINE__, ri));
@@ -1153,7 +1153,7 @@ p4_start_pmc(int cpu, int ri)
struct p4pmc_descr *pd;
uint32_t cccrvalue, cccrtbits, escrvalue, escrmsr, escrtbits;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[p4,%d] illegal row-index %d", __LINE__, ri));
@@ -1299,7 +1299,7 @@ p4_stop_pmc(int cpu, int ri)
struct p4pmc_descr *pd;
pmc_value_t tmp;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU value %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[p4,%d] illegal row index %d", __LINE__, ri));
@@ -1557,7 +1557,7 @@ p4_describe(int cpu, int ri, struct pmc_
size_t copied;
const struct p4pmc_descr *pd;
- KASSERT(cpu >= 0 && cpu < mp_ncpus,
+ KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
("[p4,%d] illegal CPU %d", __LINE__, cpu));
KASSERT(ri >= 0 && ri < P4_NPMCS,
("[p4,%d] row-index %d out of range", __LINE__, ri));
More information about the svn-src-user
mailing list