opd_ibs_trans.c revision 5a4eb4eb367eccd4b976d1feae96cea96d2c50f2
15a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 25a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @file daemon/opd_ibs_trans.c 35a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * AMD Family10h Instruction Based Sampling (IBS) translation. 45a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 55a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Copyright 2008 OProfile authors 65a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Read the file COPYING 75a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 85a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Jason Yeh <jason.yeh@amd.com> 95a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Paul Drongowski <paul.drongowski@amd.com> 105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> 115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Copyright (c) 2008 Advanced Micro Devices, Inc. 125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs.h" 155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs_macro.h" 165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs_trans.h" 175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_trans.h" 185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_printf.h" 195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdlib.h> 215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdio.h> 225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#define MAX_EVENTS_PER_GROUP 32 245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP DERIVED FUNCTION 275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_fetch (struct transient * trans, unsigned int selected_flag, unsigned int size) 295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch; 315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng unsigned int i, j, mask = 1; 325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng for (i = IBS_FETCH_BASE, j =0 ; i <= IBS_FETCH_END && j < size ; i++, mask = mask << 1) { 345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((selected_flag & mask) == 0) 365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng continue; 375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng j++; 395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng switch (i) { 415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_ALL: 435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS all fetch samples (kills + attempts) */ 445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_ALL); 455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_KILLED: 485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS killed fetches ("case 0") -- All interesting event 495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * flags are clear */ 505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_KILLED(trans_fetch)) 515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_KILLED); 525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_ATTEMPTED: 555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Any non-killed fetch is an attempted fetch */ 565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_ATTEMPTED); 575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_COMPLETED: 605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_FETCH_COMPLETION(trans_fetch)) 615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS Fetch Completed */ 625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_COMPLETED); 635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_ABORTED: 665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_FETCH_FETCH_COMPLETION(trans_fetch)) 675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS Fetch Aborted */ 685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_ABORTED); 695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_L1_ITLB_HIT: 725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS L1 ITLB hit */ 735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_L1_TLB_HIT(trans_fetch)) 745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_L1_ITLB_HIT); 755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_ITLB_L1M_L2H: 785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS L1 ITLB miss and L2 ITLB hit */ 795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_ITLB_L1M_L2H(trans_fetch)) 805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2H); 815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_ITLB_L1M_L2M: 845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS L1 & L2 ITLB miss; complete ITLB miss */ 855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_ITLB_L1M_L2M(trans_fetch)) 865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2M); 875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_IC_MISS: 905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS instruction cache miss */ 915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_INST_CACHE_MISS(trans_fetch)) 925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_IC_MISS); 935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_IC_HIT: 965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS instruction cache hit */ 975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_INST_CACHE_HIT(trans_fetch)) 985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_IC_HIT); 995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_4K_PAGE: 1025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 1035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) == L1TLB4K) 1045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_4K_PAGE); 1055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_2M_PAGE: 1085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 1095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) == L1TLB2M) 1105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_2M_PAGE); 1115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_1G_PAGE: 1145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 1155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) == L1TLB1G) 1165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_FETCH_1G_PAGE); 1175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_XX_PAGE: 1205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_FETCH_LATENCY: 1235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_FETCH_FETCH_LATENCY(trans_fetch)) 1245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_FETCH_LATENCY, 1255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_FETCH_FETCH_LATENCY(trans_fetch)); 1265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng default: 1285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 1305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 1315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 1325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 1345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP DERIVED FUNCTION 1355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 1365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op (struct transient * trans, unsigned int selected_flag, unsigned int size) 1375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 1385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 1395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng unsigned int i, j, mask = 1; 1405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng for (i = IBS_OP_BASE, j =0 ; i <= IBS_OP_END && j < size ; i++, mask = mask << 1) { 1425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((selected_flag & mask) == 0) 1445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng continue; 1455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng j++; 1475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng switch (i) { 1495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_OP_ALL: 1515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* All IBS op samples */ 1525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_OP_ALL); 1535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_OP_TAG_TO_RETIRE: 1565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Tally retire cycle counts for all sampled macro-ops 1575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * IBS tag to retire cycles */ 1585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op)) 1595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_OP_TAG_TO_RETIRE, 1605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op)); 1615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_OP_COMP_TO_RETIRE: 1645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS completion to retire cycles */ 1655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_COM_TO_RETIRE_CYCLES(trans_op)) 1665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_OP_COMP_TO_RETIRE, 1675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_OP_COM_TO_RETIRE_CYCLES(trans_op)); 1685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_BRANCH_RETIRED: 1715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op)) 1725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS Branch retired op */ 1735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_BRANCH_RETIRED) ; 1745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_BRANCH_MISP: 1775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op) 1785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Test branch-specific event flags */ 1795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS mispredicted Branch op */ 1805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_BRANCH_MISPREDICT(trans_op)) 1815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_BRANCH_MISP) ; 1825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_BRANCH_TAKEN: 1855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op) 1865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS taken Branch op */ 1875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_BRANCH_TAKEN(trans_op)) 1885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_BRANCH_TAKEN); 1895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_BRANCH_MISP_TAKEN: 1925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op) 1935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS mispredicted taken branch op */ 1945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_BRANCH_TAKEN(trans_op) 1955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_BRANCH_MISPREDICT(trans_op)) 1965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_BRANCH_MISP_TAKEN); 1975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 1985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_RETURN: 2005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op) 2015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS return op */ 2025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_RETURN(trans_op)) 2035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_RETURN); 2045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_RETURN_MISP: 2075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RETIRED(trans_op) 2085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* IBS mispredicted return op */ 2095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_RETURN(trans_op) 2105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_OP_BRANCH_MISPREDICT(trans_op)) 2115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_RETURN_MISP); 2125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_RESYNC: 2155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Test for a resync macro-op */ 2165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_OP_BRANCH_RESYNC(trans_op)) 2175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_RESYNC); 2185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng default: 2205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 2225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 2235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 2245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 2275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP LS DERIVED FUNCTION 2285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 2295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op_ls (struct transient * trans, unsigned int selected_flag, unsigned int size) 2305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 2315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 2325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng unsigned int i, j, mask = 1; 2335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Preliminary check */ 2355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_LD_OP(trans_op) && !IBS_OP_IBS_ST_OP(trans_op)) 2365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 2375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng for (i = IBS_OP_LS_BASE, j =0 ; i <= IBS_OP_LS_END && j < size ; i++, mask = mask << 1) { 2405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((selected_flag & mask) == 0) 2425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng continue; 2435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng j++; 2455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng switch (i) { 2475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_ALL_OP: 2495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Count the number of LS op samples */ 2505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_ALL_OP) ; 2515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_LOAD_OP: 2545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_LD_OP(trans_op)) 2555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* TALLy an IBS load derived event */ 2565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_LOAD_OP) ; 2575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_STORE_OP: 2605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_ST_OP(trans_op)) 2615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Count and handle store operations */ 2625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_STORE_OP); 2635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DTLB_L1H: 2665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)) 2685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L1 DTLB hit -- This is the most frequent case */ 2695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1H); 2705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DTLB_L1M_L2H: 2735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l2_translation_size = 1 */ 2745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 2765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)) 2775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L1 DTLB miss, L2 DTLB hit */ 2785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2H); 2795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DTLB_L1M_L2M: 2825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 2845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)) 2855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L1 DTLB miss, L2 DTLB miss */ 2865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2M); 2875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DC_MISS: 2905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_MISS(trans_op)) 2915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_DC_MISS); 2925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DC_HIT: 2955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_DC_MISS(trans_op)) 2965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_DC_HIT); 2975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 2985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_MISALIGNED: 3005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_MISS_ACC(trans_op)) 3015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_MISALIGNED); 3025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_BNK_CONF_LOAD: 3055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LD_BNK_CON(trans_op)) 3065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_LOAD); 3075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_BNK_CONF_STORE: 3105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_ST_BNK_CON(trans_op)) 3115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_STORE); 3125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_STL_FORWARDED: 3155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_LD_OP(trans_op) 3165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Data forwarding info are valid only for load ops */ 3175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_ST_TO_LD_FWD(trans_op)) 3185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_STL_FORWARDED) ; 3195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_STL_CANCELLED: 3225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_LD_OP(trans_op)) 3235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_ST_TO_LD_CAN(trans_op)) 3245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_STL_CANCELLED) ; 3255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_UC_MEM_ACCESS: 3285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_UC_MEM_ACC(trans_op)) 3295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_UC_MEM_ACCESS); 3305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_WC_MEM_ACCESS: 3335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_WC_MEM_ACC(trans_op)) 3345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_WC_MEM_ACCESS); 3355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_LOCKED_OP: 3385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_LOCKED_OP(trans_op)) 3395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_LOCKED_OP); 3405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_MAB_HIT: 3435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_MAB_HIT(trans_op)) 3445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_MAB_HIT); 3455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L1_DTLB_4K: 3485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l1_translation */ 3495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op) 3535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op)) 3545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* This is the most common case, unfortunately */ 3555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_4K) ; 3565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L1_DTLB_2M: 3595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l1_translation */ 3605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)) 3645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* 2M L1 DTLB page translation */ 3655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_2M); 3665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L1_DTLB_1G: 3695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l1_translation */ 3705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op) 3745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op)) 3755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* 1G L1 DTLB page translation */ 3765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_1G); 3775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L1_DTLB_RES: 3805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L2_DTLB_4K: 3835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l2_translation_size = 1 */ 3845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 3875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L2 DTLB page translation */ 3895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 3905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 3915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* 4K L2 DTLB page translation */ 3925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_4K); 3935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 3945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 3955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L2_DTLB_2M: 3965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l2_translation_size = 1 */ 3975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 4005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L2 DTLB page translation */ 4025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 4035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 4045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* 2M L2 DTLB page translation */ 4055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_2M); 4065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L2_DTLB_1G: 4095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* l2_translation_size = 1 */ 4105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 4115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 4125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 4135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* L2 DTLB page translation */ 4155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 4165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 4175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* 2M L2 DTLB page translation */ 4185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_1G); 4195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_L2_DTLB_RES2: 4225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_LS_DC_LOAD_LAT: 4255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_IBS_LD_OP(trans_op) 4265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* If the load missed in DC, tally the DC load miss latency */ 4275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_IBS_DC_MISS(trans_op)) 4285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* DC load miss latency is only reliable for load ops */ 4295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_LS_DC_LOAD_LAT, 4305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_OP_DC_MISS_LATENCY(trans_op)) ; 4315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng default: 4345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 4365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 4375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 4385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 4405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP NB DERIVED FUNCTION 4415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 4425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * NB data is only guaranteed reliable for load operations 4435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * that miss in L1 and L2 cache. NB data arrives too late 4445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * to be reliable for store operations 4455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 4465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op_nb (struct transient * trans, unsigned int selected_flag, unsigned int size) 4475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 4485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 4495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng unsigned int i, j, mask = 1; 4505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Preliminary check */ 4525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_LD_OP(trans_op)) 4535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_DC_MISS(trans_op)) 4565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0) 4595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng for (i = IBS_OP_NB_BASE, j =0 ; i <= IBS_OP_NB_END && j < size ; i++, mask = mask << 1) { 4625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((selected_flag & mask) == 0) 4645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng continue; 4655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng j++; 4675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng switch (i) { 4695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL: 4715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 4725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Request was serviced by local processor */ 4735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_LOCAL) ; 4745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_REMOTE: 4775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 4785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Request was serviced by remote processor */ 4795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_REMOTE) ; 4805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL_L3: 4835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x1)) 4855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_LOCAL_L3); 4865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL_CACHE: 4895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2)) 4915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_LOCAL_CACHE); 4925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_REMOTE_CACHE: 4955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2)) 4975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_REMOTE_CACHE) ; 4985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 4995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL_DRAM: 5015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 5025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x3)) 5035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_LOCAL_DRAM); 5045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_REMOTE_DRAM: 5075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 5085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x3)) 5095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_REMOTE_DRAM) ; 5105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL_OTHER: 5135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 5145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x7)) 5155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_LOCAL_OTHER); 5165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_REMOTE_OTHER: 5195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 5205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x7)) 5215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_REMOTE_OTHER) ; 5225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_CACHE_STATE_M: 5255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2) 5265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && !IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op)) 5275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_M) ; 5285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_CACHE_STATE_O: 5315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if ((IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2) 5325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng && IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op)) 5335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_O) ; 5345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_LOCAL_LATENCY: 5375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 5385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Request was serviced by local processor */ 5395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_NB_LOCAL_LATENCY, 5405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_OP_DC_MISS_LATENCY(trans_op)); 5415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng case DE_IBS_NB_REMOTE_LATENCY: 5445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 5455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Request was serviced by remote processor */ 5465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng AGG_IBS_COUNT(DE_IBS_NB_REMOTE_LATENCY, 5475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng IBS_OP_DC_MISS_LATENCY(trans_op)); 5485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 5505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng default: 5515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng break; 5525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 5535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 5545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 555