Linux Test Project
 help / color / mirror / Atom feed
* [LTP] [PATCH] tracing/pt_test: TCONF if Intel PT across VMXON is not supported
@ 2025-03-15 16:01 Jan Stancek via ltp
  2025-03-17 12:23 ` Petr Vorel
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Stancek via ltp @ 2025-03-15 16:01 UTC (permalink / raw)
  To: ltp

As noted in 1c5ac21a0e9b ("perf/x86/intel/pt: Don't die on VMXON"),
some Broadwell systems don't support Intel PT across VMXON.

If the test fails to find any events, check whether there is a
kvm_intel module loaded, and if so check for IA32_VMX_MISC[bit 14].
If this bit is 0, it's not supported. From commit mentioned above:
    Intel SDM, 36.5 "Tracing post-VMXON" says that
    "IA32_VMX_MISC[bit 14]" being 1 means PT can trace
    post-VMXON.

Fixes: https://github.com/linux-test-project/ltp/issues/1228
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
 testcases/kernel/tracing/pt_test/pt_test.c | 39 ++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/testcases/kernel/tracing/pt_test/pt_test.c b/testcases/kernel/tracing/pt_test/pt_test.c
index 54011a884d20..a5a8bad7a205 100644
--- a/testcases/kernel/tracing/pt_test/pt_test.c
+++ b/testcases/kernel/tracing/pt_test/pt_test.c
@@ -14,6 +14,7 @@
  */
 
 
+#define _GNU_SOURCE
 #include <sched.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -35,6 +36,8 @@
 #define INTEL_PT_FORMAT_TSC "/sys/devices/intel_pt/format/tsc"
 #define INTEL_PT_FORMAT_NRT "/sys/devices/intel_pt/format/noretcomp"
 
+#define MSR_IA32_VMX_MISC 0x00000485
+
 //Intel PT event handle
 int fde = -1;
 //map head and size
@@ -102,6 +105,36 @@ static void del_map(uint64_t **buf_ev, long bufsize)
 	free(buf_ev);
 }
 
+/* Some versions of Intel PT do not support tracing across VMXON */
+static int is_supported_across_vmxon(void)
+{
+	char msr_path[64];
+	int msr_fd, ret, supported;
+	uint64_t value;
+
+	sprintf(msr_path, "/dev/cpu/%d/msr", sched_getcpu());
+
+	if (access(msr_path, F_OK) != 0) {
+		tst_res(TINFO, "%s not present", msr_path);
+		tst_res(TINFO, "skipping check for INTEL PT support across VMXON");
+		return 1;
+	}
+
+	msr_fd = SAFE_OPEN(msr_path, O_RDONLY);
+	ret = pread(msr_fd, &value, sizeof(value), MSR_IA32_VMX_MISC);
+	SAFE_CLOSE(msr_fd);
+	if (ret == sizeof(value)) {
+		supported = value & (1 << 14);
+
+		tst_res(TINFO, "Intel PT %s supported across VMXON",
+			supported ? "" : "_NOT_");
+		return supported;
+	}
+
+	/* we failed on MSR read, so assume it's supported */
+	return 1;
+}
+
 static void intel_pt_trace_check(void)
 {
 	uint64_t aux_head = 0;
@@ -117,6 +150,12 @@ static void intel_pt_trace_check(void)
 	pmp = (struct perf_event_mmap_page *)bufm[0];
 	aux_head = *(volatile uint64_t *)&pmp->aux_head;
 	if (aux_head == 0) {
+		if ((access("/sys/module/kvm_intel", F_OK) == 0)
+			&& (!is_supported_across_vmxon())) {
+			tst_brk(TCONF, "Intel PT on this system can not"
+				" run at the same time as virtualization");
+		}
+
 		tst_res(TFAIL, "There is no trace");
 		return;
 	}
-- 
2.43.5


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH] tracing/pt_test: TCONF if Intel PT across VMXON is not supported
  2025-03-15 16:01 [LTP] [PATCH] tracing/pt_test: TCONF if Intel PT across VMXON is not supported Jan Stancek via ltp
@ 2025-03-17 12:23 ` Petr Vorel
  2025-03-20 11:24   ` Jan Stancek via ltp
  0 siblings, 1 reply; 3+ messages in thread
From: Petr Vorel @ 2025-03-17 12:23 UTC (permalink / raw)
  To: Jan Stancek; +Cc: ltp

Hi Jan,

> As noted in 1c5ac21a0e9b ("perf/x86/intel/pt: Don't die on VMXON"),
> some Broadwell systems don't support Intel PT across VMXON.
+1

> If the test fails to find any events, check whether there is a
> kvm_intel module loaded, and if so check for IA32_VMX_MISC[bit 14].
> If this bit is 0, it's not supported. From commit mentioned above:
>     Intel SDM, 36.5 "Tracing post-VMXON" says that
>     "IA32_VMX_MISC[bit 14]" being 1 means PT can trace
>     post-VMXON.

LGTM.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

...
>  static void intel_pt_trace_check(void)
>  {
>  	uint64_t aux_head = 0;
> @@ -117,6 +150,12 @@ static void intel_pt_trace_check(void)
>  	pmp = (struct perf_event_mmap_page *)bufm[0];
>  	aux_head = *(volatile uint64_t *)&pmp->aux_head;
>  	if (aux_head == 0) {
> +		if ((access("/sys/module/kvm_intel", F_OK) == 0)
> +			&& (!is_supported_across_vmxon())) {
> +			tst_brk(TCONF, "Intel PT on this system can not"
> +				" run at the same time as virtualization");

As we discussed at the issue, please join the string before merge.

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [LTP] [PATCH] tracing/pt_test: TCONF if Intel PT across VMXON is not supported
  2025-03-17 12:23 ` Petr Vorel
