svn commit: r347124 - in stable: 11/usr.sbin/bhyve 12/usr.sbin/bhyve

Rodney W. Grimes rgrimes at FreeBSD.org
Sat May 4 13:43:50 UTC 2019


Author: rgrimes
Date: Sat May  4 13:43:48 2019
New Revision: 347124
URL: https://svnweb.freebsd.org/changeset/base/347124

Log:
  MFC: r346715: Acpi MADT table correction for VM_MAXCPU > 21
  
  The bhyve acpi MADT table was given a static space of 256 (0x100) bytes,
  this is enough space to allow VM_MAXCPU to be 21, this patch changes that
  so VM_MAXCPU can be of arbitrary value and not overflow the space by
  actually calculating the space needed for the table.
  
  PR:			212782
  Reviewed by:		Patrick Mooney <patrick.mooney at joyent.com>
  Approved by:		bde (mentor, implicit), jhb (maintainer)
  Differential Revision:	https://reviews.freebsd.org/D18815

Modified:
  stable/12/usr.sbin/bhyve/acpi.c
Directory Properties:
  stable/12/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/11/usr.sbin/bhyve/acpi.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/12/usr.sbin/bhyve/acpi.c
==============================================================================
--- stable/12/usr.sbin/bhyve/acpi.c	Sat May  4 13:05:21 2019	(r347123)
+++ stable/12/usr.sbin/bhyve/acpi.c	Sat May  4 13:43:48 2019	(r347124)
@@ -39,7 +39,9 @@
  *  The tables are placed in the guest's ROM area just below 1MB physical,
  * above the MPTable.
  *
- *  Layout
+ *  Layout (No longer correct at FADT and beyond due to properly
+ *  calculating the size of the MADT to allow for changes to
+ *  VM_MAXCPU above 21 which overflows this layout.)
  *  ------
  *   RSDP  ->   0xf2400    (36 bytes fixed)
  *     RSDT  ->   0xf2440    (36 bytes + 4*7 table addrs, 4 used)
@@ -74,18 +76,31 @@ __FBSDID("$FreeBSD$");
 #include "pci_emul.h"
 
 /*
- * Define the base address of the ACPI tables, and the offsets to
- * the individual tables
+ * Define the base address of the ACPI tables, the sizes of some tables, 
+ * and the offsets to the individual tables,
  */
 #define BHYVE_ACPI_BASE		0xf2400
 #define RSDT_OFFSET		0x040
 #define XSDT_OFFSET		0x080
 #define MADT_OFFSET		0x100
-#define FADT_OFFSET		0x200
-#define	HPET_OFFSET		0x340
-#define	MCFG_OFFSET		0x380
-#define FACS_OFFSET		0x3C0
-#define DSDT_OFFSET		0x400
+/*
+ * The MADT consists of:
+ *	44		Fixed Header
+ *	8 * maxcpu	Processor Local APIC entries
+ *	12		I/O APIC entry
+ *	2 * 10		Interrupt Source Override entires
+ *	6		Local APIC NMI entry
+ */
+#define	MADT_SIZE		(44 + VM_MAXCPU*8 + 12 + 2*10 + 6)
+#define	FADT_OFFSET		(MADT_OFFSET + MADT_SIZE)
+#define	FADT_SIZE		0x140
+#define	HPET_OFFSET		(FADT_OFFSET + FADT_SIZE)
+#define	HPET_SIZE		0x40
+#define	MCFG_OFFSET		(HPET_OFFSET + HPET_SIZE)
+#define	MCFG_SIZE		0x40
+#define	FACS_OFFSET		(MCFG_OFFSET + MCFG_SIZE)
+#define	FACS_SIZE		0x40
+#define	DSDT_OFFSET		(FACS_OFFSET + FACS_SIZE)
 
 #define	BHYVE_ASL_TEMPLATE	"bhyve.XXXXXXX"
 #define BHYVE_ASL_SUFFIX	".aml"


More information about the svn-src-all mailing list