svn commit: r346717 - head/usr.sbin/bhyve

Rodney W. Grimes rgrimes at FreeBSD.org
Thu Apr 25 22:53:57 UTC 2019


Author: rgrimes
Date: Thu Apr 25 22:53:55 2019
New Revision: 346717
URL: https://svnweb.freebsd.org/changeset/base/346717

Log:
  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 at joyent.com>
  Approved by:		bde and/or phk (mentor), jhb (maintainer)
  MFC:			3 days
  Differential Revision:	https://reviews.freebsd.org/D18998

Modified:
  head/usr.sbin/bhyve/bhyverun.h
  head/usr.sbin/bhyve/smbiostbl.c

Modified: head/usr.sbin/bhyve/bhyverun.h
==============================================================================
--- head/usr.sbin/bhyve/bhyverun.h	Thu Apr 25 22:53:25 2019	(r346716)
+++ head/usr.sbin/bhyve/bhyverun.h	Thu Apr 25 22:53:55 2019	(r346717)
@@ -36,6 +36,7 @@
 
 struct vmctx;
 extern int guest_ncpus;
+extern uint16_t cores, sockets, threads;
 extern char *guest_uuid_str;
 extern char *vmname;
 

Modified: head/usr.sbin/bhyve/smbiostbl.c
==============================================================================
--- head/usr.sbin/bhyve/smbiostbl.c	Thu Apr 25 22:53:25 2019	(r346716)
+++ head/usr.sbin/bhyve/smbiostbl.c	Thu Apr 25 22:53:55 2019	(r346717)
@@ -636,7 +636,7 @@ smbios_type4_initializer(struct smbios_structure *temp
 {
 	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 *temp
 		*(*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;
 	}
 


More information about the svn-src-head mailing list