Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms and conditions of the gnu general public license version 2 as published by the free software foundation this program is distributed in the hope it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 263 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190529141901.208660670@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
72 lines
1.5 KiB
C
72 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* auxtrace.c: AUX area tracing support
|
|
* Copyright (c) 2013-2014, Intel Corporation.
|
|
*/
|
|
|
|
#include <errno.h>
|
|
#include <stdbool.h>
|
|
|
|
#include "../../util/header.h"
|
|
#include "../../util/debug.h"
|
|
#include "../../util/pmu.h"
|
|
#include "../../util/auxtrace.h"
|
|
#include "../../util/intel-pt.h"
|
|
#include "../../util/intel-bts.h"
|
|
#include "../../util/evlist.h"
|
|
|
|
static
|
|
struct auxtrace_record *auxtrace_record__init_intel(struct perf_evlist *evlist,
|
|
int *err)
|
|
{
|
|
struct perf_pmu *intel_pt_pmu;
|
|
struct perf_pmu *intel_bts_pmu;
|
|
struct perf_evsel *evsel;
|
|
bool found_pt = false;
|
|
bool found_bts = false;
|
|
|
|
intel_pt_pmu = perf_pmu__find(INTEL_PT_PMU_NAME);
|
|
intel_bts_pmu = perf_pmu__find(INTEL_BTS_PMU_NAME);
|
|
|
|
evlist__for_each_entry(evlist, evsel) {
|
|
if (intel_pt_pmu && evsel->attr.type == intel_pt_pmu->type)
|
|
found_pt = true;
|
|
if (intel_bts_pmu && evsel->attr.type == intel_bts_pmu->type)
|
|
found_bts = true;
|
|
}
|
|
|
|
if (found_pt && found_bts) {
|
|
pr_err("intel_pt and intel_bts may not be used together\n");
|
|
*err = -EINVAL;
|
|
return NULL;
|
|
}
|
|
|
|
if (found_pt)
|
|
return intel_pt_recording_init(err);
|
|
|
|
if (found_bts)
|
|
return intel_bts_recording_init(err);
|
|
|
|
return NULL;
|
|
}
|
|
|
|
struct auxtrace_record *auxtrace_record__init(struct perf_evlist *evlist,
|
|
int *err)
|
|
{
|
|
char buffer[64];
|
|
int ret;
|
|
|
|
*err = 0;
|
|
|
|
ret = get_cpuid(buffer, sizeof(buffer));
|
|
if (ret) {
|
|
*err = ret;
|
|
return NULL;
|
|
}
|
|
|
|
if (!strncmp(buffer, "GenuineIntel,", 13))
|
|
return auxtrace_record__init_intel(evlist, err);
|
|
|
|
return NULL;
|
|
}
|