On x86 / EFI platforms, the SMBIOS table address is available in the EFI system table. During the setup_arch function, the dmi_scan_machine function will detect valid DMI table or not. If CONFIG_EFI is set, the dmi_scan_table function will use the address provided by the EFI system table. But it is inialized later, in the efi_init function. This patch fixes the call order. --- linux-2.6.28.6/arch/x86/kernel/setup.c 2009-02-17 18:29:27.000000000 +0100 +++ linux-2.6.28.6/arch/x86/kernel/setup.c 2009-02-23 09:57:57.000000000 +0100 @@ -903,6 +903,9 @@ finish_e820_parsing(); + if (efi_enabled) + efi_init(); + dmi_scan_machine(); dmi_check_system(bad_bios_dmi_table); @@ -916,9 +919,6 @@ insert_resource(&iomem_resource, &data_resource); insert_resource(&iomem_resource, &bss_resource); - if (efi_enabled) - efi_init(); - #ifdef CONFIG_X86_32 if (ppro_with_ram_bug()) { e820_update_range(0x70000000ULL, 0x40000ULL, E820_RAM,