Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133173692
D24107.id69951.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D24107.id69951.diff
View Options
Index: usr.sbin/bhyve/smbiostbl.c
===================================================================
--- usr.sbin/bhyve/smbiostbl.c
+++ usr.sbin/bhyve/smbiostbl.c
@@ -255,7 +255,7 @@
uint16_t errhand; /* handle of mem error data */
uint16_t twidth; /* total width in bits */
uint16_t dwidth; /* data width in bits */
- uint16_t size; /* size in bytes */
+ uint16_t size; /* size in kb or mb */
uint8_t form; /* form factor */
uint8_t set; /* set */
uint8_t dloc; /* device locator string */
@@ -268,7 +268,7 @@
uint8_t asset; /* asset tag string */
uint8_t part; /* part number string */
uint8_t attributes; /* attributes */
- uint32_t xsize; /* extended size in mbs */
+ uint32_t xsize; /* extended size in mb */
uint16_t curspeed; /* current speed in mhz */
uint16_t minvoltage; /* minimum voltage */
uint16_t maxvoltage; /* maximum voltage */
@@ -444,7 +444,7 @@
-1, /* handle of memory error data */
64, /* total width in bits including ecc */
64, /* data width in bits */
- 0, /* size in bytes (0x7fff=use extended)*/
+ 0, /* size in kb or mb (0x7fff=use extended)*/
SMBIOS_MDFF_UNKNOWN,
0, /* set (0x00=none, 0xff=unknown) */
1, /* device locator string */
@@ -695,7 +695,8 @@
uint16_t *n, uint16_t *size)
{
struct smbios_table_type17 *type17;
- uint64_t memsize, size_MB;
+ uint64_t memsize;
+ uint32_t size_KB, size_MB;
smbios_generic_initializer(template_entry, template_strings,
curaddr, endaddr, n, size);
@@ -703,20 +704,28 @@
type17->arrayhand = type16_handle;
memsize = guest_lomem + guest_himem;
+ size_KB = memsize / 1024;
size_MB = memsize / MB;
- type17->size = size_MB & 0x7FFF;
+ // A single Type 17 entry can't represent more than ~2PB RAM
+ if (size_MB > 0x7FFFFFFF) {
+ fprintf(stderr, "Error: guest memory too big: "
+ "%uMB greater than max supported 2147483647MB\n", size_MB);
+ return (-1);
+ }
- if (guest_himem > 0) {
- curaddr = *endaddr;
- smbios_generic_initializer(template_entry, template_strings,
- curaddr, endaddr, n, size);
- type17 = (struct smbios_table_type17 *)curaddr;
- type17->arrayhand = type16_handle;
- if (size_MB > 0x7FFF) {
- type17->size = 0x7FFF;
- type17->xsize = size_MB & 0x7FFFFFFF;
- }
+ // See SMBIOS 2.7.0 section 7.18 - Memory Device (Type 17)
+ if (size_KB <= 0x7FFF) {
+ // Can represent up to 32767KB with the top bit set
+ type17->size = size_KB | (1 << 15);
+ } else if (size_MB < 0x7FFF) {
+ // Can represent up to 32766MB with the top bit unset
+ type17->size = size_MB & 0x7FFF;
+ } else {
+ type17->size = 0x7FFF;
+ // Can represent up to 2147483647MB (~2PB)
+ // The top bit is reserved
+ type17->xsize = size_MB & 0x7FFFFFFF;
}
return (0);
@@ -758,12 +767,12 @@
smbios_ep->eplen = 0x1F;
assert(sizeof (struct smbios_entry_point) == smbios_ep->eplen);
smbios_ep->major = 2;
- smbios_ep->minor = 7;
+ smbios_ep->minor = 6;
smbios_ep->revision = 0;
memcpy(smbios_ep->ianchor, SMBIOS_ENTRY_IANCHOR,
SMBIOS_ENTRY_IANCHORLEN);
smbios_ep->staddr = staddr;
- smbios_ep->bcdrev = 0x27;
+ smbios_ep->bcdrev = 0x24;
}
static void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Oct 24, 4:16 PM (10 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24136863
Default Alt Text
D24107.id69951.diff (3 KB)
Attached To
Mode
D24107: Bhyve: fix SMBIOS Type 17 table generation
Attached
Detach File
Event Timeline
Log In to Comment