On Monday 09 October 2017 17:51:43 Mario Limonciello wrote: > +bool dell_wmi_get_interface_version(u32 *version) > +{ > + struct descriptor_priv *priv; > + > + priv = list_first_entry_or_null(&wmi_list, > + struct descriptor_priv, > + list); > + if (!priv) > + return false; This introduce race condition. In case callee of this function is executed before binding 8D9DDCBC-A997-11DA-B012-B622A1EF5492 WMI device into this dell-wmi-descriptor driver, then this function dell_wmi_get_interface_version() returns false. Even it is running on supported machine. Loading of modulus and also binding devices to drivers (registered by modules) is is asynchronous. In case everything is linked into vmlinux binary, this problem could happen too. Binding & initialization of WMI device to this driver can be postponed and callee (dell-wmi) would get false. > + *version = priv->interface_version; > + return true; > +} > +EXPORT_SYMBOL_GPL(dell_wmi_get_interface_version); > + > +bool dell_wmi_get_size(u32 *size) > +{ > + struct descriptor_priv *priv; > + > + priv = list_first_entry_or_null(&wmi_list, > + struct descriptor_priv, > + list); > + if (!priv) > + return false; And same there. > + *size = priv->size; > + return true; > +} > +EXPORT_SYMBOL_GPL(dell_wmi_get_size); -- Pali Rohár pali.rohar@xxxxxxxxx