xref: /kvm-unit-tests/x86/rdpru.c (revision 064d4e371c1c56554f7601b1516d932c0b536245)
1*064d4e37SJim Mattson /* RDPRU test */
2*064d4e37SJim Mattson 
3*064d4e37SJim Mattson #include "libcflat.h"
4*064d4e37SJim Mattson #include "processor.h"
5*064d4e37SJim Mattson #include "desc.h"
6*064d4e37SJim Mattson 
7*064d4e37SJim Mattson static int rdpru_checking(void)
8*064d4e37SJim Mattson {
9*064d4e37SJim Mattson 	asm volatile (ASM_TRY("1f")
10*064d4e37SJim Mattson 		      ".byte 0x0f,0x01,0xfd \n\t" /* rdpru */
11*064d4e37SJim Mattson 		      "1:" : : "c" (0) : "eax", "edx");
12*064d4e37SJim Mattson 	return exception_vector();
13*064d4e37SJim Mattson }
14*064d4e37SJim Mattson 
15*064d4e37SJim Mattson int main(int ac, char **av)
16*064d4e37SJim Mattson {
17*064d4e37SJim Mattson 	setup_idt();
18*064d4e37SJim Mattson 
19*064d4e37SJim Mattson 	if (this_cpu_has(X86_FEATURE_RDPRU))
20*064d4e37SJim Mattson 		report_skip("RDPRU raises #UD");
21*064d4e37SJim Mattson 	else
22*064d4e37SJim Mattson 		report("RDPRU raises #UD", rdpru_checking() == UD_VECTOR);
23*064d4e37SJim Mattson 
24*064d4e37SJim Mattson 	return report_summary();
25*064d4e37SJim Mattson }
26