1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-18 02:19:39 +00:00

Make bhyve SMBIOS table topology aware

When the CPU Topology was added to bhyve in r332298 the SMBIOS table was
missed, this table passes topology information to the system and was still
using the old concept of each vCPU is a socket with 1 core and 1 thread.
This code did not even try to use the old sysctl information to adjust
this data.

Correct that by building a proper SMBios table, mapping the > 254 cases to
0 per the SMBios 2.6 specification that is claimed by the structure.

Reviewed by:		Patrick Mooney <patrick.mooney@joyent.com>
Approved by:		bde and/or phk (mentor), jhb (maintainer)
MFC:			3 days
Differential Revision:	https://reviews.freebsd.org/D18998
This commit is contained in:
Rodney W. Grimes 2019-04-25 22:53:55 +00:00
parent 77be224862
commit 3facfc7560
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=346717
2 changed files with 12 additions and 1 deletions

View File

@ -36,6 +36,7 @@
struct vmctx;
extern int guest_ncpus;
extern uint16_t cores, sockets, threads;
extern char *guest_uuid_str;
extern char *vmname;

View File

@ -636,7 +636,7 @@ smbios_type4_initializer(struct smbios_structure *template_entry,
{
int i;
for (i = 0; i < guest_ncpus; i++) {
for (i = 0; i < sockets; i++) {
struct smbios_table_type4 *type4;
char *p;
int nstrings, len;
@ -655,6 +655,16 @@ smbios_type4_initializer(struct smbios_structure *template_entry,
*(*endaddr) = '\0';
(*endaddr)++;
type4->socket = nstrings + 1;
/* Revise cores and threads after update to smbios 3.0 */
if (cores > 254)
type4->cores = 0;
else
type4->cores = cores;
/* This threads is total threads in a socket */
if ((cores * threads) > 254)
type4->threads = 0;
else
type4->threads = (cores * threads);
curaddr = *endaddr;
}