linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Kajol Jain <kjain@linux.ibm.com>
To: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org
Cc: kjain@linux.ibm.com, atrajeev@linux.vnet.ibm.com,
	maddy@linux.ibm.com, disgoel@linux.vnet.ibm.com,
	rnsastry@linux.ibm.com
Subject: [PATCH 02/35] testing/selftests/powerpc: Add support to fetch "platform" and "base platform" from auxv to detect platform.
Date: Fri,  6 May 2022 14:15:11 +0530	[thread overview]
Message-ID: <20220506084544.56527-3-kjain@linux.ibm.com> (raw)
In-Reply-To: <20220506084544.56527-1-kjain@linux.ibm.com>

From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>

The /proc/self/auxv contains information about "platform" on any
system. Also "base platform" which is an indication about platform
string corresponding to the real PVR. When systems are booted in
compat mode, say, power10 booted in power9 mode, "platform" will
point to power9 whereas base platform will point to power10. Incase,
if the distro doesn't support platform indicated by real PVR,
base platform will have a default value.
The mismatch of platform/base platform is an indication of system
booted in compat mode. In such cases, distro will have a Generic
Compat registered which supports basic features for performance
monitoring.

Some of the selftest needs to be handled differently ( ex: generic
events, alternative events, bhrb filter map) in Generic Compat PMU.
Hence selftest framework needs utility functions to identify such
cases. One way is make sure of auxv information. Below condition can
be used to detect if Generic Compat PMU is registered. ie:

<<>>
if ((AT_PLATFORM != AT_BASE_PLATFORM) && (AT_BASE_PLATFORM != PVR))
<<>>
this indicates Generic Compat PMU.

Add utility function in "include/utils.h" to return:
AT_PLATFORM and AT_BASE_PLATFORM from auxv. Also update misc.c in
"sampling_tests" folder to add function to use above check to
determine presence of generic compat pmu.

In other architecture ( like x86 ), pmu_name is exposed via
"/sys/bus/event_source/devices/cpu/caps". The same could be used
in powerpc in future. Since currently we don't have the "caps"
support in powerpc, patch uses auxv information to detect platform
type and compat mode. But as placeholder utility function is added
considering possiblity of getting "caps" information via sysfs.
If that doesn't exist, fallback to using auxv information.

Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
---
 .../testing/selftests/powerpc/include/utils.h | 10 ++++
 .../powerpc/pmu/sampling_tests/misc.c         | 50 +++++++++++++++++++
 .../powerpc/pmu/sampling_tests/misc.h         |  3 ++
 3 files changed, 63 insertions(+)

diff --git a/tools/testing/selftests/powerpc/include/utils.h b/tools/testing/selftests/powerpc/include/utils.h
index b7d188fc87c7..cf4763d3fc2d 100644
--- a/tools/testing/selftests/powerpc/include/utils.h
+++ b/tools/testing/selftests/powerpc/include/utils.h
@@ -74,6 +74,16 @@ static inline bool have_hwcap2(unsigned long ftr2)
 }
 #endif
 
+static inline char *auxv_base_platform(void)
+{
+	return ((char *)get_auxv_entry(AT_BASE_PLATFORM));
+}
+
+static inline char *auxv_platform(void)
+{
+	return ((char *)get_auxv_entry(AT_PLATFORM));
+}
+
 bool is_ppc64le(void);
 int using_hash_mmu(bool *using_hash);
 
diff --git a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
index 1afcd98f6036..eff56aa9f511 100644
--- a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
+++ b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
@@ -454,3 +454,53 @@ int get_thresh_cmp_val(struct event event)
 		result = (exp << 8) | value;
 	return result;
 }
