From cf9956a8c57fb8c0c57e0e1a875ae49e0d7b0bfd Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Sun, 5 Dec 2021 16:38:20 +0200 Subject: [PATCH] intel/ds: use a per GPU clock ID Multi-GPU setups :) Signed-off-by: Lionel Landwerlin Reviewed-by: Rohan Garg Acked-by: Antonio Caggiano Part-of: --- src/intel/ds/intel_pps_driver.cc | 13 +++++----- src/intel/ds/intel_pps_priv.h | 42 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/intel/ds/intel_pps_priv.h diff --git a/src/intel/ds/intel_pps_driver.cc b/src/intel/ds/intel_pps_driver.cc index 43b744e4f47..81a46252e2f 100644 --- a/src/intel/ds/intel_pps_driver.cc +++ b/src/intel/ds/intel_pps_driver.cc @@ -27,6 +27,7 @@ #include #include "intel_pps_perf.h" +#include "intel_pps_priv.h" namespace pps { @@ -43,12 +44,6 @@ uint64_t IntelDriver::get_min_sampling_period_ns() IntelDriver::IntelDriver() { - /* Note: clock_id's below 128 are reserved.. for custom clock sources, - * using the hash of a namespaced string is the recommended approach. - * See: https://perfetto.dev/docs/concepts/clock-sync - */ - this->clock_id = - _mesa_hash_string("org.freedesktop.mesa.intel") | 0x80000000; } IntelDriver::~IntelDriver() @@ -74,6 +69,12 @@ void IntelDriver::enable_all_counters() bool IntelDriver::init_perfcnt() { + /* Note: clock_id's below 128 are reserved.. for custom clock sources, + * using the hash of a namespaced string is the recommended approach. + * See: https://perfetto.dev/docs/concepts/clock-sync + */ + this->clock_id = intel_pps_clock_id(drm_device.gpu_num); + assert(!perf && "Intel perf should not be initialized at this point"); perf = std::make_unique(drm_device.fd); diff --git a/src/intel/ds/intel_pps_priv.h b/src/intel/ds/intel_pps_priv.h new file mode 100644 index 00000000000..7b9d5bdccb2 --- /dev/null +++ b/src/intel/ds/intel_pps_priv.h @@ -0,0 +1,42 @@ +/* + * Copyright © 2021 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef INTEL_PPS_PRIV_H +#define INTEL_PPS_PRIV_H + +#include + +#include "util/hash_table.h" + +/* Common clock_id name for all perfetto producers */ +static inline uint32_t +intel_pps_clock_id(uint32_t gpu_id) +{ + char buf[40]; + snprintf(buf, sizeof(buf), + "org.freedesktop.mesa.intel.gpu%u", gpu_id); + + return _mesa_hash_string(buf) | 0x80000000; +} + +#endif /* INTEL_PPS_PRIV_H */