@ 2025-03-20 11:24   ` Jan Stancek via ltp
  0 siblings, 0 replies; 3+ messages in thread
From: Jan Stancek via ltp @ 2025-03-20 11:24 UTC (permalink / raw)
  To: Petr Vorel; +Cc: ltp

On Mon, Mar 17, 2025 at 1:24 PM Petr Vorel <pvorel@suse.cz> wrote:
>
> Hi Jan,
>
> > As noted in 1c5ac21a0e9b ("perf/x86/intel/pt: Don't die on VMXON"),
> > some Broadwell systems don't support Intel PT across VMXON.
> +1
>
> > If the test fails to find any events, check whether there is a
> > kvm_intel module loaded, and if so check for IA32_VMX_MISC[bit 14].
> > If this bit is 0, it's not supported. From commit mentioned above:
> >     Intel SDM, 36.5 "Tracing post-VMXON" says that
> >     "IA32_VMX_MISC[bit 14]" being 1 means PT can trace
> >     post-VMXON.
>
> LGTM.
>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>

Pushed with the string joined.

Thanks,
Jan

>
> ...
> >  static void intel_pt_trace_check(void)
> >  {
> >       uint64_t aux_head = 0;
> > @@ -117,6 +150,12 @@ static void intel_pt_trace_check(void)
> >       pmp = (struct perf_event_mmap_page *)bufm[0];
> >       aux_head = *(volatile uint64_t *)&pmp->aux_head;
> >       if (aux_head == 0) {
> > +             if ((access("/sys/module/kvm_intel", F_OK) == 0)
> > +                     && (!is_supported_across_vmxon())) {
> > +                     tst_brk(TCONF, "Intel PT on this system can not"
> > +                             " run at the same time as virtualization");
>
> As we discussed at the issue, please join the string before merge.
>
> Kind regards,
> Petr
>


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-03-20 11:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-15 16:01 [LTP] [PATCH] tracing/pt_test: TCONF if Intel PT across VMXON is not supported Jan Stancek via ltp
2025-03-17 12:23 ` Petr Vorel
2025-03-20 11:24   ` Jan Stancek via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox