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