From: Ashok Raj <ashok.raj@intel.com>
To: Hans de Goede <hdegoede@redhat.com>,
Ilpo Jarvinen <ilpo.jarvinen@linux.intel.com>,
markgross@kernel.org
Cc: Jithu Joseph <jithu.joseph@intel.com>,
rostedt@goodmis.org, ashok.raj@intel.com, tony.luck@intel.com,
LKML <linux-kernel@vger.kernel.org>,
platform-driver-x86@vger.kernel.org, patches@lists.linux.dev,
pengfei.xu@intel.com
Subject: [PATCH 2/5] platform/x86/intel/ifs: Trace on all HT threads when executing a test
Date: Thu, 25 Jan 2024 00:22:51 -0800 [thread overview]
Message-ID: <20240125082254.424859-3-ashok.raj@intel.com> (raw)
In-Reply-To: <20240125082254.424859-1-ashok.raj@intel.com>
Enable the trace function on all HT threads. Currently, the trace is
called from some arbitrary CPU where the test was invoked.
This change gives visibility to the exact errors as seen by each
participating HT threads, and not just what was seen from the primary
thread.
Sample output below.
# TASK-PID CPU# ||||| TIMESTAMP FUNCTION
# | | | ||||| | |
migration/0-18 [000] d..1. 527287.084668: start: 0000, stop: 007f, status: 0000000000007f80
migration/128-785 [128] d..1. 527287.084669: start: 0000, stop: 007f, status: 0000000000007f80
Signed-off-by: Ashok Raj <ashok.raj@intel.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
---
include/trace/events/intel_ifs.h | 9 ++---
drivers/platform/x86/intel/ifs/runtest.c | 46 +++++++++++++++++-------
2 files changed, 36 insertions(+), 19 deletions(-)
diff --git a/include/trace/events/intel_ifs.h b/include/trace/events/intel_ifs.h
index af0af3f1d9b7..8462dfb7a020 100644
--- a/include/trace/events/intel_ifs.h
+++ b/include/trace/events/intel_ifs.h
@@ -10,26 +10,23 @@
TRACE_EVENT(ifs_status,
- TP_PROTO(int cpu, int start, int stop, u64 status),
+ TP_PROTO(int start, int stop, u64 status),
- TP_ARGS(cpu, start, stop, status),
+ TP_ARGS(start, stop, status),
TP_STRUCT__entry(
__field( u64, status )
- __field( int, cpu )
__field( u16, start )
__field( u16, stop )
),
TP_fast_assign(
- __entry->cpu = cpu;
__entry->start = start;
__entry->stop = stop;
__entry->status = status;
),
- TP_printk("cpu: %d, start: %.4x, stop: %.4x, status: %.16llx",
- __entry->cpu,
+ TP_printk("start: %.4x, stop: %.4x, status: %.16llx",
__entry->start,
__entry->stop,
__entry->status)
diff --git a/drivers/platform/x86/intel/ifs/runtest.c b/drivers/platform/x86/intel/ifs/runtest.c
index 13ecd55c6668..c8352ffb9195 100644
--- a/drivers/platform/x86/intel/ifs/runtest.c
+++ b/drivers/platform/x86/intel/ifs/runtest.c
@@ -23,6 +23,12 @@
/* Max retries on the same chunk */
#define MAX_IFS_RETRIES 5
+struct run_params {
+ struct ifs_data *ifsd;
+ union ifs_scan *activate;
+ union ifs_status status;
+};
+
/*
* Number of TSC cycles that a logical CPU will wait for the other
* logical CPU on the core in the WRMSR(ACTIVATE_SCAN).
@@ -140,10 +146,22 @@ static bool can_restart(union ifs_status status)
*/
static int doscan(void *data)
{
- int cpu = smp_processor_id();
- u64 *msrs = data;
+ int cpu = smp_processor_id(), start, stop;
+ struct run_params *params = data;
+ union ifs_status status;
+ struct ifs_data *ifsd;
int first;
+ ifsd = params->ifsd;
+
+ if (ifsd->generation) {
+ start = params->activate->gen2.start;
+ stop = params->activate->gen2.stop;
+ } else {
+ start = params->activate->gen0.start;
+ stop = params->activate->gen0.stop;
+ }
+
/* Only the first logical CPU on a core reports result */
first = cpumask_first(cpu_smt_mask(cpu));
@@ -155,12 +173,14 @@ static int doscan(void *data)
* take up to 200 milliseconds (in the case where all chunks
* are processed in a single pass) before it retires.
*/
- wrmsrl(MSR_ACTIVATE_SCAN, msrs[0]);
+ wrmsrl(MSR_ACTIVATE_SCAN, params->activate->data);
+ rdmsrl(MSR_SCAN_STATUS, status.data);
- if (cpu == first) {
- /* Pass back the result of the scan */
- rdmsrl(MSR_SCAN_STATUS, msrs[1]);
- }
+ trace_ifs_status(start, stop, status.data);
+
+ /* Pass back the result of the scan */
+ if (cpu == first)
+ params->status = status;
return 0;
}
@@ -179,7 +199,7 @@ static void ifs_test_core(int cpu, struct device *dev)
struct ifs_data *ifsd;
int to_start, to_stop;
int status_chunk;
- u64 msrvals[2];
+ struct run_params params;
int retries;
ifsd = ifs_get_data(dev);
@@ -190,6 +210,8 @@ static void ifs_test_core(int cpu, struct device *dev)
to_start = 0;
to_stop = ifsd->valid_chunks - 1;
+ params.ifsd = ifs_get_data(dev);
+
if (ifsd->generation) {
activate.gen2.start = to_start;
activate.gen2.stop = to_stop;
@@ -207,12 +229,10 @@ static void ifs_test_core(int cpu, struct device *dev)
break;
}
- msrvals[0] = activate.data;
- stop_core_cpuslocked(cpu, doscan, msrvals);
-
- status.data = msrvals[1];
+ params.activate = &activate;
+ stop_core_cpuslocked(cpu, doscan, ¶ms);
- trace_ifs_status(cpu, to_start, to_stop, status.data);
+ status = params.status;
/* Some cases can be retried, give up for others */
if (!can_restart(status))
--
2.39.2
next prev parent reply other threads:[~2024-01-25 8:23 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-25 8:22 [PATCH 0/5] Miscelleanous fixes and improvements to Infield Scan Ashok Raj
2024-01-25 8:22 ` [PATCH 1/5] platform/x86/intel/ifs: Call release_firmware() when handling errors Ashok Raj
2024-01-25 13:04 ` Ilpo Järvinen
2024-01-26 19:15 ` Hans de Goede
2024-01-29 3:55 ` Pengfei Xu
2024-01-29 8:39 ` Hans de Goede
2024-01-25 8:22 ` Ashok Raj [this message]
2024-01-25 8:22 ` [PATCH 3/5] platform/x86/intel/ifs: Add current batch number to trace output Ashok Raj
2024-01-25 8:22 ` [PATCH 4/5] platform/x86/intel/ifs: Replace the exit rendezvous with an entry rendezvous for ARRAY_BIST Ashok Raj
2024-01-25 8:22 ` [PATCH 5/5] platform/x86/intel/ifs: Add an entry rendezvous for SAF Ashok Raj
2024-01-31 10:29 ` [PATCH 0/5] Miscelleanous fixes and improvements to Infield Scan Ilpo Järvinen
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=20240125082254.424859-3-ashok.raj@intel.com \
--to=ashok.raj@intel.com \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jithu.joseph@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=markgross@kernel.org \
--cc=patches@lists.linux.dev \
--cc=pengfei.xu@intel.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=tony.luck@intel.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