Message ID | 8739hlb5t4.fsf@nemi.mork.no |
---|---|
State | New |
Headers | show |
On Mon, Aug 01, 2011 at 03:49:11PM +0200, Bjørn Mork wrote: > I just confirmed the issue running > > "JUNOS 11.1R3.5 built 2011-06-25 00:17:21 UTC" > > which is as new as it officially gets at the moment. [...] > Also confirmed that 11.1R3.5 is working with SeaBIOS modified as > follows: [...] > - void *finaltable = malloc_high(structure_table_length); > + void *finaltable = malloc_fseg(structure_table_length); I'm not really sure how best to handle this. The smbios table can be larger than the current space reserved for the f-segment (when there are a large number of CPUs). Some ideas: There is actually space in the f-segment that is unused, but not given to the malloc_fseg pool. That space could be given to the pool - though the available space will still vary depending on the code size. It's also possible to relocate the 32bit "run-time" code to high memory which would then free up more space in the f-segment (at the cost of some high memory being reserved from the OS). As above, though, the f-segment is still fundamentally limited by the 16bit code size. Also, it's possible the code could try to use the f-segment if there are less than say 16 cpus and use high memory when more cpus are present. -Kevin
diff --git a/src/smbios.c b/src/smbios.c index 8df0f2d..c96deb5 100644 --- a/src/smbios.c +++ b/src/smbios.c @@ -17,7 +17,7 @@ smbios_entry_point_init(u16 max_structure_size, u16 number_of_structures) { struct smbios_entry_point *ep = malloc_fseg(sizeof(*ep)); - void *finaltable = malloc_high(structure_table_length); + void *finaltable = malloc_fseg(structure_table_length); if (!ep || !finaltable) { warn_noalloc(); free(ep);