|
@@ -51,7 +51,8 @@ union intel_x86_pebs_dse {
|
|
#define OP_LH (P(OP, LOAD) | P(LVL, HIT))
|
|
#define OP_LH (P(OP, LOAD) | P(LVL, HIT))
|
|
#define SNOOP_NONE_MISS (P(SNOOP, NONE) | P(SNOOP, MISS))
|
|
#define SNOOP_NONE_MISS (P(SNOOP, NONE) | P(SNOOP, MISS))
|
|
|
|
|
|
-static const u64 pebs_data_source[] = {
|
|
|
|
|
|
+/* Version for Sandy Bridge and later */
|
|
|
|
+static u64 pebs_data_source[] = {
|
|
P(OP, LOAD) | P(LVL, MISS) | P(LVL, L3) | P(SNOOP, NA),/* 0x00:ukn L3 */
|
|
P(OP, LOAD) | P(LVL, MISS) | P(LVL, L3) | P(SNOOP, NA),/* 0x00:ukn L3 */
|
|
OP_LH | P(LVL, L1) | P(SNOOP, NONE), /* 0x01: L1 local */
|
|
OP_LH | P(LVL, L1) | P(SNOOP, NONE), /* 0x01: L1 local */
|
|
OP_LH | P(LVL, LFB) | P(SNOOP, NONE), /* 0x02: LFB hit */
|
|
OP_LH | P(LVL, LFB) | P(SNOOP, NONE), /* 0x02: LFB hit */
|
|
@@ -70,6 +71,14 @@ static const u64 pebs_data_source[] = {
|
|
OP_LH | P(LVL, UNC) | P(SNOOP, NONE), /* 0x0f: uncached */
|
|
OP_LH | P(LVL, UNC) | P(SNOOP, NONE), /* 0x0f: uncached */
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/* Patch up minor differences in the bits */
|
|
|
|
+void __init intel_pmu_pebs_data_source_nhm(void)
|
|
|
|
+{
|
|
|
|
+ pebs_data_source[0x05] = OP_LH | P(LVL, L3) | P(SNOOP, HIT);
|
|
|
|
+ pebs_data_source[0x06] = OP_LH | P(LVL, L3) | P(SNOOP, HITM);
|
|
|
|
+ pebs_data_source[0x07] = OP_LH | P(LVL, L3) | P(SNOOP, HITM);
|
|
|
|
+}
|
|
|
|
+
|
|
static u64 precise_store_data(u64 status)
|
|
static u64 precise_store_data(u64 status)
|
|
{
|
|
{
|
|
union intel_x86_pebs_dse dse;
|
|
union intel_x86_pebs_dse dse;
|