Date: Fri, 31 Jul 2020 09:50:36 -0700 From: Chuck Tuffli <chuck@tuffli.net> To: John Baldwin <jhb@freebsd.org>, grehan@freebsd.org Cc: freebsd-virtualization@freebsd.org Message-ID: <CAM0tzX25sR4xa86n6t6=Bp__m8=sxqtVs%2Ba__9aFyBen5hFPOw@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
John / Peter
I'm running an application in a Linux guest under bhyve that is core
dumping because of an Illegal instruction. Running a simplified case in gdb
shows:
$ gdb -q rdtscp
Reading symbols from rdtscp...done.
(gdb) run
Starting program: /home/tuffli/rdtscp
Program received signal SIGILL, Illegal instruction.
main (argc=1, argv=0x7fffffffeae8) at rdtscp.c:12
12 time1 = __builtin_ia32_rdtscp(&dummy);
(gdb) l
7 main(int argc, char *argv[])
8 {
9 uint64_t time1, time2;
10 uint32_t dummy;
11
12 time1 = __builtin_ia32_rdtscp(&dummy);
13 usleep(1000);
14 time2 = __builtin_ia32_rdtscp(&dummy);
15
16 printf("time delta %lu\n", time2 - time1);
17
18 return (EXIT_SUCCESS);
19 }
This same program works on the FreeBSD 12-stable machine hosting the VM as
well as another bare-metal Linux host. Poking around in the vmm code, I
found
/*
* Hide rdtscp/ia32_tsc_aux until we know how
* to deal with them.
*/
regs[3] &= ~AMDID_RDTSCP;
break;
in sys/amd64/vmm/x86.c which I _think_ is relevant because lscpu doesn't
show the rdtscp flag. If this is the root cause, what would need to be done
to implement this?
--chuck
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAM0tzX25sR4xa86n6t6=Bp__m8=sxqtVs%2Ba__9aFyBen5hFPOw>
