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