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 Christophersonstatic 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 Mattsonint 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