+
+/*
+ * Utility function to check for generic compat PMU
+ * by comparing base_platform value from auxv and real
+ * PVR value.
+ */
+static bool auxv_generic_compat_pmu(void)
+{
+	int base_pvr = 0;
+
+	if (!strcmp(auxv_base_platform(), "power9"))
+		base_pvr = POWER9;
+	else if (!strcmp(auxv_base_platform(), "power10"))
+		base_pvr = POWER10;
+
+	return (!base_pvr);
+}
+
+/*
+ * Check for generic compat PMU.
+ * First check for presence of pmu_name from
+ * "/sys/bus/event_source/devices/cpu/caps".
+ * If doesn't exist, fallback to using value
+ * auxv.
+ */
+bool check_for_generic_compat_pmu(void)
+{
+	char pmu_name[256];
+
+	memset(pmu_name, 0, sizeof(pmu_name));
+	if (read_sysfs_file("bus/event_source/devices/cpu/caps/pmu_name",
+		pmu_name, sizeof(pmu_name)) < 0)
+		return auxv_generic_compat_pmu();
+
+	if (!strcmp(pmu_name, "generic_compat_pmu"))
+		return true;
+	else
+		return false;
+}
+
+/*
+ * Check if system is booted in compat mode.
+ */
+bool check_for_compat_mode(void)
+{
+	char *platform = auxv_platform();
+	char *base_platform = auxv_base_platform();
+
+	return strcmp(platform, base_platform);
+}
diff --git a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.h b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.h
index 078120883fde..c0e923f38793 100644
--- a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.h
+++ b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.h
@@ -5,6 +5,7 @@
  * Copyright 2022, Kajol Jain, IBM Corp.
  */
 
+#include <sys/stat.h>
 #include "../event.h"
 
 #define POWER10 0x80
@@ -53,6 +54,8 @@ int collect_samples(void *sample_buff);
 u64 *get_intr_regs(struct event *event, void *sample_buff);
 u64 get_reg_value(u64 *intr_regs, char *register_name);
 int get_thresh_cmp_val(struct event event);
