brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 354780f Raw
73 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * auxtrace.c: AUX area tracing support4 * Copyright (c) 2013-2014, Intel Corporation.5 */6 7#include <errno.h>8#include <stdbool.h>9 10#include "../../../util/header.h"11#include "../../../util/debug.h"12#include "../../../util/pmu.h"13#include "../../../util/pmus.h"14#include "../../../util/auxtrace.h"15#include "../../../util/intel-pt.h"16#include "../../../util/intel-bts.h"17#include "../../../util/evlist.h"18 19static20struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist,21						    int *err)22{23	struct perf_pmu *intel_pt_pmu;24	struct perf_pmu *intel_bts_pmu;25	struct evsel *evsel;26	bool found_pt = false;27	bool found_bts = false;28 29	intel_pt_pmu = perf_pmus__find(INTEL_PT_PMU_NAME);30	intel_bts_pmu = perf_pmus__find(INTEL_BTS_PMU_NAME);31 32	evlist__for_each_entry(evlist, evsel) {33		if (intel_pt_pmu && evsel->core.attr.type == intel_pt_pmu->type)34			found_pt = true;35		if (intel_bts_pmu && evsel->core.attr.type == intel_bts_pmu->type)36			found_bts = true;37	}38 39	if (found_pt && found_bts) {40		pr_err("intel_pt and intel_bts may not be used together\n");41		*err = -EINVAL;42		return NULL;43	}44 45	if (found_pt)46		return intel_pt_recording_init(err);47 48	if (found_bts)49		return intel_bts_recording_init(err);50 51	return NULL;52}53 54struct auxtrace_record *auxtrace_record__init(struct evlist *evlist,55					      int *err)56{57	char buffer[64];58	int ret;59 60	*err = 0;61 62	ret = get_cpuid(buffer, sizeof(buffer));63	if (ret) {64		*err = ret;65		return NULL;66	}67 68	if (!strncmp(buffer, "GenuineIntel,", 13))69		return auxtrace_record__init_intel(evlist, err);70 71	return NULL;72}73