xref: /kvm-unit-tests/x86/rdpru.c (revision 14b54ed754c8a8cae7a22895e4a0b745a3227a4b)
1064d4e37SJim Mattson /* RDPRU test */
2064d4e37SJim Mattson 
3064d4e37SJim Mattson #include "libcflat.h"
4064d4e37SJim Mattson #include "processor.h"
5064d4e37SJim Mattson #include "desc.h"
6064d4e37SJim Mattson 
rdpru_safe(void)7*4143fbfdSSean Christopherson static int rdpru_safe(void)
8064d4e37SJim Mattson {
9064d4e37SJim Mattson 	asm volatile (ASM_TRY("1f")
10064d4e37SJim Mattson 		      ".byte 0x0f,0x01,0xfd \n\t" /* rdpru */
11064d4e37SJim Mattson 		      "1:" : : "c" (0) : "eax", "edx");
12064d4e37SJim Mattson 	return exception_vector();
13064d4e37SJim Mattson }
14064d4e37SJim Mattson 
main(int ac,char ** av)15064d4e37SJim Mattson int main(int ac, char **av)
16064d4e37SJim Mattson {
17064d4e37SJim Mattson 	if (this_cpu_has(X86_FEATURE_RDPRU))
18064d4e37SJim Mattson 		report_skip("RDPRU raises #UD");
19064d4e37SJim Mattson 	else
20*4143fbfdSSean Christopherson 		report(rdpru_safe() == UD_VECTOR, "RDPRU raises #UD");
21064d4e37SJim Mattson 
22064d4e37SJim Mattson 	return report_summary();
23064d4e37SJim Mattson }
24