+bool check_for_generic_compat_pmu(void);
+bool check_for_compat_mode(void);
 
 static inline int get_mmcr0_fc56(u64 mmcr0, int pmc)
 {
-- 
2.31.1


  parent reply	other threads:[~2022-05-06  8:47 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-06  8:45 [PATCH 00/35] Add group constraints and event code test as part of selftest Kajol Jain
2022-05-06  8:45 ` [PATCH 01/35] selftest/powerpc/pmu: Add mask/shift bits for extracting threshold compare field Kajol Jain
2022-05-06  8:45 ` Kajol Jain [this message]
2022-05-06  8:45 ` [PATCH 03/35] selftest/powerpc/pmu: Add interface test for mmcra_thresh_cmp fields Kajol Jain
2022-05-06  8:45 ` [PATCH 04/35] selftest/powerpc/pmu: Add support for branch sampling in get_intr_regs function Kajol Jain
2022-05-06  8:45 ` [PATCH 05/35] selftest/powerpc/pmu: Add interface test for mmcra_ifm field of indirect call type Kajol Jain
2022-05-06  8:45 ` [PATCH 06/35] selftest/powerpc/pmu: Add interface test for mmcra_ifm field for any branch type Kajol Jain
2022-05-06  8:45 ` [PATCH 07/35] selftest/powerpc/pmu: Add interface test for mmcra_ifm field for conditional " Kajol Jain
2022-05-06  8:45 ` [PATCH 08/35] selftest/powerpc/pmu: Add interface test for bhrb disable field Kajol Jain
2022-05-06  8:45 ` [PATCH 09/35] selftest/powerpc/pmu: Refactor the platform check and add macros to find array size/PVR Kajol Jain
2022-05-06  8:45 ` [PATCH 10/35] selftest/powerpc/pmu: Add selftest to check branch stack enablement will not crash on any platforms Kajol Jain
2022-05-06  8:45 ` [PATCH 11/35] selftest/powerpc/pmu: Add selftest to check PERF_SAMPLE_REGS_INTR option " Kajol Jain
2022-05-06  8:45 ` [PATCH 12/35] selftest/powerpc/pmu: Add selftest for checking valid and invalid bhrb filter maps Kajol Jain
2022-05-06  8:45 ` [PATCH 13/35] selftest/powerpc/pmu: Add selftest for mmcr1 pmcxsel/unit/cache fields Kajol Jain
2022-05-06  8:45 ` [PATCH 14/35] selftest/powerpc/pmu: Add interface test for bhrb disable field for non-branch samples Kajol Jain
2022-05-06  8:45 ` [PATCH 15/35] selftest/powerpc/pmu: Add support for perf event code tests Kajol Jain
2022-05-06  8:45 ` [PATCH 16/35] selftest/powerpc/pmu: Add selftest for group constraint check for PMC5 and PMC6 Kajol Jain
2022-05-06  8:45 ` [PATCH 17/35] selftest/powerpc/pmu: Add selftest to check PMC5/6 is excluded from some constraint checks Kajol Jain
2022-05-06  8:45 ` [PATCH 18/35] selftest/powerpc/pmu: Add selftest to check constraint for number of counters in use Kajol Jain
2022-05-06  8:45 ` [PATCH 19/35] selftest/powerpc/pmu: Add selftest for group constraint check when using same PMC Kajol Jain
2022-05-06  8:45 ` [PATCH 20/35] selftest/powerpc/pmu: Add selftest for group constraint check for radix_scope_qual field Kajol Jain
2022-05-06  8:45 ` [PATCH 21/35] selftest/powerpc/pmu: Add selftest for group constraint for MMCRA Sampling Mode field Kajol Jain
2022-05-06  8:45 ` [PATCH 22/35] selftest/powerpc/pmu: Add selftest for group constraint check MMCRA sample bits Kajol Jain
2022-05-06  8:45 ` [PATCH 23/35] selftest/powerpc/pmu: Add selftest for checking invalid bits in event code Kajol Jain
2022-05-06  8:45 ` [PATCH 24/35] selftest/powerpc/pmu: Add selftest for reserved bit check for MMCRA thresh_ctl field Kajol Jain
2022-05-06  8:45 ` [PATCH 25/35] selftest/powerpc/pmu: Add selftest for blacklist events check in power9 Kajol Jain
2022-05-06  8:45 ` [PATCH 26/35] selftest/powerpc/pmu: Add selftest for event alternatives for power9 Kajol Jain
2022-05-06  8:45 ` [PATCH 27/35] selftest/powerpc/pmu: Add selftest for event alternatives for power10 Kajol Jain
2022-05-06  8:45 ` [PATCH 28/35] selftest/powerpc/pmu: Add selftest for PERF_TYPE_HARDWARE events valid check Kajol Jain
2022-05-06  8:45 ` [PATCH 29/35] selftest/powerpc/pmu: Add selftest for group constraint check for MMCR0 l2l3_sel bits Kajol Jain
2022-05-06  8:45 ` [PATCH 30/35] selftest/powerpc/pmu: Add selftest for group constraint check for MMCR1 cache bits Kajol Jain
2022-05-06  8:45 ` [PATCH 31/35] selftest/powerpc/pmu: Add selftest for group constraint check for MMCRA thresh_cmp field Kajol Jain
2022-05-06  8:45 ` [PATCH 32/35] selftest/powerpc/pmu: Add selftest for group constraint for unit and pmc field in p9 Kajol Jain
2022-05-06  8:45 ` [PATCH 33/35] selftest/powerpc/pmu: Add selftest for group constraint check for MMCRA thresh_ctl field Kajol Jain
2022-05-06  8:45 ` [PATCH 34/35] selftest/powerpc/pmu: Add selftest for group constraint check for MMCRA thresh_sel field Kajol Jain
2022-05-06  8:45 ` [PATCH 35/35] selftest/powerpc/pmu: Add test for hardware cache events Kajol Jain
2022-05-18 13:23 ` [PATCH 00/35] Add group constraints and event code test as part of selftest Michael Ellerman
2022-05-19 16:26   ` Athira Rajeev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220506084544.56527-3-kjain@linux.ibm.com \
    --to=kjain@linux.ibm.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=disgoel@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=maddy@linux.ibm.com \
    --cc=mpe@ellerman.id.au \
    --cc=rnsastry@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).