sysdump: fix hacking of the DMI structure address
authorH. Peter Anvin <hpa@zytor.com>
Sun, 7 Feb 2010 07:26:00 +0000 (23:26 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Sun, 7 Feb 2010 07:26:00 +0000 (23:26 -0800)
Fix the hacking of the DMI structure address, for dmidecode's sake.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
com32/sysdump/dmi.c

index a64e5c1..9e57b4b 100644 (file)
@@ -69,12 +69,11 @@ static void dump_smbios(struct backend *be, size_t dptr)
 
     /*
      * Adjust the address of the smbios table to be 32, to
-     * make dmidecode happy.  According to dmidecode, the checksum on
-     * the smbios structure doesn't need to be adjusted, for whatever
-     * reason...
+     * make dmidecode happy.  The checksum on the smbios table is unchanged,
+     * since it includes the checksum on the dmi table.
      */
     smx.dmi.tbladdr = sizeof smx;
-    smx.dmi.csum -= checksum(&smb->dmi, 0x0f);
+    smx.dmi.csum -= checksum(&smx.dmi, 0x0f);
 
     write_data(be, &smx, sizeof smx, false);
     write_data(be, (const void *)smb->dmi.tbladdr, smb->dmi.tbllen, false);
@@ -92,9 +91,7 @@ static void dump_old_dmi(struct backend *be, size_t dptr)
 
     /*
      * Adjust the address of the smbios table to be 32, to
-     * make dmidecode happy.  According to dmidecode, the checksum on
-     * the smbios structure doesn't need to be adjusted, for whatever
-     * reason...
+     * make dmidecode happy.
      */
     fake.dmi = *dmi;
     memset(&fake.pad, 0, sizeof fake.pad);