15a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/** 25a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @file daemon/opd_ibs_trans.c 37a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * AMD Instruction Based Sampling (IBS) translation. 45a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 57a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * @remark Copyright 2008 - 2010 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 237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownextern FILE * bta_log; 247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownextern FILE * memaccess_log; 255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * --------------------- FETCH DERIVED FUNCTION 285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_fetch (struct transient * trans, unsigned int selected_flag) 305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch; 327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if ((selected_flag) == 0) 347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ALL) { 377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS all fetch samples (kills + attempts) */ 387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_ALL); 397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_KILLED) { 427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS killed fetches ("case 0") -- All interesting event 437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * flags are clear */ 447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_KILLED(trans_fetch)) 457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_KILLED); 467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ATTEMPTED) { 497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Any non-killed fetch is an attempted fetch */ 507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_ATTEMPTED); 517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_COMPLETED) { 547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_FETCH_COMPLETION(trans_fetch)) 557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS Fetch Completed */ 567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_COMPLETED); 577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_ABORTED) { 607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_FETCH_FETCH_COMPLETION(trans_fetch)) 617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS Fetch Aborted */ 627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_ABORTED); 637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_L1_ITLB_HIT) { 667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS L1 ITLB hit */ 677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_L1_TLB_HIT(trans_fetch)) 687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_L1_ITLB_HIT); 697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_ITLB_L1M_L2H) { 727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS L1 ITLB miss and L2 ITLB hit */ 737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_ITLB_L1M_L2H(trans_fetch)) 747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2H); 757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_ITLB_L1M_L2M) { 787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS L1 & L2 ITLB miss; complete ITLB miss */ 797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_ITLB_L1M_L2M(trans_fetch)) 807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2M); 817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_IC_MISS) { 847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS instruction cache miss */ 857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_INST_CACHE_MISS(trans_fetch)) 867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_IC_MISS); 877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_IC_HIT) { 907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS instruction cache hit */ 917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_INST_CACHE_HIT(trans_fetch)) 927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_IC_HIT); 937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_4K_PAGE) { 967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_FETCH_TLB_PAGE_SIZE_4K(trans_fetch)) 987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_4K_PAGE); 997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_2M_PAGE) { 1027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 1037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_FETCH_TLB_PAGE_SIZE_2M(trans_fetch)) 1047a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_2M_PAGE); 1057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_1G_PAGE) { 1087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch) 1097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_FETCH_TLB_PAGE_SIZE_1G(trans_fetch)) 1107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_FETCH_1G_PAGE); 1117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_XX_PAGE) { 1147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_FETCH_SELECTED_FLAG(DE_IBS_FETCH_LATENCY) { 1177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_FETCH_FETCH_LATENCY(trans_fetch)) 1187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_FETCH_LATENCY, 1197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_FETCH_FETCH_LATENCY(trans_fetch)); 1205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 1215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 1225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 1237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 1255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP DERIVED FUNCTION 1265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 1277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op (struct transient * trans, unsigned int selected_flag) 1285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 1295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 1307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if ((selected_flag) == 0) 1327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 1337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_OP_ALL) { 1357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* All IBS op samples */ 1367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_OP_ALL); 1377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_OP_TAG_TO_RETIRE) { 1407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Tally retire cycle counts for all sampled macro-ops 1417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown * IBS tag to retire cycles */ 1427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op)) 1437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_OP_TAG_TO_RETIRE, 1447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op)); 1457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_OP_COMP_TO_RETIRE) { 1487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS completion to retire cycles */ 1497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_COM_TO_RETIRE_CYCLES(trans_op)) 1507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_OP_COMP_TO_RETIRE, 1517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_COM_TO_RETIRE_CYCLES(trans_op)); 1527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_RETIRED) { 1557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op)) 1567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS Branch retired op */ 1577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_BRANCH_RETIRED) ; 1587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_MISP) { 1617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op) 1627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Test branch-specific event flags */ 1637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS mispredicted Branch op */ 1647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_BRANCH_MISPREDICT(trans_op)) 1657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_BRANCH_MISP) ; 1667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_TAKEN) { 1697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op) 1707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS taken Branch op */ 1717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_BRANCH_TAKEN(trans_op)) 1727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_BRANCH_TAKEN); 1737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_BRANCH_MISP_TAKEN) { 1767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op) 1777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS mispredicted taken branch op */ 1787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_BRANCH_TAKEN(trans_op) 1797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_BRANCH_MISPREDICT(trans_op)) 1807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_BRANCH_MISP_TAKEN); 1817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_RETURN) { 1847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op) 1857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS return op */ 1867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_RETURN(trans_op)) 1877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_RETURN); 1887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_RETURN_MISP) { 1917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RETIRED(trans_op) 1927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* IBS mispredicted return op */ 1937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_RETURN(trans_op) 1947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_BRANCH_MISPREDICT(trans_op)) 1957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_RETURN_MISP); 1967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 1977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 1987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_SELECTED_FLAG(DE_IBS_RESYNC) { 1997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Test for a resync macro-op */ 2007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_BRANCH_RESYNC(trans_op)) 2017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_RESYNC); 2025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 2035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 2045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 2075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP LS DERIVED FUNCTION 2085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 2097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op_ls (struct transient * trans, unsigned int selected_flag) 2105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 2115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 2125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Preliminary check */ 2145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_LD_OP(trans_op) && !IBS_OP_IBS_ST_OP(trans_op)) 2155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 2165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 2187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if ((selected_flag) == 0) 2197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 2207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_ALL_OP) { 2227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Count the number of LS op samples */ 2237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_ALL_OP) ; 2247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2257a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2267a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_LOAD_OP) { 2277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_LD_OP(trans_op)) 2287a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* TALLy an IBS load derived event */ 2297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_LOAD_OP) ; 2307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STORE_OP) { 2337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_ST_OP(trans_op)) 2347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Count and handle store operations */ 2357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_STORE_OP); 2367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1H) { 2397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)) 2417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L1 DTLB hit -- This is the most frequent case */ 2427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1H); 2437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1M_L2H) { 2467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l2_translation_size = 1 */ 2477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 2497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)) 2507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L1 DTLB miss, L2 DTLB hit */ 2517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2H); 2527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DTLB_L1M_L2M) { 2557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 2567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 2577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)) 2587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L1 DTLB miss, L2 DTLB miss */ 2597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2M); 2607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_MISS) { 2637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_MISS(trans_op)) 2647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_DC_MISS); 2657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_HIT) { 2687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_IBS_DC_MISS(trans_op)) 2697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_DC_HIT); 2707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_MISALIGNED) { 2737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_MISS_ACC(trans_op)) 2747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_MISALIGNED); 2757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_BNK_CONF_LOAD) { 2787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LD_BNK_CON(trans_op)) 2797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_LOAD); 2807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_BNK_CONF_STORE) { 2837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_ST_BNK_CON(trans_op)) 2847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_STORE); 2857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STL_FORWARDED) { 2887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_LD_OP(trans_op) 2897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Data forwarding info are valid only for load ops */ 2907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_ST_TO_LD_FWD(trans_op)) 2917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_STL_FORWARDED) ; 2927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 2947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_STL_CANCELLED) { 2957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_LD_OP(trans_op)) 2967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_ST_TO_LD_CAN(trans_op)) 2977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_STL_CANCELLED) ; 2987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 2997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_UC_MEM_ACCESS) { 3017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_UC_MEM_ACC(trans_op)) 3027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_UC_MEM_ACCESS); 3037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3047a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_WC_MEM_ACCESS) { 3067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_WC_MEM_ACC(trans_op)) 3077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_WC_MEM_ACCESS); 3087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_LOCKED_OP) { 3117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_LOCKED_OP(trans_op)) 3127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_LOCKED_OP); 3137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_MAB_HIT) { 3167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_MAB_HIT(trans_op)) 3177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_MAB_HIT); 3187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_4K) { 3217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l1_translation */ 3227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3257a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op) 3267a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op)) 3277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* This is the most common case, unfortunately */ 3287a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_4K) ; 3297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_2M) { 3327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l1_translation */ 3337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)) 3377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* 2M L1 DTLB page translation */ 3387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_2M); 3397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_1G) { 3427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l1_translation */ 3437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op) 3477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op)) 3487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* 1G L1 DTLB page translation */ 3497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_1G); 3507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L1_DTLB_RES) { 3537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_4K) { 3567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l2_translation_size = 1 */ 3577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 3607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L2 DTLB page translation */ 3627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 3637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 3647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* 4K L2 DTLB page translation */ 3657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_4K); 3667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_2M) { 3697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l2_translation_size = 1 */ 3707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 3737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L2 DTLB page translation */ 3757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 3767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 3777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* 2M L2 DTLB page translation */ 3787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_2M); 3797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_1G) { 3827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* l2_translation_size = 1 */ 3837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op) 3847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op) 3857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op) 3867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* L2 DTLB page translation */ 3887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op) 3897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op)) 3907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* 2M L2 DTLB page translation */ 3917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_1G); 3927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_L2_DTLB_RES2) { 3957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 3967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 3977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_LS_SELECTED_FLAG(DE_IBS_LS_DC_LOAD_LAT) { 3987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_IBS_LD_OP(trans_op) 3997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* If the load missed in DC, tally the DC load miss latency */ 4007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_IBS_DC_MISS(trans_op)) 4017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* DC load miss latency is only reliable for load ops */ 4027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_LS_DC_LOAD_LAT, 4037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_DC_MISS_LATENCY(trans_op)) ; 4045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 4055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 4065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/* 4085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP NB DERIVED FUNCTION 4095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * 4105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * NB data is only guaranteed reliable for load operations 4115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * that miss in L1 and L2 cache. NB data arrives too late 4125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * to be reliable for store operations 4135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */ 4147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op_nb (struct transient * trans, unsigned int selected_flag) 4155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{ 4165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 4175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng /* Preliminary check */ 4197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if ((selected_flag) == 0) 4207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 4217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_LD_OP(trans_op)) 4235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (!IBS_OP_IBS_DC_MISS(trans_op)) 4265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng if (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0) 4295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng return; 4305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng 4317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL) { 4327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 4337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Request was serviced by local processor */ 4347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_LOCAL) ; 4357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE) { 4387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 4397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Request was serviced by remote processor */ 4407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_REMOTE) ; 4417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_L3) { 4447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_01(trans_op)) 4467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_LOCAL_L3); 4477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_CACHE) { 4507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_02(trans_op)) 4527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_LOCAL_CACHE); 4537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_CACHE) { 4567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_02(trans_op)) 4587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_REMOTE_CACHE) ; 4597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_DRAM) { 4627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_03(trans_op)) 4647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_LOCAL_DRAM); 4657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_DRAM) { 4687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_03(trans_op)) 4707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_REMOTE_DRAM) ; 4717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_OTHER) { 4747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_07(trans_op)) 4767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_LOCAL_OTHER); 4777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_OTHER) { 4807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op) 4817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_REQ_SRC_07(trans_op)) 4827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_REMOTE_OTHER) ; 4837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_CACHE_STATE_M) { 4867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_SRC_02(trans_op) 4877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && !IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op)) 4887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_M) ; 4897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_CACHE_STATE_O) { 4927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_SRC_02(trans_op) 4937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown && IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op)) 4947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_O) ; 4957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 4967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 4977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_LOCAL_LATENCY) { 4987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 4997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Request was serviced by local processor */ 5007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_NB_LOCAL_LATENCY, 5017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_DC_MISS_LATENCY(trans_op)); 5027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5047a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown CHECK_OP_NB_SELECTED_FLAG(DE_IBS_NB_REMOTE_LATENCY) { 5057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)) 5067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Request was serviced by remote processor */ 5077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown AGG_IBS_COUNT(DE_IBS_NB_REMOTE_LATENCY, 5087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown IBS_OP_DC_MISS_LATENCY(trans_op)); 5097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 5117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownint trans_ibs_op_rip_invalid (struct transient * trans) 5147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 5157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 5167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (IBS_OP_RIP_INVALID(trans_op)) 5187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 1; 5197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return 0; 5217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 5227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op_mask_reserved (unsigned int family, struct transient * trans) 5257a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 5267a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 5277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5287a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown switch (family) { 5297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case 0x10: 5307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsRipInvalid (MSRC001_1035[38])*/ 5317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data1_high &= ~MASK_RIP_INVALID; 5327a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown break; 5337a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case 0x12: 5347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved NbIbsReqDstProc (MSRCC001_1036[4]) */ 5357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data2_low &= ~NB_MASK_REQ_DST_PROC; 5367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved NbIbsReqCacheHitSt (MSRCC001_1036[5]) */ 5377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data2_low &= ~NB_MASK_L3_STATE; 5387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown break; 5397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case 0x14: 5407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved NbIbsReqDstProc (MSRCC001_1036[4]) */ 5417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data2_low &= ~NB_MASK_REQ_DST_PROC; 5427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved NbIbsReqCacheHitSt (MSRCC001_1036[5]) */ 5437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data2_low &= ~NB_MASK_L3_STATE; 5447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsDcL1tlbHit1G (MSRC001_1037[5]) */ 5457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data3_low &= ~DC_MASK_L1_HIT_1G; 5467a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsDcLdBnkCon (MSRC001_1037[9]) */ 5477a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data3_low &= ~DC_MASK_LD_BANK_CONFLICT; 5487a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsDcStBnkCon (MSRC001_1037[10]) */ 5497a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data3_low &= ~DC_MASK_ST_BANK_CONFLICT; 5507a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsDcStToLdCan (MSRC001_1037[12]) */ 5517a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data3_low &= ~DC_MASK_ST_TO_LD_CANCEL; 5527a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown /* Reserved IbsDcL2tlbHit1G (MSRC001_1037[19]) */ 5537a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_data3_low &= ~DC_MASK_L2_HIT_1G; 5547a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5557a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown break; 5567a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown case 0x15: 5577a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown default: 5587a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown break; 5597a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5607a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5617a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 5627a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5637a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5647a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op_bta(struct transient * trans) 5657a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 5667a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static cookie_t old_cookie = NO_COOKIE; 5677a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static cookie_t old_app_cookie = NO_COOKIE; 5687a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static char const * mod = NULL; 5697a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static char const * app = NULL; 5707a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown const char vmlinux[10] = "vmlinux"; 5717a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 5727a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5737a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!bta_log) 5747a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 5757a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5767a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!trans_op->ibs_op_brtgt_addr) 5777a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 5787a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5797a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if( old_app_cookie == INVALID_COOKIE 5807a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_app_cookie == NO_COOKIE 5817a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_app_cookie != trans->app_cookie) { 5827a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown app = find_cookie(trans->app_cookie); 5837a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_app_cookie = trans->cookie; 5847a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5857a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5867a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (trans->in_kernel == 1) { 5877a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown mod = vmlinux; 5887a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_cookie = NO_COOKIE; 5897a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } else { 5907a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if( old_cookie == INVALID_COOKIE 5917a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_cookie == NO_COOKIE 5927a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_cookie != trans->cookie) { 5937a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown mod = find_cookie(trans->cookie); 5947a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_cookie = trans->cookie; 5957a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5967a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 5977a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 5987a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fprintf(bta_log, "0x%016llx,0x%016llx,%02lu %08u,%08u,0x%08x,0x%08lx\n", 5997a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans->app_cookie, trans->cookie, trans->cpu, trans->tgid, trans->tid, (unsigned int)trans->pc, 6007a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_brtgt_addr); 6017a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown} 6027a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6037a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6047a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brownvoid trans_ibs_op_ls_memaccess(struct transient * trans) 6057a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown{ 6067a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static cookie_t old_cookie = NO_COOKIE; 6077a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static cookie_t old_app_cookie = NO_COOKIE; 6087a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static char const * mod = NULL; 6097a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown static char const * app = NULL; 6107a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown const char vmlinux[10] = "vmlinux"; 6117a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op; 6127a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6137a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (!memaccess_log) 6147a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown return; 6157a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6167a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if( old_app_cookie == INVALID_COOKIE 6177a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_app_cookie == NO_COOKIE 6187a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_app_cookie != trans->app_cookie) { 6197a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown app = find_cookie(trans->app_cookie); 6207a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_app_cookie = trans->cookie; 6217a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } 6227a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6237a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if (trans->in_kernel == 1) { 6247a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown mod = vmlinux; 6257a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_cookie = NO_COOKIE; 6267a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown } else { 6277a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown if( old_cookie == INVALID_COOKIE 6287a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_cookie == NO_COOKIE 6297a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown || old_cookie != trans->cookie) { 6307a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown mod = find_cookie(trans->cookie); 6317a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown old_cookie = trans->cookie; 6325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 6335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng } 6347a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown 6357a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown fprintf(memaccess_log, "0x%016llx,0x%016llx,%02lu,%08u,%08u,0x%08x,0x%08u:%08x,0x%08x:%08x,%s,%08u\n", 6367a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans->app_cookie, 6377a33c86eb98056ef0570c99e713214f8dc56b6efJeff Browntrans->cookie, 6387a33c86eb98056ef0570c99e713214f8dc56b6efJeff Browntrans->cpu, 6397a33c86eb98056ef0570c99e713214f8dc56b6efJeff Browntrans->tgid, 6407a33c86eb98056ef0570c99e713214f8dc56b6efJeff Browntrans->tid, 6417a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown(unsigned int)trans->pc, 6427a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_phys_addr_high, trans_op->ibs_op_phys_addr_low, 6437a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown trans_op->ibs_op_ldst_linaddr_high, trans_op->ibs_op_ldst_linaddr_low, 6447a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown (IBS_OP_IBS_LD_OP(trans_op))? "LD": "ST", 6457a33c86eb98056ef0570c99e713214f8dc56b6efJeff Brown (unsigned int) IBS_OP_DC_MISS_LATENCY(trans_op)); 6465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng} 647