Re: drivers/platform/x86/dell-smbios-wmi.c:66: undefined reference to `wmidev_evaluate_method'

From: Randy Dunlap
Date: Fri Apr 27 2018 - 17:57:36 EST


On 04/27/2018 11:01 AM, Mario.Limonciello@xxxxxxxx wrote:
>> -----Original Message-----
>> From: Randy Dunlap [mailto:rdunlap@xxxxxxxxxxxxx]
>> Sent: Friday, April 27, 2018 12:56 PM
>> To: kbuild test robot; Limonciello, Mario
>> Cc: kbuild-all@xxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Darren Hart (VMware)
>> Subject: Re: drivers/platform/x86/dell-smbios-wmi.c:66: undefined reference to
>> `wmidev_evaluate_method'
>>
>> On 04/27/2018 06:43 AM, kbuild test robot wrote:
>>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
>>> head: 0644f186fc9d77bb5bd198369e59fb28927a3692
>>> commit: 25d47027e1003546bfd8964b4423cb39bc2d53e9 platform/x86: dell-
>> smbios: Link all dell-smbios-* modules together
>>> date: 7 weeks ago
>>> config: x86_64-randconfig-b0-04271930 (attached as .config)
>>> compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
>>> reproduce:
>>> git checkout 25d47027e1003546bfd8964b4423cb39bc2d53e9
>>> # save the attached .config to linux build tree
>>> make ARCH=x86_64
>>>
>>> All errors (new ones prefixed by >>):
>>>
>>> drivers/platform/x86/dell-smbios-wmi.o: In function `run_smbios_call':
>>>>> drivers/platform/x86/dell-smbios-wmi.c:66: undefined reference to
>> `wmidev_evaluate_method'
>>> drivers/platform/x86/dell-smbios-wmi.o: In function `dell_smbios_wmi_probe':
>>>>> drivers/platform/x86/dell-smbios-wmi.c:157: undefined reference to
>> `dell_wmi_get_descriptor_valid'
>>>>> drivers/platform/x86/dell-smbios-wmi.c:167: undefined reference to
>> `dell_wmi_get_size'
>>>>> drivers/platform/x86/dell-smbios-wmi.c:171: undefined reference to
>> `dell_wmi_get_hotfix'
>>>>> drivers/platform/x86/dell-smbios-wmi.c:182: undefined reference to
>> `set_required_buffer_size'
>>> drivers/platform/x86/dell-smbios-wmi.o: In function `init_dell_smbios_wmi':
>>>>> drivers/platform/x86/dell-smbios-wmi.c:271: undefined reference to
>> `__wmi_driver_register'
>>> drivers/platform/x86/dell-smbios-wmi.o: In function `exit_dell_smbios_wmi':
>>>>> drivers/platform/x86/dell-smbios-wmi.c:276: undefined reference to
>> `wmi_driver_unregister'
>>>
>>>
>>> :::::: The code at line 66 was first introduced by commit
>>> :::::: 1a258e670434f404a4500b65ba1afea2c2b29bba platform/x86: dell-smbios-
>> wmi: Add new WMI dispatcher driver
>>>
>>> :::::: TO: Mario Limonciello <mario.limonciello@xxxxxxxx>
>>> :::::: CC: Darren Hart (VMware) <dvhart@xxxxxxxxxxxxx>
>>
>> Hi,
>>
>> To anyone contemplating this build error, there is already a fix for it from
>> Mario on 2018-04-20. (Seems odd that the patch does not show up on
>> https://patchwork.kernel.org/project/platform-driver-x86/list/ )
>>
>> See lkml.kernel.org/r/1524246131-17621-1-git-send-email-
>> mario.limonciello@xxxxxxxx
>>
>>
>> --
>
> I'm wondering if that is enough of a fix though. This "new" build error is actually
> with WMI stuff which might need adjusting too..?
>

Hi,

CONFIG_DELL_SMBIOS=y
CONFIG_DELL_SMBIOS_WMI=y
# CONFIG_DELL_SMBIOS_SMM is not set
CONFIG_DELL_LAPTOP=y
# CONFIG_DELL_WMI is not set
CONFIG_DELL_WMI_DESCRIPTOR=m
# CONFIG_DELL_WMI_AIO is not set
CONFIG_DELL_WMI_LED=m
CONFIG_ACPI_WMI=m

kconfig tells us:

WARNING: unmet direct dependencies detected for DELL_SMBIOS
Depends on [m]: X86 [=y] && X86_PLATFORM_DEVICES [=y] && (DCDBAS [=y] || DCDBAS [=y]=n) && (ACPI_WMI [=m] || ACPI_WMI [=m]=n)
Selected by [y]:
- DELL_LAPTOP [=y] && X86 [=y] && X86_PLATFORM_DEVICES [=y] && DMI [=y] && BACKLIGHT_CLASS_DEVICE [=y] && (ACPI_VIDEO [=n] || ACPI_VIDEO [=n]=n) && (RFKILL [=y] || RFKILL [=y]=n) && SERIO_I8042 [=y]


The crux of the problem is that DELL_SMBIOS=y (is builtin) but DELL_WMI_DESCRIPTOR=m,
so calls from dell-smbios-wmi.c cannot see the dell-wmi-descriptor.c APIs.

DELL_WMI_DESCRIPTOR depends on ACPI_WMI [which =m in the problem .config],
so ... Wait!

DELL_SMBIOS depends on ACPI_WMI so when ACPI_WMI=m, DELL_SMBIOS should never =y.
Your DELL_LAPTOP Kconfig patch does fix this, I believe, because when DELL_LAPTOP=y,
its select DELL_SMBIOS incorrectly makes DELL_SMBIOS=y.


so if we can get your patch merged, we can see if any more breakage happens... :)

--
~Randy