svn commit: r229397 - stable/9/sys/dev/hwpmc
Fabien Thomas
fabient at FreeBSD.org
Tue Jan 3 17:15:27 UTC 2012
Author: fabient
Date: Tue Jan 3 17:15:27 2012
New Revision: 229397
URL: http://svn.freebsd.org/changeset/base/229397
Log:
MFC r228438:
There's a small set of events on Nehalem, that are not supported in
processors with CPUID signature 06_1AH, 06_1EH, and 06_1FH.
Modified:
stable/9/sys/dev/hwpmc/hwpmc_core.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/dev/hwpmc/hwpmc_core.c
==============================================================================
--- stable/9/sys/dev/hwpmc/hwpmc_core.c Tue Jan 3 17:07:11 2012 (r229396)
+++ stable/9/sys/dev/hwpmc/hwpmc_core.c Tue Jan 3 17:15:27 2012 (r229397)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <machine/apicvar.h>
#include <machine/cpu.h>
#include <machine/cpufunc.h>
+#include <machine/md_var.h>
#include <machine/specialreg.h>
#define CORE_CPUID_REQUEST 0xA
@@ -1553,7 +1554,7 @@ static int
iap_allocate_pmc(int cpu, int ri, struct pmc *pm,
const struct pmc_op_pmcallocate *a)
{
- int n;
+ int n, model;
enum pmc_event ev;
struct iap_event_descr *ie;
uint32_t c, caps, config, cpuflag, evsel, mask;
@@ -1573,6 +1574,16 @@ iap_allocate_pmc(int cpu, int ri, struct
if (iap_architectural_event_is_unsupported(ev))
return (EOPNOTSUPP);
+ /*
+ * A small number of events are not supported in all the
+ * processors based on a given microarchitecture.
+ */
+ if (ev == PMC_EV_IAP_EVENT_0FH_01H || ev == PMC_EV_IAP_EVENT_0FH_80H) {
+ model = ((cpu_id & 0xF0000) >> 12) | ((cpu_id & 0xF0) >> 4);
+ if (core_cputype == PMC_CPU_INTEL_COREI7 && model != 0x2E)
+ return (EINVAL);
+ }
+
switch (core_cputype) {
case PMC_CPU_INTEL_COREI7:
if (iap_event_corei7_ok_on_counter(ev, ri) == 0)
More information about the svn-src-stable-9
mailing list