On Tue, Apr 15, 2014 at 10:29:26AM +0200, Gerd Hoffmann wrote: > So, how about this plan: > > Leave the old interface code basically as-is. type0 and type1 > individual fields are passed like they are passed today. We don't > change to to pass full tables, and we don't extend that to new table > types. Continue to provide these in parallel to the new interface, for > compatibility with old firmware (and old machine types). > > The code to generate complete tables will only be used for > "etc/smbios/smbios-tables". Only machine types for 2.1 + newer will > provide them, so with older machine types seabios will continue to > generate the smbios tables and guest wouldn't notice a difference. > > That means to drop patch #6. Patches 4+5+7+8+9+10+11 could be squashed > together (although it is probably better to leave them separate, even > though 4..10 will not have any effect until 11 is applied) and > simplified a bit (don't provide complete tables via old interface). > > Comments?
So, basically, leave "uint8_t *smbios_get_table()" unchanged, i.e. have it generate a blob of field overrides as it does today. Add "void smbios_get_tables()" as a separate function to generate the entry point and aggregate smbios table, and then: if "machine_type < 2.1" then insert smbios_get_table() into fw_cfg (compat mode) else insert smbios_get_tables() blob + entry point (new hotness) fi I guess both compat and new smbios_get_table[s] can use the same default fields set via the command line. The remaining issue is how to handle "-smbios file=<foo>" blobs; maybe smbios_set_defaults() can be used to set the version, and then the command line parser (smbios_entry_add()) would know which kind of table to insert the blob into, compat or aggregate ? That being said, how do I even tell the difference between pre- and post- 2.1 machine types ? Would that be in pc.c, or pc_[q35|piix].c ? Thanks, --Gabriel PS. This should make the patch set a whole lot more compact, as the main reason in my book for splitting it up into a million pieces was to avoid confusion related to mixing diff deletions and insertions in a non-human-readable form; Since now we're talking about mostly insertions and (almost) no deletions, that should make things quite a bit easier to follow... :)